From e9bc0f73b3cbccbfe399c33ef6bc986034492767 Mon Sep 17 00:00:00 2001 From: niksedk Date: Fri, 25 Jun 2021 08:46:01 +0200 Subject: [PATCH] Use small preview mkv for ASSA style windows --- installer/Subtitle_Edit_installer.iss | 4 ++ preview.mkv | Bin 0 -> 35710 bytes src/ui/Forms/Assa/ApplyCustomStyles.cs | 43 ++------------ src/ui/Forms/Assa/SetPosition.cs | 2 +- src/ui/Forms/Styles/SubStationAlphaStyles.cs | 39 +------------ src/ui/Logic/VideoPreviewGenerator.cs | 57 +++++++++++++++++++ src/ui/SubtitleEdit.csproj | 1 + 7 files changed, 69 insertions(+), 77 deletions(-) create mode 100644 preview.mkv create mode 100644 src/ui/Logic/VideoPreviewGenerator.cs diff --git a/installer/Subtitle_Edit_installer.iss b/installer/Subtitle_Edit_installer.iss index 32798a19c..d319fa967 100644 --- a/installer/Subtitle_Edit_installer.iss +++ b/installer/Subtitle_Edit_installer.iss @@ -236,6 +236,9 @@ Source: ..\Dictionaries\en_US.dic; DestDir: {userappdata}\Subtit Source: ..\Ocr\Latin.db; DestDir: {userappdata}\Subtitle Edit\Ocr; Flags: ignoreversion uninsneveruninstall onlyifdoesntexist; Components: main Source: ..\Ocr\Latin.nocr; DestDir: {userappdata}\Subtitle Edit\Ocr; Flags: ignoreversion uninsneveruninstall onlyifdoesntexist; Components: main +Source: ..\preview.mkv; DestDir: {userappdata}\Subtitle Edit; Flags: ignoreversion uninsneveruninstall onlyifdoesntexist; Components: main + + #ifdef localize Source: {#bindir}\Languages\ar-EG.xml; DestDir: {app}\Languages; Flags: ignoreversion; Components: translations Source: {#bindir}\Languages\bg-BG.xml; DestDir: {app}\Languages; Flags: ignoreversion; Components: translations @@ -619,6 +622,7 @@ begin RemoveDir(ExpandConstant('{userappdata}\Subtitle Edit\Dictionaries')); DeleteFile(ExpandConstant('{userappdata}\Subtitle Edit\Ocr\Latin.db')); DeleteFile(ExpandConstant('{userappdata}\Subtitle Edit\Ocr\Latin.nocr')); + DeleteFile(ExpandConstant('{userappdata}\Subtitle Edit\preview.mkv')); DelTree(ExpandConstant('{userappdata}\Subtitle Edit\Ocr\*.*'), False, True, False); RemoveDir(ExpandConstant('{userappdata}\Subtitle Edit\Ocr')); DelTree(ExpandConstant('{userappdata}\Subtitle Edit\Plugins\*.*'), False, True, False); diff --git a/preview.mkv b/preview.mkv new file mode 100644 index 0000000000000000000000000000000000000000..f363db1cce01fd50c92b7ee4da1c395eec008f7b GIT binary patch literal 35710 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 literal 0 HcmV?d00001 diff --git a/src/ui/Forms/Assa/ApplyCustomStyles.cs b/src/ui/Forms/Assa/ApplyCustomStyles.cs index 509e90b11..a969d4433 100644 --- a/src/ui/Forms/Assa/ApplyCustomStyles.cs +++ b/src/ui/Forms/Assa/ApplyCustomStyles.cs @@ -343,23 +343,8 @@ namespace Nikse.SubtitleEdit.Forms.Assa private bool GeneratePreviewViaMpv() { - var fileName = Path.Combine(Configuration.DataDirectory, "preview.mp4"); - if (!File.Exists(fileName)) - { - var isFfmpegAvailable = !Configuration.IsRunningOnWindows || !string.IsNullOrEmpty(Configuration.Settings.General.FFmpegLocation) && File.Exists(Configuration.Settings.General.FFmpegLocation); - if (!isFfmpegAvailable) - { - return false; - } - - using (var p = GetFFmpegProcess(fileName)) - { - p.Start(); - p.WaitForExit(); - } - } - - if (!LibMpvDynamic.IsInstalled) + var fileName = VideoPreviewGenerator.GetVideoPreviewFileName(); + if (string.IsNullOrEmpty(fileName) || !LibMpvDynamic.IsInstalled) { return false; } @@ -377,26 +362,6 @@ namespace Nikse.SubtitleEdit.Forms.Assa return true; } - public static Process GetFFmpegProcess(string outputFileName) - { - var ffmpegLocation = Configuration.Settings.General.FFmpegLocation; - if (!Configuration.IsRunningOnWindows && (string.IsNullOrEmpty(ffmpegLocation) || !File.Exists(ffmpegLocation))) - { - ffmpegLocation = "ffmpeg"; - } - - return new Process - { - StartInfo = - { - FileName = ffmpegLocation, - Arguments = $"-t 1 -f lavfi -i color=c=blue:s=720x480 -c:v libx264 -tune stillimage -pix_fmt yuv420p \"{outputFileName}\"", - UseShellExecute = false, - CreateNoWindow = true - } - }; - } - private void VideoLoaded(object sender, EventArgs e) { var format = new AdvancedSubStationAlpha(); @@ -407,8 +372,8 @@ namespace Nikse.SubtitleEdit.Forms.Assa { var p = new Paragraph(_subtitle.Paragraphs[indices[0]]) { - StartTime = { TotalMilliseconds = 0 }, - EndTime = { TotalMilliseconds = 1000 } + StartTime = { TotalMilliseconds = 0 }, + EndTime = { TotalMilliseconds = 2000 } }; p.Text = styleToApply + p.Text; subtitle.Paragraphs.Add(p); diff --git a/src/ui/Forms/Assa/SetPosition.cs b/src/ui/Forms/Assa/SetPosition.cs index 2764741c2..1c3c4009e 100644 --- a/src/ui/Forms/Assa/SetPosition.cs +++ b/src/ui/Forms/Assa/SetPosition.cs @@ -216,7 +216,7 @@ namespace Nikse.SubtitleEdit.Forms.Assa private bool GeneratePreviewViaMpv() { - var fileName = _videoFileName; // Path.Combine(Configuration.DataDirectory, "preview.mp4"); + var fileName = _videoFileName; if (!File.Exists(fileName)) { var isFfmpegAvailable = !Configuration.IsRunningOnWindows || !string.IsNullOrEmpty(Configuration.Settings.General.FFmpegLocation) && File.Exists(Configuration.Settings.General.FFmpegLocation); diff --git a/src/ui/Forms/Styles/SubStationAlphaStyles.cs b/src/ui/Forms/Styles/SubStationAlphaStyles.cs index 7669adfa1..fc4bf9a37 100644 --- a/src/ui/Forms/Styles/SubStationAlphaStyles.cs +++ b/src/ui/Forms/Styles/SubStationAlphaStyles.cs @@ -407,23 +407,8 @@ namespace Nikse.SubtitleEdit.Forms.Styles private bool GeneratePreviewViaMpv() { - var fileName = Path.Combine(Configuration.DataDirectory, "preview.mp4"); - if (!File.Exists(fileName)) - { - var isFfmpegAvailable = !Configuration.IsRunningOnWindows || !string.IsNullOrEmpty(Configuration.Settings.General.FFmpegLocation) && File.Exists(Configuration.Settings.General.FFmpegLocation); - if (!isFfmpegAvailable) - { - return false; - } - - using (var p = GetFFmpegProcess(fileName)) - { - p.Start(); - p.WaitForExit(); - } - } - - if (!LibMpvDynamic.IsInstalled) + var fileName = VideoPreviewGenerator.GetVideoPreviewFileName(); + if (string.IsNullOrEmpty(fileName) || !LibMpvDynamic.IsInstalled) { return false; } @@ -441,26 +426,6 @@ namespace Nikse.SubtitleEdit.Forms.Styles return true; } - public static Process GetFFmpegProcess(string outputFileName) - { - var ffmpegLocation = Configuration.Settings.General.FFmpegLocation; - if (!Configuration.IsRunningOnWindows && (string.IsNullOrEmpty(ffmpegLocation) || !File.Exists(ffmpegLocation))) - { - ffmpegLocation = "ffmpeg"; - } - - return new Process - { - StartInfo = - { - FileName = ffmpegLocation, - Arguments = $"-t 1 -f lavfi -i color=c=blue:s=720x480 -c:v libx264 -tune stillimage -pix_fmt yuv420p \"{outputFileName}\"", - UseShellExecute = false, - CreateNoWindow = true - } - }; - } - private void VideoStartLoaded(object sender, EventArgs e) { var format = new AdvancedSubStationAlpha(); diff --git a/src/ui/Logic/VideoPreviewGenerator.cs b/src/ui/Logic/VideoPreviewGenerator.cs new file mode 100644 index 000000000..55dd7430a --- /dev/null +++ b/src/ui/Logic/VideoPreviewGenerator.cs @@ -0,0 +1,57 @@ +using System; +using System.Diagnostics; +using System.Drawing.Imaging; +using System.IO; +using Nikse.SubtitleEdit.Core.Common; + +namespace Nikse.SubtitleEdit.Logic +{ + public class VideoPreviewGenerator + { + public static string GetVideoPreviewFileName() + { + var previewFileName = Path.Combine(Configuration.DataDirectory, "preview.mkv"); + if (File.Exists(previewFileName)) + { + return previewFileName; + } + + try + { + const int rectangleSize = 9; + var backgroundImage = TextDesigner.MakeBackgroundImage(720, 480, rectangleSize, Configuration.Settings.General.UseDarkTheme); + var tempImageFileName = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".png"); + backgroundImage.Save(tempImageFileName, ImageFormat.Png); + var processMakeVideo = GetFFmpegProcess(tempImageFileName, previewFileName, backgroundImage.Width, backgroundImage.Height); + processMakeVideo.Start(); + processMakeVideo.WaitForExit(); + } + catch + { + return null; + } + + return File.Exists(previewFileName) ? previewFileName : null; + } + + private static Process GetFFmpegProcess(string imageFileName, string outputFileName, int videoWidth, int videoHeight) + { + var ffmpegLocation = Configuration.Settings.General.FFmpegLocation; + if (!Configuration.IsRunningOnWindows && (string.IsNullOrEmpty(ffmpegLocation) || !File.Exists(ffmpegLocation))) + { + ffmpegLocation = "ffmpeg"; + } + + return new Process + { + StartInfo = + { + FileName = ffmpegLocation, + Arguments = $"-t 3 -loop 1 -i \"{imageFileName}\" -c:v libx264 -tune stillimage -shortest -s {videoWidth}x{videoHeight} \"{outputFileName}\"", + UseShellExecute = false, + CreateNoWindow = true + } + }; + } + } +} diff --git a/src/ui/SubtitleEdit.csproj b/src/ui/SubtitleEdit.csproj index 8c3254136..7d3dfdc0e 100644 --- a/src/ui/SubtitleEdit.csproj +++ b/src/ui/SubtitleEdit.csproj @@ -1240,6 +1240,7 @@ +