Add Whisper translate to English option - thx David :)

Work on #6346
This commit is contained in:
niksedk 2022-10-25 20:56:57 +02:00
parent 9a8ec59a55
commit 24ae7397bf
8 changed files with 65 additions and 10 deletions

View File

@ -194,6 +194,7 @@ Read more info (web)?</WhisperNotFound>
<UsePostProcessing>Use post-processing (line merge, fix casing, punctuation, and more)</UsePostProcessing> <UsePostProcessing>Use post-processing (line merge, fix casing, punctuation, and more)</UsePostProcessing>
<BatchMode>Batch mode</BatchMode> <BatchMode>Batch mode</BatchMode>
<KeepPartialTranscription>Keep partial transcription</KeepPartialTranscription> <KeepPartialTranscription>Keep partial transcription</KeepPartialTranscription>
<TranslateToEnglish>Translate to English</TranslateToEnglish>
</AudioToText> </AudioToText>
<AssaAttachments> <AssaAttachments>
<Title>Advanced Sub Station Alpha attachments</Title> <Title>Advanced Sub Station Alpha attachments</Title>

View File

@ -54,6 +54,7 @@
this.listViewInputFiles = new System.Windows.Forms.ListView(); this.listViewInputFiles = new System.Windows.Forms.ListView();
this.columnHeaderFileName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnHeaderFileName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.labelFC = new System.Windows.Forms.Label(); this.labelFC = new System.Windows.Forms.Label();
this.checkBoxTranslateToEnglish = new System.Windows.Forms.CheckBox();
this.groupBoxModels.SuspendLayout(); this.groupBoxModels.SuspendLayout();
this.groupBoxInputFiles.SuspendLayout(); this.groupBoxInputFiles.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
@ -134,9 +135,9 @@
this.groupBoxModels.Controls.Add(this.linkLabelOpenModelsFolder); this.groupBoxModels.Controls.Add(this.linkLabelOpenModelsFolder);
this.groupBoxModels.Controls.Add(this.labelModel); this.groupBoxModels.Controls.Add(this.labelModel);
this.groupBoxModels.Controls.Add(this.comboBoxModels); this.groupBoxModels.Controls.Add(this.comboBoxModels);
this.groupBoxModels.Location = new System.Drawing.Point(15, 66); this.groupBoxModels.Location = new System.Drawing.Point(15, 59);
this.groupBoxModels.Name = "groupBoxModels"; this.groupBoxModels.Name = "groupBoxModels";
this.groupBoxModels.Size = new System.Drawing.Size(682, 82); this.groupBoxModels.Size = new System.Drawing.Size(682, 83);
this.groupBoxModels.TabIndex = 3; this.groupBoxModels.TabIndex = 3;
this.groupBoxModels.TabStop = false; this.groupBoxModels.TabStop = false;
this.groupBoxModels.Text = "Language and models"; this.groupBoxModels.Text = "Language and models";
@ -158,6 +159,7 @@
this.comboBoxLanguages.Name = "comboBoxLanguages"; this.comboBoxLanguages.Name = "comboBoxLanguages";
this.comboBoxLanguages.Size = new System.Drawing.Size(240, 21); this.comboBoxLanguages.Size = new System.Drawing.Size(240, 21);
this.comboBoxLanguages.TabIndex = 5; this.comboBoxLanguages.TabIndex = 5;
this.comboBoxLanguages.SelectedIndexChanged += new System.EventHandler(this.comboBoxLanguages_SelectedIndexChanged);
// //
// buttonDownload // buttonDownload
// //
@ -228,7 +230,7 @@
// checkBoxUsePostProcessing // checkBoxUsePostProcessing
// //
this.checkBoxUsePostProcessing.AutoSize = true; this.checkBoxUsePostProcessing.AutoSize = true;
this.checkBoxUsePostProcessing.Location = new System.Drawing.Point(15, 162); this.checkBoxUsePostProcessing.Location = new System.Drawing.Point(15, 177);
this.checkBoxUsePostProcessing.Name = "checkBoxUsePostProcessing"; this.checkBoxUsePostProcessing.Name = "checkBoxUsePostProcessing";
this.checkBoxUsePostProcessing.Size = new System.Drawing.Size(312, 17); this.checkBoxUsePostProcessing.Size = new System.Drawing.Size(312, 17);
this.checkBoxUsePostProcessing.TabIndex = 4; this.checkBoxUsePostProcessing.TabIndex = 4;
@ -332,11 +334,22 @@
this.labelFC.Text = "labelFC"; this.labelFC.Text = "labelFC";
this.labelFC.TextAlign = System.Drawing.ContentAlignment.TopRight; this.labelFC.TextAlign = System.Drawing.ContentAlignment.TopRight;
// //
// checkBoxTranslateToEnglish
//
this.checkBoxTranslateToEnglish.AutoSize = true;
this.checkBoxTranslateToEnglish.Location = new System.Drawing.Point(15, 153);
this.checkBoxTranslateToEnglish.Name = "checkBoxTranslateToEnglish";
this.checkBoxTranslateToEnglish.Size = new System.Drawing.Size(119, 17);
this.checkBoxTranslateToEnglish.TabIndex = 20;
this.checkBoxTranslateToEnglish.Text = "Translate to English";
this.checkBoxTranslateToEnglish.UseVisualStyleBackColor = true;
//
// WhisperAudioToText // WhisperAudioToText
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(709, 464); this.ClientSize = new System.Drawing.Size(709, 464);
this.Controls.Add(this.checkBoxTranslateToEnglish);
this.Controls.Add(this.labelFC); this.Controls.Add(this.labelFC);
this.Controls.Add(this.groupBoxInputFiles); this.Controls.Add(this.groupBoxInputFiles);
this.Controls.Add(this.buttonBatchMode); this.Controls.Add(this.buttonBatchMode);
@ -397,5 +410,6 @@
private System.Windows.Forms.Label labelFC; private System.Windows.Forms.Label labelFC;
private System.Windows.Forms.Label labelChooseLanguage; private System.Windows.Forms.Label labelChooseLanguage;
private System.Windows.Forms.ComboBox comboBoxLanguages; private System.Windows.Forms.ComboBox comboBoxLanguages;
private System.Windows.Forms.CheckBox checkBoxTranslateToEnglish;
} }
} }

View File

@ -49,6 +49,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
labelModel.Text = LanguageSettings.Current.AudioToText.ChooseModel; labelModel.Text = LanguageSettings.Current.AudioToText.ChooseModel;
labelChooseLanguage.Text = LanguageSettings.Current.AudioToText.ChooseLanguage; labelChooseLanguage.Text = LanguageSettings.Current.AudioToText.ChooseLanguage;
linkLabelOpenModelsFolder.Text = LanguageSettings.Current.AudioToText.OpenModelsFolder; linkLabelOpenModelsFolder.Text = LanguageSettings.Current.AudioToText.OpenModelsFolder;
checkBoxTranslateToEnglish.Text = LanguageSettings.Current.AudioToText.TranslateToEnglish;
checkBoxUsePostProcessing.Text = LanguageSettings.Current.AudioToText.UsePostProcessing; checkBoxUsePostProcessing.Text = LanguageSettings.Current.AudioToText.UsePostProcessing;
buttonGenerate.Text = LanguageSettings.Current.Watermark.Generate; buttonGenerate.Text = LanguageSettings.Current.Watermark.Generate;
buttonCancel.Text = LanguageSettings.Current.General.Cancel; buttonCancel.Text = LanguageSettings.Current.General.Cancel;
@ -305,7 +306,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
labelProgress.Refresh(); labelProgress.Refresh();
Application.DoEvents(); Application.DoEvents();
_resultList = new List<ResultText>(); _resultList = new List<ResultText>();
var process = GetWhisperProcess(waveFileName, model.Name, comboBoxLanguages.Text, OutputHandler); var process = GetWhisperProcess(waveFileName, model.Name, comboBoxLanguages.Text, checkBoxTranslateToEnglish.Checked, OutputHandler);
_outputText.Add("Calling whisper with : whisper " + process.StartInfo.Arguments); _outputText.Add("Calling whisper with : whisper " + process.StartInfo.Arguments);
ShowProgressBar(); ShowProgressBar();
progressBar1.Style = ProgressBarStyle.Marquee; progressBar1.Style = ProgressBarStyle.Marquee;
@ -518,10 +519,17 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
} }
} }
public static Process GetWhisperProcess(string waveFileName, string model, string language, DataReceivedEventHandler dataReceivedHandler = null) public static Process GetWhisperProcess(string waveFileName, string model, string language, bool translate, DataReceivedEventHandler dataReceivedHandler = null)
{ {
// whisper --model tiny.en --language English --fp16 False a.wav // whisper --model tiny.en --language English --fp16 False a.wav
var parameters = $"--model {model} --language \"{language}\" {Configuration.Settings.Tools.WhisperExtraSettings} \"{waveFileName}\"";
var translateToEnglish = translate ? "--task translate " : string.Empty;
if (language.ToLowerInvariant() == "english" || language.ToLowerInvariant() == "en")
{
translateToEnglish = string.Empty;
}
var parameters = $"--model {model} --language \"{language}\" {translateToEnglish}{Configuration.Settings.Tools.WhisperExtraSettings} \"{waveFileName}\"";
var process = new Process { StartInfo = new ProcessStartInfo("whisper", parameters) { WindowStyle = ProcessWindowStyle.Hidden, CreateNoWindow = true } }; var process = new Process { StartInfo = new ProcessStartInfo("whisper", parameters) { WindowStyle = ProcessWindowStyle.Hidden, CreateNoWindow = true } };
if (!string.IsNullOrEmpty(Configuration.Settings.General.FFmpegLocation) && process.StartInfo.EnvironmentVariables["Path"] != null) if (!string.IsNullOrEmpty(Configuration.Settings.General.FFmpegLocation) && process.StartInfo.EnvironmentVariables["Path"] != null)
@ -801,5 +809,10 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
} }
} }
} }
private void comboBoxLanguages_SelectedIndexChanged(object sender, EventArgs e)
{
checkBoxTranslateToEnglish.Enabled = comboBoxLanguages.Text.ToLowerInvariant() != "english";
}
} }
} }

View File

@ -49,6 +49,7 @@
this.groupBoxInputFiles = new System.Windows.Forms.GroupBox(); this.groupBoxInputFiles = new System.Windows.Forms.GroupBox();
this.listViewInputFiles = new System.Windows.Forms.ListView(); this.listViewInputFiles = new System.Windows.Forms.ListView();
this.columnHeaderFileName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnHeaderFileName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.checkBoxTranslateToEnglish = new System.Windows.Forms.CheckBox();
this.groupBoxModels.SuspendLayout(); this.groupBoxModels.SuspendLayout();
this.groupBoxInputFiles.SuspendLayout(); this.groupBoxInputFiles.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
@ -129,7 +130,7 @@
this.groupBoxModels.Controls.Add(this.linkLabelOpenModelsFolder); this.groupBoxModels.Controls.Add(this.linkLabelOpenModelsFolder);
this.groupBoxModels.Controls.Add(this.labelModel); this.groupBoxModels.Controls.Add(this.labelModel);
this.groupBoxModels.Controls.Add(this.comboBoxModels); this.groupBoxModels.Controls.Add(this.comboBoxModels);
this.groupBoxModels.Location = new System.Drawing.Point(15, 66); this.groupBoxModels.Location = new System.Drawing.Point(15, 60);
this.groupBoxModels.Name = "groupBoxModels"; this.groupBoxModels.Name = "groupBoxModels";
this.groupBoxModels.Size = new System.Drawing.Size(682, 82); this.groupBoxModels.Size = new System.Drawing.Size(682, 82);
this.groupBoxModels.TabIndex = 1; this.groupBoxModels.TabIndex = 1;
@ -153,6 +154,7 @@
this.comboBoxLanguages.Name = "comboBoxLanguages"; this.comboBoxLanguages.Name = "comboBoxLanguages";
this.comboBoxLanguages.Size = new System.Drawing.Size(194, 21); this.comboBoxLanguages.Size = new System.Drawing.Size(194, 21);
this.comboBoxLanguages.TabIndex = 7; this.comboBoxLanguages.TabIndex = 7;
this.comboBoxLanguages.SelectedIndexChanged += new System.EventHandler(this.comboBoxLanguages_SelectedIndexChanged);
// //
// buttonDownload // buttonDownload
// //
@ -223,7 +225,7 @@
// checkBoxUsePostProcessing // checkBoxUsePostProcessing
// //
this.checkBoxUsePostProcessing.AutoSize = true; this.checkBoxUsePostProcessing.AutoSize = true;
this.checkBoxUsePostProcessing.Location = new System.Drawing.Point(15, 162); this.checkBoxUsePostProcessing.Location = new System.Drawing.Point(15, 172);
this.checkBoxUsePostProcessing.Name = "checkBoxUsePostProcessing"; this.checkBoxUsePostProcessing.Name = "checkBoxUsePostProcessing";
this.checkBoxUsePostProcessing.Size = new System.Drawing.Size(312, 17); this.checkBoxUsePostProcessing.Size = new System.Drawing.Size(312, 17);
this.checkBoxUsePostProcessing.TabIndex = 2; this.checkBoxUsePostProcessing.TabIndex = 2;
@ -265,11 +267,22 @@
this.columnHeaderFileName.Text = "File name"; this.columnHeaderFileName.Text = "File name";
this.columnHeaderFileName.Width = 455; this.columnHeaderFileName.Width = 455;
// //
// checkBoxTranslateToEnglish
//
this.checkBoxTranslateToEnglish.AutoSize = true;
this.checkBoxTranslateToEnglish.Location = new System.Drawing.Point(15, 148);
this.checkBoxTranslateToEnglish.Name = "checkBoxTranslateToEnglish";
this.checkBoxTranslateToEnglish.Size = new System.Drawing.Size(119, 17);
this.checkBoxTranslateToEnglish.TabIndex = 21;
this.checkBoxTranslateToEnglish.Text = "Translate to English";
this.checkBoxTranslateToEnglish.UseVisualStyleBackColor = true;
//
// WhisperAudioToTextSelectedLines // WhisperAudioToTextSelectedLines
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(709, 464); this.ClientSize = new System.Drawing.Size(709, 464);
this.Controls.Add(this.checkBoxTranslateToEnglish);
this.Controls.Add(this.groupBoxInputFiles); this.Controls.Add(this.groupBoxInputFiles);
this.Controls.Add(this.checkBoxUsePostProcessing); this.Controls.Add(this.checkBoxUsePostProcessing);
this.Controls.Add(this.labelTime); this.Controls.Add(this.labelTime);
@ -323,5 +336,6 @@
private System.Windows.Forms.ColumnHeader columnHeaderFileName; private System.Windows.Forms.ColumnHeader columnHeaderFileName;
private System.Windows.Forms.Label labelChooseLanguage; private System.Windows.Forms.Label labelChooseLanguage;
private System.Windows.Forms.ComboBox comboBoxLanguages; private System.Windows.Forms.ComboBox comboBoxLanguages;
private System.Windows.Forms.CheckBox checkBoxTranslateToEnglish;
} }
} }

View File

@ -40,6 +40,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
labelModel.Text = LanguageSettings.Current.AudioToText.ChooseModel; labelModel.Text = LanguageSettings.Current.AudioToText.ChooseModel;
labelChooseLanguage.Text = LanguageSettings.Current.AudioToText.ChooseLanguage; labelChooseLanguage.Text = LanguageSettings.Current.AudioToText.ChooseLanguage;
linkLabelOpenModelsFolder.Text = LanguageSettings.Current.AudioToText.OpenModelsFolder; linkLabelOpenModelsFolder.Text = LanguageSettings.Current.AudioToText.OpenModelsFolder;
checkBoxTranslateToEnglish.Text = LanguageSettings.Current.AudioToText.TranslateToEnglish;
checkBoxUsePostProcessing.Text = LanguageSettings.Current.AudioToText.UsePostProcessing; checkBoxUsePostProcessing.Text = LanguageSettings.Current.AudioToText.UsePostProcessing;
buttonGenerate.Text = LanguageSettings.Current.Watermark.Generate; buttonGenerate.Text = LanguageSettings.Current.Watermark.Generate;
buttonCancel.Text = LanguageSettings.Current.General.Cancel; buttonCancel.Text = LanguageSettings.Current.General.Cancel;
@ -172,7 +173,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
labelProgress.Refresh(); labelProgress.Refresh();
Application.DoEvents(); Application.DoEvents();
_resultList = new List<ResultText>(); _resultList = new List<ResultText>();
var process = WhisperAudioToText.GetWhisperProcess(waveFileName, model.Name, comboBoxLanguages.Text, OutputHandler); var process = WhisperAudioToText.GetWhisperProcess(waveFileName, model.Name, comboBoxLanguages.Text, checkBoxTranslateToEnglish.Checked, OutputHandler);
_outputText.Add("Calling whisper with : whisper " + process.StartInfo.Arguments); _outputText.Add("Calling whisper with : whisper " + process.StartInfo.Arguments);
ShowProgressBar(); ShowProgressBar();
progressBar1.Style = ProgressBarStyle.Marquee; progressBar1.Style = ProgressBarStyle.Marquee;
@ -438,5 +439,10 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
{ {
listViewInputFiles.AutoSizeLastColumn(); listViewInputFiles.AutoSizeLastColumn();
} }
private void comboBoxLanguages_SelectedIndexChanged(object sender, EventArgs e)
{
checkBoxTranslateToEnglish.Enabled = comboBoxLanguages.Text.ToLowerInvariant() != "english";
}
} }
} }

View File

@ -340,6 +340,7 @@ namespace Nikse.SubtitleEdit.Logic
BatchMode = "Batch mode", BatchMode = "Batch mode",
XFilesSavedToVideoSourceFolder = "{0} files saved to video source folder", XFilesSavedToVideoSourceFolder = "{0} files saved to video source folder",
KeepPartialTranscription = "Keep partial transcription", KeepPartialTranscription = "Keep partial transcription",
TranslateToEnglish = "Translate to English",
}; };
AssaAttachments = new LanguageStructure.AssaAttachments AssaAttachments = new LanguageStructure.AssaAttachments

View File

@ -523,6 +523,9 @@ namespace Nikse.SubtitleEdit.Logic
case "AudioToText/KeepPartialTranscription": case "AudioToText/KeepPartialTranscription":
language.AudioToText.KeepPartialTranscription = reader.Value; language.AudioToText.KeepPartialTranscription = reader.Value;
break; break;
case "AudioToText/TranslateToEnglish":
language.AudioToText.TranslateToEnglish = reader.Value;
break;
case "AssaAttachments/Title": case "AssaAttachments/Title":
language.AssaAttachments.Title = reader.Value; language.AssaAttachments.Title = reader.Value;
break; break;

View File

@ -1,4 +1,6 @@
namespace Nikse.SubtitleEdit.Logic using System.Drawing;
namespace Nikse.SubtitleEdit.Logic
{ {
// The language classes are built for easy xml-serialization (makes save/load code simple) // The language classes are built for easy xml-serialization (makes save/load code simple)
public static class LanguageStructure public static class LanguageStructure
@ -196,6 +198,7 @@
public string UsePostProcessing { get; set; } public string UsePostProcessing { get; set; }
public string BatchMode { get; set; } public string BatchMode { get; set; }
public string KeepPartialTranscription { get; set; } public string KeepPartialTranscription { get; set; }
public string TranslateToEnglish { get; set; }
} }
public class AssaAttachments public class AssaAttachments