Add progress+resolution to "Gen video w burned-in subs" - thx David :)

Related to https://www.nikse.dk/Home/Details/637654396150000000
This commit is contained in:
niksedk 2021-08-29 18:04:08 +02:00
parent a31f1ba2a9
commit 9f22d08462
9 changed files with 286 additions and 27 deletions

View File

@ -802,6 +802,8 @@ Note: Do check free disk space.</WaveFileMalformed>
Note: Advanced Substation Alpha supported.</Info>
<XGeneratedWithBurnedInSubs>"{0}" generated with burned-in subtitle.</XGeneratedWithBurnedInSubs>
<TimeRemainingSeconds>Time remaining: {0} seconds</TimeRemainingSeconds>
<TimeRemainingMinutesAndSeconds>Time remaining: {0} minutes and {1} seconds</TimeRemainingMinutesAndSeconds>
</GenerateVideoWithBurnedInSubs>
<GetDictionaries>
<Title>Need dictionaries?</Title>
@ -1267,6 +1269,7 @@ To use an API key go to "Options -&gt; Settings -&gt; Tools" to enter your Googl
<Help>Help</Help>
<ShowHideWaveform>Show/hide waveform</ShowHideWaveform>
<ShowHideVideo>Show/hide video</ShowHideVideo>
<AssaDraw>Advanced Sub Station Alpha draw</AssaDraw>
</ToolBar>
<ContextMenu>
<SizeAllColumnsToFit>Size all columns to fit</SizeAllColumnsToFit>

View File

@ -29,6 +29,7 @@ namespace Nikse.SubtitleEdit.Forms
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.buttonOK = new System.Windows.Forms.Button();
this.buttonCancel = new System.Windows.Forms.Button();
@ -36,16 +37,26 @@ namespace Nikse.SubtitleEdit.Forms
this.labelInfo = new System.Windows.Forms.Label();
this.numericUpDownFontSize = new System.Windows.Forms.NumericUpDown();
this.labelFontSize = new System.Windows.Forms.Label();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.labelProgress = new System.Windows.Forms.Label();
this.groupBoxSettings = new System.Windows.Forms.GroupBox();
this.labelX = new System.Windows.Forms.Label();
this.labelResolution = new System.Windows.Forms.Label();
this.numericUpDownHeight = new System.Windows.Forms.NumericUpDown();
this.numericUpDownWidth = new System.Windows.Forms.NumericUpDown();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownFontSize)).BeginInit();
this.groupBoxSettings.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownHeight)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownWidth)).BeginInit();
this.SuspendLayout();
//
// progressBar1
//
this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.progressBar1.Location = new System.Drawing.Point(12, 135);
this.progressBar1.Location = new System.Drawing.Point(12, 199);
this.progressBar1.Name = "progressBar1";
this.progressBar1.Size = new System.Drawing.Size(405, 23);
this.progressBar1.Size = new System.Drawing.Size(434, 11);
this.progressBar1.TabIndex = 22;
this.progressBar1.Visible = false;
//
@ -53,7 +64,7 @@ namespace Nikse.SubtitleEdit.Forms
//
this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonOK.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.buttonOK.Location = new System.Drawing.Point(423, 135);
this.buttonOK.Location = new System.Drawing.Point(452, 199);
this.buttonOK.Name = "buttonOK";
this.buttonOK.Size = new System.Drawing.Size(121, 23);
this.buttonOK.TabIndex = 23;
@ -66,7 +77,7 @@ namespace Nikse.SubtitleEdit.Forms
this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.buttonCancel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.buttonCancel.Location = new System.Drawing.Point(550, 135);
this.buttonCancel.Location = new System.Drawing.Point(579, 199);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 24;
@ -78,7 +89,7 @@ namespace Nikse.SubtitleEdit.Forms
//
this.labelPleaseWait.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.labelPleaseWait.AutoSize = true;
this.labelPleaseWait.Location = new System.Drawing.Point(12, 119);
this.labelPleaseWait.Location = new System.Drawing.Point(12, 183);
this.labelPleaseWait.Name = "labelPleaseWait";
this.labelPleaseWait.Size = new System.Drawing.Size(70, 13);
this.labelPleaseWait.TabIndex = 25;
@ -89,13 +100,13 @@ namespace Nikse.SubtitleEdit.Forms
this.labelInfo.AutoSize = true;
this.labelInfo.Location = new System.Drawing.Point(15, 29);
this.labelInfo.Name = "labelInfo";
this.labelInfo.Size = new System.Drawing.Size(215, 13);
this.labelInfo.Size = new System.Drawing.Size(220, 13);
this.labelInfo.TabIndex = 26;
this.labelInfo.Text = "This will save video x with burned-in subtitle.";
this.labelInfo.Text = "This will save video x with burned-in subtitles.";
//
// numericUpDownFontSize
//
this.numericUpDownFontSize.Location = new System.Drawing.Point(472, 40);
this.numericUpDownFontSize.Location = new System.Drawing.Point(88, 33);
this.numericUpDownFontSize.Maximum = new decimal(new int[] {
1000,
0,
@ -118,19 +129,126 @@ namespace Nikse.SubtitleEdit.Forms
// labelFontSize
//
this.labelFontSize.AutoSize = true;
this.labelFontSize.Location = new System.Drawing.Point(472, 21);
this.labelFontSize.Location = new System.Drawing.Point(19, 35);
this.labelFontSize.Name = "labelFontSize";
this.labelFontSize.Size = new System.Drawing.Size(49, 13);
this.labelFontSize.TabIndex = 28;
this.labelFontSize.Text = "Font size";
//
// timer1
//
this.timer1.Interval = 1000;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// labelProgress
//
this.labelProgress.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.labelProgress.AutoSize = true;
this.labelProgress.Location = new System.Drawing.Point(15, 213);
this.labelProgress.Name = "labelProgress";
this.labelProgress.Size = new System.Drawing.Size(88, 13);
this.labelProgress.TabIndex = 29;
this.labelProgress.Text = "Remaining time...";
//
// groupBoxSettings
//
this.groupBoxSettings.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBoxSettings.Controls.Add(this.labelX);
this.groupBoxSettings.Controls.Add(this.labelResolution);
this.groupBoxSettings.Controls.Add(this.numericUpDownHeight);
this.groupBoxSettings.Controls.Add(this.numericUpDownWidth);
this.groupBoxSettings.Controls.Add(this.numericUpDownFontSize);
this.groupBoxSettings.Controls.Add(this.labelFontSize);
this.groupBoxSettings.Location = new System.Drawing.Point(18, 58);
this.groupBoxSettings.Name = "groupBoxSettings";
this.groupBoxSettings.Size = new System.Drawing.Size(636, 107);
this.groupBoxSettings.TabIndex = 30;
this.groupBoxSettings.TabStop = false;
this.groupBoxSettings.Text = "Settings";
//
// labelX
//
this.labelX.AutoSize = true;
this.labelX.Location = new System.Drawing.Point(158, 65);
this.labelX.Name = "labelX";
this.labelX.Size = new System.Drawing.Size(12, 13);
this.labelX.TabIndex = 31;
this.labelX.Text = "x";
//
// labelResolution
//
this.labelResolution.AutoSize = true;
this.labelResolution.Location = new System.Drawing.Point(19, 65);
this.labelResolution.Name = "labelResolution";
this.labelResolution.Size = new System.Drawing.Size(57, 13);
this.labelResolution.TabIndex = 29;
this.labelResolution.Text = "Resolution";
//
// numericUpDownHeight
//
this.numericUpDownHeight.Increment = new decimal(new int[] {
2,
0,
0,
0});
this.numericUpDownHeight.Location = new System.Drawing.Point(176, 63);
this.numericUpDownHeight.Maximum = new decimal(new int[] {
50000,
0,
0,
0});
this.numericUpDownHeight.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.numericUpDownHeight.Name = "numericUpDownHeight";
this.numericUpDownHeight.Size = new System.Drawing.Size(64, 20);
this.numericUpDownHeight.TabIndex = 32;
this.numericUpDownHeight.Value = new decimal(new int[] {
720,
0,
0,
0});
this.numericUpDownHeight.ValueChanged += new System.EventHandler(this.numericUpDownHeight_ValueChanged);
//
// numericUpDownWidth
//
this.numericUpDownWidth.Increment = new decimal(new int[] {
2,
0,
0,
0});
this.numericUpDownWidth.Location = new System.Drawing.Point(88, 63);
this.numericUpDownWidth.Maximum = new decimal(new int[] {
50000,
0,
0,
0});
this.numericUpDownWidth.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.numericUpDownWidth.Name = "numericUpDownWidth";
this.numericUpDownWidth.Size = new System.Drawing.Size(64, 20);
this.numericUpDownWidth.TabIndex = 30;
this.numericUpDownWidth.Value = new decimal(new int[] {
1280,
0,
0,
0});
this.numericUpDownWidth.ValueChanged += new System.EventHandler(this.numericUpDownWidth_ValueChanged);
//
// GenerateVideoWithHardSubs
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(637, 170);
this.Controls.Add(this.labelFontSize);
this.Controls.Add(this.numericUpDownFontSize);
this.ClientSize = new System.Drawing.Size(666, 234);
this.Controls.Add(this.groupBoxSettings);
this.Controls.Add(this.labelProgress);
this.Controls.Add(this.labelInfo);
this.Controls.Add(this.labelPleaseWait);
this.Controls.Add(this.progressBar1);
@ -145,6 +263,10 @@ namespace Nikse.SubtitleEdit.Forms
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "GenerateVideoWithHardSubs";
((System.ComponentModel.ISupportInitialize)(this.numericUpDownFontSize)).EndInit();
this.groupBoxSettings.ResumeLayout(false);
this.groupBoxSettings.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownHeight)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownWidth)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@ -159,5 +281,12 @@ namespace Nikse.SubtitleEdit.Forms
private System.Windows.Forms.Label labelInfo;
private System.Windows.Forms.NumericUpDown numericUpDownFontSize;
private System.Windows.Forms.Label labelFontSize;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.Label labelProgress;
private System.Windows.Forms.GroupBox groupBoxSettings;
private System.Windows.Forms.Label labelX;
private System.Windows.Forms.Label labelResolution;
private System.Windows.Forms.NumericUpDown numericUpDownHeight;
private System.Windows.Forms.NumericUpDown numericUpDownWidth;
}
}

View File

@ -2,7 +2,9 @@
using Nikse.SubtitleEdit.Core.SubtitleFormats;
using Nikse.SubtitleEdit.Logic;
using System;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace Nikse.SubtitleEdit.Forms
@ -10,16 +12,22 @@ namespace Nikse.SubtitleEdit.Forms
public sealed partial class GenerateVideoWithHardSubs : Form
{
private bool _abort;
private Subtitle _assaSubtitle;
private string _inputVideoFileName;
private readonly Subtitle _assaSubtitle;
private readonly VideoInfo _videoInfo;
private readonly string _inputVideoFileName;
private static readonly Regex FrameFinderRegex = new Regex(@"[Ff]rame=\s*\d+", RegexOptions.Compiled);
private long _processedFrames;
private long _startTicks;
private long _totalFrames;
public string VideoFileName { get; private set; }
public GenerateVideoWithHardSubs(Subtitle assaSubtitle, string inputVideoFileName, int? fontSize)
public GenerateVideoWithHardSubs(Subtitle assaSubtitle, string inputVideoFileName, VideoInfo videoInfo, int? fontSize)
{
UiUtil.PreInitialize(this);
InitializeComponent();
UiUtil.FixFonts(this);
_videoInfo = videoInfo;
Text = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.Title;
labelInfo.Text = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.Info;
_assaSubtitle = assaSubtitle;
@ -30,15 +38,24 @@ namespace Nikse.SubtitleEdit.Forms
buttonCancel.Text = LanguageSettings.Current.General.Cancel;
progressBar1.Visible = false;
labelPleaseWait.Visible = false;
labelProgress.Text = string.Empty;
numericUpDownWidth.Value = _videoInfo.Width;
numericUpDownHeight.Value = _videoInfo.Height;
if (fontSize.HasValue)
{
numericUpDownFontSize.Value = fontSize.Value;
var left = Math.Max(labelResolution.Left + labelResolution.Width, labelFontSize.Left + labelFontSize.Width) + 5;
numericUpDownFontSize.Left = left;
numericUpDownWidth.Left = left;
labelX.Left = numericUpDownWidth.Left + numericUpDownWidth.Width + 3;
numericUpDownHeight.Left = labelX.Left + labelX.Width + 3;
}
else
{
labelFontSize.Visible = false;
numericUpDownFontSize.Visible = false;
groupBoxSettings.Visible = false;
Height -= groupBoxSettings.Height - 20;
}
}
@ -51,6 +68,24 @@ namespace Nikse.SubtitleEdit.Forms
}
}
private void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
if (string.IsNullOrWhiteSpace(outLine.Data))
{
return;
}
var match = FrameFinderRegex.Match(outLine.Data);
if (match.Success)
{
var arr = match.Value.Split('=');
if (arr.Length > 0 && long.TryParse(arr[1], out var f))
{
_processedFrames = f;
}
}
}
private void buttonOK_Click(object sender, EventArgs e)
{
buttonOK.Enabled = false;
@ -93,19 +128,30 @@ namespace Nikse.SubtitleEdit.Forms
}
}
SubtitleFormat format = new AdvancedSubStationAlpha();
var assaTempFileName = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".ass");
var format = new AdvancedSubStationAlpha();
var assaTempFileName = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".ass");
File.WriteAllText(assaTempFileName, format.ToText(_assaSubtitle, null));
progressBar1.Style = ProgressBarStyle.Marquee;
groupBoxSettings.Enabled = false;
progressBar1.Maximum = (int)_videoInfo.TotalFrames;
progressBar1.Visible = true;
labelPleaseWait.Visible = true;
var process = VideoPreviewGenerator.GenerateHardcodedVideoFile(
_inputVideoFileName,
assaTempFileName,
VideoFileName);
VideoFileName,
(int)numericUpDownWidth.Value,
(int)numericUpDownHeight.Value,
OutputHandler);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
_totalFrames = (long)_videoInfo.TotalFrames;
_startTicks = DateTime.UtcNow.Ticks;
timer1.Start();
while (!process.HasExited)
{
System.Threading.Thread.Sleep(100);
@ -114,10 +160,15 @@ namespace Nikse.SubtitleEdit.Forms
{
process.Kill();
}
progressBar1.Value = (int)_processedFrames;
}
progressBar1.Visible = false;
labelPleaseWait.Visible = false;
timer1.Stop();
labelProgress.Text = string.Empty;
groupBoxSettings.Enabled = true;
try
{
@ -130,5 +181,48 @@ namespace Nikse.SubtitleEdit.Forms
DialogResult = _abort ? DialogResult.Cancel : DialogResult.OK;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (_processedFrames <= 0 || _videoInfo.TotalFrames <= 0)
{
return;
}
var durationMs = (DateTime.UtcNow.Ticks - _startTicks) / 10_000;
var msPerFrame = (float)durationMs / _processedFrames;
var estimatedTotalMs = msPerFrame * _totalFrames;
var estimatedLeft = ToProgressTime(estimatedTotalMs - durationMs);
labelProgress.Text = estimatedLeft;
}
private string ToProgressTime(float estimatedTotalMs)
{
var timeCode = new TimeCode(estimatedTotalMs);
if (timeCode.TotalSeconds < 60)
{
return string.Format(LanguageSettings.Current.GenerateVideoWithBurnedInSubs.TimeRemainingSeconds, (int)Math.Round(timeCode.TotalSeconds));
}
return string.Format(LanguageSettings.Current.GenerateVideoWithBurnedInSubs.TimeRemainingMinutesAndSeconds, timeCode.Minutes + timeCode.Hours * 60, timeCode.Seconds);
}
private void numericUpDownWidth_ValueChanged(object sender, EventArgs e)
{
var v = (int)numericUpDownWidth.Value;
if (v % 2 == 1)
{
numericUpDownWidth.Value++;
}
}
private void numericUpDownHeight_ValueChanged(object sender, EventArgs e)
{
var v = (int)numericUpDownHeight.Value;
if (v % 2 == 1)
{
numericUpDownHeight.Value++;
}
}
}
}

View File

@ -117,4 +117,7 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@ -31679,7 +31679,7 @@ namespace Nikse.SubtitleEdit.Forms
sub.Header = AdvancedSubStationAlpha.AddTagToHeader("PlayResX", "PlayResX: " + _videoInfo.Width.ToString(CultureInfo.InvariantCulture), "[Script Info]", sub.Header);
sub.Header = AdvancedSubStationAlpha.AddTagToHeader("PlayResY", "PlayResY: " + _videoInfo.Height.ToString(CultureInfo.InvariantCulture), "[Script Info]", sub.Header);
using (var form = new GenerateVideoWithHardSubs(sub, VideoFileName, fontSize))
using (var form = new GenerateVideoWithHardSubs(sub, VideoFileName, _videoInfo, fontSize))
{
var result = form.ShowDialog(this);
if (result != DialogResult.OK)

View File

@ -1018,7 +1018,9 @@ namespace Nikse.SubtitleEdit.Logic
{
Title = "Generate video with burned-in subtile",
Info = "Will generate a video file with burned-in subtitle.\r\n\r\nNote: Advanced Substation Alpha supported.",
XGeneratedWithBurnedInSubs = "\"{0}\" generated with burned-in subtitle."
XGeneratedWithBurnedInSubs = "\"{0}\" generated with burned-in subtitle.",
TimeRemainingSeconds = "Time remaining: {0} seconds",
TimeRemainingMinutesAndSeconds = "Time remaining: {0} minutes and {1} seconds",
};
GetDictionaries = new LanguageStructure.GetDictionaries

View File

@ -2125,6 +2125,12 @@ namespace Nikse.SubtitleEdit.Logic
case "GenerateVideoWithBurnedInSubs/XGeneratedWithBurnedInSubs":
language.GenerateVideoWithBurnedInSubs.XGeneratedWithBurnedInSubs = reader.Value;
break;
case "GenerateVideoWithBurnedInSubs/TimeRemainingSeconds":
language.GenerateVideoWithBurnedInSubs.TimeRemainingSeconds = reader.Value;
break;
case "GenerateVideoWithBurnedInSubs/TimeRemainingMinutesAndSeconds":
language.GenerateVideoWithBurnedInSubs.TimeRemainingMinutesAndSeconds = reader.Value;
break;
case "GetDictionaries/Title":
language.GetDictionaries.Title = reader.Value;
break;
@ -4162,6 +4168,9 @@ namespace Nikse.SubtitleEdit.Logic
case "Main/Menu/ToolBar/ShowHideVideo":
language.Main.Menu.ToolBar.ShowHideVideo = reader.Value;
break;
case "Main/Menu/ToolBar/AssaDraw":
language.Main.Menu.ToolBar.AssaDraw = reader.Value;
break;
case "Main/Menu/ContextMenu/SizeAllColumnsToFit":
language.Main.Menu.ContextMenu.SizeAllColumnsToFit = reader.Value;
break;

View File

@ -883,6 +883,8 @@
public string Title { get; set; }
public string Info { get; set; }
public string XGeneratedWithBurnedInSubs { get; set; }
public string TimeRemainingSeconds { get; set; }
public string TimeRemainingMinutesAndSeconds { get; set; }
}
public class GetDictionaries

View File

@ -32,7 +32,7 @@ namespace Nikse.SubtitleEdit.Logic
}
}
public static Process GenerateVideoFile(string previewFileName, int seconds, int width, int height, Color color, bool checkered, decimal frameRate)
public static Process GenerateVideoFile(string previewFileName, int seconds, int width, int height, Color color, bool checkered, decimal frameRate, DataReceivedEventHandler dataReceivedHandler = null)
{
Process processMakeVideo;
@ -49,16 +49,29 @@ namespace Nikse.SubtitleEdit.Logic
processMakeVideo = GetFFmpegProcess(color, previewFileName, width, height, seconds, frameRate);
}
SetupDataReceiveHandler(dataReceivedHandler, processMakeVideo);
return processMakeVideo;
}
private static void SetupDataReceiveHandler(DataReceivedEventHandler dataReceivedHandler, Process processMakeVideo)
{
if (dataReceivedHandler != null)
{
processMakeVideo.StartInfo.RedirectStandardOutput = true;
processMakeVideo.StartInfo.RedirectStandardError = true;
processMakeVideo.OutputDataReceived += dataReceivedHandler;
processMakeVideo.ErrorDataReceived += dataReceivedHandler;
}
}
/// <summary>
/// Generate a video with a burned-in Advanced Sub Station Alpha subtitle.
/// </summary>
/// <param name="inputVideoFileName">Source video file name</param>
/// <param name="assaSubtitleFileName">Source subtitle file name</param>
/// <param name="outputVideoFileName">Output video file name with burned-in subtitle</param>
public static Process GenerateHardcodedVideoFile(string inputVideoFileName, string assaSubtitleFileName, string outputVideoFileName)
public static Process GenerateHardcodedVideoFile(string inputVideoFileName, string assaSubtitleFileName, string outputVideoFileName, int width, int height, DataReceivedEventHandler dataReceivedHandler = null)
{
var ffmpegLocation = Configuration.Settings.General.FFmpegLocation;
if (!Configuration.IsRunningOnWindows && (string.IsNullOrEmpty(ffmpegLocation) || !File.Exists(ffmpegLocation)))
@ -66,17 +79,21 @@ namespace Nikse.SubtitleEdit.Logic
ffmpegLocation = "ffmpeg";
}
return new Process
var processMakeVideo = new Process
{
StartInfo =
{
FileName = ffmpegLocation,
Arguments = $"-i \"{inputVideoFileName}\" -vf \"ass={Path.GetFileName(assaSubtitleFileName)}\" -strict -2 \"{outputVideoFileName}\"",
Arguments = $"-i \"{inputVideoFileName}\" -vf \"ass={Path.GetFileName(assaSubtitleFileName)}\" -strict -2 -s {width}x{height} \"{outputVideoFileName}\" -v quiet -stats",
UseShellExecute = false,
CreateNoWindow = true,
WorkingDirectory = Path.GetDirectoryName(assaSubtitleFileName),
}
};
SetupDataReceiveHandler(dataReceivedHandler, processMakeVideo);
return processMakeVideo;
}
private static Process GetFFmpegProcess(string imageFileName, string outputFileName, int videoWidth, int videoHeight, int seconds, decimal frameRate)