diff --git a/SubtitleEdit.sln.DotSettings b/SubtitleEdit.sln.DotSettings index 4ca162d2b..f3316cae4 100644 --- a/SubtitleEdit.sln.DotSettings +++ b/SubtitleEdit.sln.DotSettings @@ -24,7 +24,9 @@ True True True + True True + True True True True diff --git a/src/ui/Forms/AddWaveform.cs b/src/ui/Forms/AddWaveform.cs index 88c79a509..fa37fa373 100644 --- a/src/ui/Forms/AddWaveform.cs +++ b/src/ui/Forms/AddWaveform.cs @@ -169,7 +169,7 @@ namespace Nikse.SubtitleEdit.Forms return; } - using (var form = new DownloadFfmpeg { AutoClose = true }) + using (var form = new DownloadFfmpeg("FFmpeg") { AutoClose = true }) { if (form.ShowDialog(this) == DialogResult.OK && !string.IsNullOrEmpty(form.FFmpegPath)) { diff --git a/src/ui/Forms/AddWaveformBatch.cs b/src/ui/Forms/AddWaveformBatch.cs index fa3ee47ce..eb1c1ec5e 100644 --- a/src/ui/Forms/AddWaveformBatch.cs +++ b/src/ui/Forms/AddWaveformBatch.cs @@ -53,7 +53,7 @@ namespace Nikse.SubtitleEdit.Forms checkBoxExtractTimeCodes.Text = LanguageSettings.Current.AddWaveformBatch.ExtractTimeCodes; checkBoxExtractTimeCodes.Left = checkBoxGenerateShotChanges.Left - checkBoxExtractTimeCodes.Width - 20; - checkBoxExtractTimeCodes.Visible = BeautifyTimeCodes.BeautifyTimeCodes.IsFfProbeAvailable(); + checkBoxExtractTimeCodes.Visible = BeautifyTimeCodes.BeautifyTimeCodes.IsFfProbeAvailable(this); if (checkBoxExtractTimeCodes.Visible) { @@ -308,7 +308,7 @@ namespace Nikse.SubtitleEdit.Forms return; } - using (var form = new DownloadFfmpeg()) + using (var form = new DownloadFfmpeg("FFmpeg")) { if (form.ShowDialog(this) == DialogResult.OK && !string.IsNullOrEmpty(form.FFmpegPath)) { diff --git a/src/ui/Forms/BeautifyTimeCodes/BeautifyTimeCodes.Designer.cs b/src/ui/Forms/BeautifyTimeCodes/BeautifyTimeCodes.Designer.cs index 57e9f4d84..0969ae6d2 100644 --- a/src/ui/Forms/BeautifyTimeCodes/BeautifyTimeCodes.Designer.cs +++ b/src/ui/Forms/BeautifyTimeCodes/BeautifyTimeCodes.Designer.cs @@ -128,11 +128,11 @@ namespace Nikse.SubtitleEdit.Forms.BeautifyTimeCodes // // panelExtractTimeCodes // - this.panelExtractTimeCodes.Controls.Add(this.buttonCancelTimeCodes); this.panelExtractTimeCodes.Controls.Add(this.labelExtractTimeCodesProgress); this.panelExtractTimeCodes.Controls.Add(this.progressBarExtractTimeCodes); this.panelExtractTimeCodes.Controls.Add(this.buttonExtractTimeCodes); this.panelExtractTimeCodes.Controls.Add(this.labelTimeCodesStatus); + this.panelExtractTimeCodes.Controls.Add(this.buttonCancelTimeCodes); this.panelExtractTimeCodes.Location = new System.Drawing.Point(0, 27); this.panelExtractTimeCodes.Name = "panelExtractTimeCodes"; this.panelExtractTimeCodes.Size = new System.Drawing.Size(546, 78); diff --git a/src/ui/Forms/BeautifyTimeCodes/BeautifyTimeCodes.cs b/src/ui/Forms/BeautifyTimeCodes/BeautifyTimeCodes.cs index c17637018..6991dbe60 100644 --- a/src/ui/Forms/BeautifyTimeCodes/BeautifyTimeCodes.cs +++ b/src/ui/Forms/BeautifyTimeCodes/BeautifyTimeCodes.cs @@ -85,7 +85,7 @@ namespace Nikse.SubtitleEdit.Forms.BeautifyTimeCodes _shotChanges = shotChanges; // Check if ffprobe is available - if (!IsFfProbeAvailable()) + if (!IsFfProbeAvailable(this)) { checkBoxExtractExactTimeCodes.Enabled = false; checkBoxExtractExactTimeCodes.Checked = false; @@ -322,12 +322,34 @@ namespace Nikse.SubtitleEdit.Forms.BeautifyTimeCodes _abortTimeCodes = true; } - public static bool IsFfProbeAvailable() + public static bool IsFfProbeAvailable(Form parentForm) { - return !Configuration.IsRunningOnWindows || ( - !string.IsNullOrWhiteSpace(Configuration.Settings.General.FFmpegLocation) - && File.Exists(Path.Combine(Path.GetDirectoryName(Configuration.Settings.General.FFmpegLocation), "ffprobe.exe")) - ); + if (!Configuration.IsRunningOnWindows) + { + return true; + } + + var ffprobeExists = !string.IsNullOrWhiteSpace(Configuration.Settings.General.FFmpegLocation) + && File.Exists(Path.Combine(Path.GetDirectoryName(Configuration.Settings.General.FFmpegLocation), "ffprobe.exe")); + + if (!ffprobeExists) + { + if (MessageBox.Show(string.Format(LanguageSettings.Current.Settings.DownloadX, "ffprobe"), "Subtitle Edit", MessageBoxButtons.YesNoCancel) != DialogResult.Yes) + { + return false; + } + + using (var form = new DownloadFfmpeg("ffprobe")) + { + if (form.ShowDialog(parentForm) == DialogResult.OK) + { + return !string.IsNullOrWhiteSpace(Configuration.Settings.General.FFmpegLocation) + && File.Exists(Path.Combine(Path.GetDirectoryName(Configuration.Settings.General.FFmpegLocation), "ffprobe.exe")); + } + } + } + + return ffprobeExists; } } } \ No newline at end of file diff --git a/src/ui/Forms/DownloadFfmpeg.cs b/src/ui/Forms/DownloadFfmpeg.cs index eecdbe008..37256b171 100644 --- a/src/ui/Forms/DownloadFfmpeg.cs +++ b/src/ui/Forms/DownloadFfmpeg.cs @@ -14,13 +14,15 @@ namespace Nikse.SubtitleEdit.Forms public string FFmpegPath { get; internal set; } public bool AutoClose { get; internal set; } private readonly CancellationTokenSource _cancellationTokenSource; + private readonly string _title; - public DownloadFfmpeg() + public DownloadFfmpeg(string title) { UiUtil.PreInitialize(this); InitializeComponent(); UiUtil.FixFonts(this); - Text = string.Format(LanguageSettings.Current.Settings.DownloadX, "FFmpeg"); + _title = title; + Text = string.Format(LanguageSettings.Current.Settings.DownloadX, title); buttonOK.Text = LanguageSettings.Current.General.Ok; buttonCancel.Text = LanguageSettings.Current.General.Cancel; UiUtil.FixLargeFonts(this, buttonOK); @@ -49,6 +51,10 @@ namespace Nikse.SubtitleEdit.Forms private void DownloadFfmpeg_Shown(object sender, EventArgs e) { var url = "https://github.com/SubtitleEdit/support-files/raw/master/ffpmeg/ffmpeg-" + IntPtr.Size * 8 + ".zip"; + if (_title.Contains("ffprobe", StringComparison.OrdinalIgnoreCase)) + { + url = "https://github.com/SubtitleEdit/support-files/releases/download/ffprove-6.0/ffprobe.zip"; + } try { @@ -133,7 +139,7 @@ namespace Nikse.SubtitleEdit.Forms } buttonOK.Enabled = true; - labelPleaseWait.Text = string.Format(LanguageSettings.Current.SettingsFfmpeg.XDownloadOk, "ffmpeg"); + labelPleaseWait.Text = string.Format(LanguageSettings.Current.SettingsFfmpeg.XDownloadOk, _title); } } } diff --git a/src/ui/Forms/ImportCdg.cs b/src/ui/Forms/ImportCdg.cs index 769ed9576..dbf4700ac 100644 --- a/src/ui/Forms/ImportCdg.cs +++ b/src/ui/Forms/ImportCdg.cs @@ -377,7 +377,7 @@ namespace Nikse.SubtitleEdit.Forms private void buttonDownloadFfmpeg_Click(object sender, EventArgs e) { - using (var form = new DownloadFfmpeg()) + using (var form = new DownloadFfmpeg("FFmpeg")) { if (form.ShowDialog(this) == DialogResult.OK && !string.IsNullOrEmpty(form.FFmpegPath)) { diff --git a/src/ui/Forms/Main.cs b/src/ui/Forms/Main.cs index f862dd5c8..e0c9ebac1 100644 --- a/src/ui/Forms/Main.cs +++ b/src/ui/Forms/Main.cs @@ -35198,7 +35198,7 @@ namespace Nikse.SubtitleEdit.Forms return false; } - using (var form = new DownloadFfmpeg()) + using (var form = new DownloadFfmpeg("FFmpeg")) { if (form.ShowDialog(this) == DialogResult.OK && !string.IsNullOrEmpty(form.FFmpegPath)) { @@ -35672,6 +35672,17 @@ namespace Nikse.SubtitleEdit.Forms return; } + if (string.IsNullOrEmpty(_videoFileName)) + { + MessageBox.Show(LanguageSettings.Current.General.NoVideoLoaded); + return; + } + + if (!RequireFfmpegOk()) + { + return; + } + if (onlySelectedLines) { var selectedIndices = SubtitleListview1.GetSelectedIndices(); diff --git a/src/ui/Forms/Options/Settings.cs b/src/ui/Forms/Options/Settings.cs index 9313b2f43..716388c8f 100644 --- a/src/ui/Forms/Options/Settings.cs +++ b/src/ui/Forms/Options/Settings.cs @@ -3046,7 +3046,7 @@ namespace Nikse.SubtitleEdit.Forms.Options private void buttonDownloadFfmpeg_Click(object sender, EventArgs e) { - using (var form = new DownloadFfmpeg()) + using (var form = new DownloadFfmpeg("FFmpeg")) { if (form.ShowDialog(this) == DialogResult.OK && !string.IsNullOrEmpty(form.FFmpegPath)) { diff --git a/src/ui/Forms/ShotChanges/ImportShotChanges.cs b/src/ui/Forms/ShotChanges/ImportShotChanges.cs index 4800c663e..b868d1516 100644 --- a/src/ui/Forms/ShotChanges/ImportShotChanges.cs +++ b/src/ui/Forms/ShotChanges/ImportShotChanges.cs @@ -419,7 +419,7 @@ namespace Nikse.SubtitleEdit.Forms.ShotChanges private void buttonDownloadFfmpeg_Click(object sender, EventArgs e) { - using (var form = new DownloadFfmpeg()) + using (var form = new DownloadFfmpeg("FFmpeg")) { if (form.ShowDialog(this) == DialogResult.OK && !string.IsNullOrEmpty(form.FFmpegPath)) {