mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-28 06:52:35 +01:00
Improve audio-to-text F2 log view
This commit is contained in:
parent
fa0433ca20
commit
cefcff2a61
@ -166,9 +166,12 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
progressBar1.Maximum = 100;
|
||||
progressBar1.Value = 0;
|
||||
progressBar1.Visible = true;
|
||||
progressBar1.BringToFront();
|
||||
progressBar1.Refresh();
|
||||
progressBar1.Top = labelProgress.Bottom + 3;
|
||||
if (!textBoxLog.Visible)
|
||||
{
|
||||
progressBar1.BringToFront();
|
||||
}
|
||||
}
|
||||
|
||||
private void GenerateBatch()
|
||||
@ -423,7 +426,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
labelProgress.Text = string.Format(LanguageSettings.Current.AddWaveform.ExtractingMinutes, (int)(seconds / 60), (int)(seconds % 60));
|
||||
}
|
||||
|
||||
Refresh();
|
||||
Invalidate();
|
||||
if (_cancel)
|
||||
{
|
||||
process.Kill();
|
||||
|
@ -84,9 +84,12 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
progressBar1.Maximum = 100;
|
||||
progressBar1.Value = 0;
|
||||
progressBar1.Visible = true;
|
||||
progressBar1.BringToFront();
|
||||
progressBar1.Refresh();
|
||||
progressBar1.Top = labelProgress.Bottom + 3;
|
||||
if (!textBoxLog.Visible)
|
||||
{
|
||||
progressBar1.BringToFront();
|
||||
}
|
||||
}
|
||||
|
||||
private void GenerateBatch()
|
||||
@ -116,7 +119,12 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
if (_cancel)
|
||||
{
|
||||
TaskbarList.SetProgressState(_parentForm.Handle, TaskbarButtonProgressFlags.NoProgress);
|
||||
DialogResult = DialogResult.Cancel;
|
||||
if (!textBoxLog.Visible)
|
||||
{
|
||||
DialogResult = DialogResult.Cancel;
|
||||
progressBar1.Hide();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
@ -28,6 +29,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
private readonly Regex _timeRegex = new Regex(@"^\[\d\d:\d\d[\.,]\d\d\d --> \d\d:\d\d[\.,]\d\d\d\]", RegexOptions.Compiled);
|
||||
private List<ResultText> _resultList;
|
||||
private string _languageCode;
|
||||
private ConcurrentBag<string> _outputText = new ConcurrentBag<string>();
|
||||
|
||||
public Subtitle TranscribedSubtitle { get; private set; }
|
||||
|
||||
@ -64,14 +66,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
comboBoxLanguages.Items.Clear();
|
||||
comboBoxLanguages.Items.AddRange(WhisperLanguage.Languages.ToArray<object>());
|
||||
var lang = WhisperLanguage.Languages.FirstOrDefault(p => p.Code == Configuration.Settings.Tools.WhisperLanguageCode);
|
||||
if (lang != null)
|
||||
{
|
||||
comboBoxLanguages.Text = lang.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
comboBoxLanguages.Text = "English";
|
||||
}
|
||||
comboBoxLanguages.Text = lang != null ? lang.ToString() : "English";
|
||||
|
||||
FillModels(comboBoxModels, string.Empty);
|
||||
|
||||
@ -143,8 +138,10 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
return;
|
||||
}
|
||||
|
||||
timer1.Start();
|
||||
GenerateBatch();
|
||||
TaskbarList.SetProgressState(_parentForm.Handle, TaskbarButtonProgressFlags.NoProgress);
|
||||
timer1.Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -155,10 +152,11 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
comboBoxLanguages.Enabled = false;
|
||||
comboBoxModels.Enabled = false;
|
||||
var waveFileName = GenerateWavFile(_videoFileName, _audioTrackNumber);
|
||||
textBoxLog.AppendText("Wav file name: " + waveFileName);
|
||||
textBoxLog.AppendText(Environment.NewLine);
|
||||
_outputText.Add("Wav file name: " + waveFileName);
|
||||
progressBar1.Style = ProgressBarStyle.Blocks;
|
||||
timer1.Start();
|
||||
var transcript = TranscribeViaWhisper(waveFileName);
|
||||
timer1.Stop();
|
||||
if (_cancel && (transcript == null || transcript.Count == 0 || MessageBox.Show(LanguageSettings.Current.AudioToText.KeepPartialTranscription, Text, MessageBoxButtons.YesNoCancel) != DialogResult.Yes))
|
||||
{
|
||||
DialogResult = DialogResult.Cancel;
|
||||
@ -178,9 +176,12 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
progressBar1.Maximum = 100;
|
||||
progressBar1.Value = 0;
|
||||
progressBar1.Visible = true;
|
||||
progressBar1.BringToFront();
|
||||
progressBar1.Refresh();
|
||||
progressBar1.Top = labelProgress.Bottom + 3;
|
||||
if (!textBoxLog.Visible)
|
||||
{
|
||||
progressBar1.BringToFront();
|
||||
}
|
||||
}
|
||||
|
||||
private void GenerateBatch()
|
||||
@ -189,7 +190,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
_batchFileNumber = 0;
|
||||
var errors = new StringBuilder();
|
||||
var errorCount = 0;
|
||||
textBoxLog.AppendText("Batch mode" + Environment.NewLine);
|
||||
_outputText.Add("Batch mode");
|
||||
foreach (ListViewItem lvi in listViewInputFiles.Items)
|
||||
{
|
||||
_batchFileNumber++;
|
||||
@ -210,7 +211,8 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
continue;
|
||||
}
|
||||
|
||||
textBoxLog.AppendText("Wav file name: " + waveFileName + Environment.NewLine);
|
||||
_outputText.Add(string.Empty);
|
||||
_outputText.Add("Wav file name: " + waveFileName);
|
||||
progressBar1.Style = ProgressBarStyle.Blocks;
|
||||
var transcript = TranscribeViaWhisper(waveFileName);
|
||||
if (_cancel)
|
||||
@ -266,7 +268,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
}
|
||||
|
||||
File.WriteAllText(fileName, text, Encoding.UTF8);
|
||||
textBoxLog.AppendText("Subtitle written to : " + fileName + Environment.NewLine);
|
||||
_outputText.Add("Subtitle written to : " + fileName);
|
||||
}
|
||||
|
||||
internal static string GetLanguage(string name)
|
||||
@ -317,7 +319,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
Application.DoEvents();
|
||||
System.Threading.Thread.Sleep(100);
|
||||
|
||||
Refresh();
|
||||
Invalidate();
|
||||
if (_cancel)
|
||||
{
|
||||
process.Kill();
|
||||
@ -341,6 +343,8 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
return;
|
||||
}
|
||||
|
||||
_outputText.Add(outLine.Data.Trim() + Environment.NewLine);
|
||||
|
||||
foreach (var line in outLine.Data.SplitToLines())
|
||||
{
|
||||
if (_timeRegex.IsMatch(line))
|
||||
@ -409,7 +413,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
labelProgress.Text = string.Format(LanguageSettings.Current.AddWaveform.ExtractingMinutes, (int)(seconds / 60), (int)(seconds % 60));
|
||||
}
|
||||
|
||||
Refresh();
|
||||
Invalidate();
|
||||
if (_cancel)
|
||||
{
|
||||
process.Kill();
|
||||
@ -518,8 +522,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
var parameters = $"--model {model} --language \"{language}\" --fp16 False \"{waveFileName}\"";
|
||||
var process = new Process { StartInfo = new ProcessStartInfo("whisper", parameters) { WindowStyle = ProcessWindowStyle.Hidden, CreateNoWindow = true } };
|
||||
|
||||
textBoxLog.AppendText("Calling whisper with : whisper " + parameters + Environment.NewLine);
|
||||
|
||||
_outputText.Add("Calling whisper with : whisper " + parameters);
|
||||
|
||||
if (dataReceivedHandler != null)
|
||||
{
|
||||
@ -586,6 +589,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateLog();
|
||||
textBoxLog.Visible = true;
|
||||
textBoxLog.BringToFront();
|
||||
}
|
||||
@ -609,34 +613,20 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
UiUtil.OpenFolder(WhisperModel.ModelFolder);
|
||||
}
|
||||
|
||||
private void timer1_Tick(object sender, EventArgs e)
|
||||
private void UpdateLog()
|
||||
{
|
||||
//if (_bytesWavRead <= 0 || _bytesWavTotal <= 0)
|
||||
//{
|
||||
// return;
|
||||
//}
|
||||
if (_outputText.IsEmpty)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//var durationMs = (DateTime.UtcNow.Ticks - _startTicks) / 10_000;
|
||||
//var msPerFrame = (float)durationMs / _bytesWavRead;
|
||||
//var estimatedTotalMs = msPerFrame * _bytesWavTotal;
|
||||
//var estimatedLeft = ToProgressTime(estimatedTotalMs - durationMs);
|
||||
//labelTime.Text = estimatedLeft;
|
||||
textBoxLog.AppendText(string.Join(Environment.NewLine, _outputText));
|
||||
_outputText = new ConcurrentBag<string>();
|
||||
}
|
||||
|
||||
public static string ToProgressTime(float estimatedTotalMs)
|
||||
private void timer1_Tick(object sender, EventArgs e)
|
||||
{
|
||||
var timeCode = new TimeCode(estimatedTotalMs);
|
||||
if (timeCode.TotalSeconds < 60)
|
||||
{
|
||||
return string.Format(LanguageSettings.Current.GenerateVideoWithBurnedInSubs.TimeRemainingSeconds, (int)Math.Round(timeCode.TotalSeconds));
|
||||
}
|
||||
|
||||
if (timeCode.TotalSeconds / 60 > 5)
|
||||
{
|
||||
return string.Format(LanguageSettings.Current.GenerateVideoWithBurnedInSubs.TimeRemainingMinutes, (int)Math.Round(timeCode.TotalSeconds / 60));
|
||||
}
|
||||
|
||||
return string.Format(LanguageSettings.Current.GenerateVideoWithBurnedInSubs.TimeRemainingMinutesAndSeconds, timeCode.Minutes + timeCode.Hours * 60, timeCode.Seconds);
|
||||
UpdateLog();
|
||||
}
|
||||
|
||||
private void buttonDownload_Click(object sender, EventArgs e)
|
||||
|
@ -36,6 +36,8 @@
|
||||
this.textBoxLog = new System.Windows.Forms.TextBox();
|
||||
this.labelInfo = new System.Windows.Forms.Label();
|
||||
this.groupBoxModels = new System.Windows.Forms.GroupBox();
|
||||
this.labelChooseLanguage = new System.Windows.Forms.Label();
|
||||
this.comboBoxLanguages = new System.Windows.Forms.ComboBox();
|
||||
this.buttonDownload = new System.Windows.Forms.Button();
|
||||
this.linkLabelOpenModelsFolder = new System.Windows.Forms.LinkLabel();
|
||||
this.labelModel = new System.Windows.Forms.Label();
|
||||
@ -47,8 +49,6 @@
|
||||
this.groupBoxInputFiles = new System.Windows.Forms.GroupBox();
|
||||
this.listViewInputFiles = new System.Windows.Forms.ListView();
|
||||
this.columnHeaderFileName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.labelChooseLanguage = new System.Windows.Forms.Label();
|
||||
this.comboBoxLanguages = new System.Windows.Forms.ComboBox();
|
||||
this.groupBoxModels.SuspendLayout();
|
||||
this.groupBoxInputFiles.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
@ -136,6 +136,24 @@
|
||||
this.groupBoxModels.TabStop = false;
|
||||
this.groupBoxModels.Text = "Models";
|
||||
//
|
||||
// labelChooseLanguage
|
||||
//
|
||||
this.labelChooseLanguage.AutoSize = true;
|
||||
this.labelChooseLanguage.Location = new System.Drawing.Point(3, 37);
|
||||
this.labelChooseLanguage.Name = "labelChooseLanguage";
|
||||
this.labelChooseLanguage.Size = new System.Drawing.Size(90, 13);
|
||||
this.labelChooseLanguage.TabIndex = 6;
|
||||
this.labelChooseLanguage.Text = "Choose language";
|
||||
//
|
||||
// comboBoxLanguages
|
||||
//
|
||||
this.comboBoxLanguages.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.comboBoxLanguages.FormattingEnabled = true;
|
||||
this.comboBoxLanguages.Location = new System.Drawing.Point(6, 53);
|
||||
this.comboBoxLanguages.Name = "comboBoxLanguages";
|
||||
this.comboBoxLanguages.Size = new System.Drawing.Size(194, 21);
|
||||
this.comboBoxLanguages.TabIndex = 7;
|
||||
//
|
||||
// buttonDownload
|
||||
//
|
||||
this.buttonDownload.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
@ -247,24 +265,6 @@
|
||||
this.columnHeaderFileName.Text = "File name";
|
||||
this.columnHeaderFileName.Width = 455;
|
||||
//
|
||||
// labelChooseLanguage
|
||||
//
|
||||
this.labelChooseLanguage.AutoSize = true;
|
||||
this.labelChooseLanguage.Location = new System.Drawing.Point(3, 37);
|
||||
this.labelChooseLanguage.Name = "labelChooseLanguage";
|
||||
this.labelChooseLanguage.Size = new System.Drawing.Size(90, 13);
|
||||
this.labelChooseLanguage.TabIndex = 6;
|
||||
this.labelChooseLanguage.Text = "Choose language";
|
||||
//
|
||||
// comboBoxLanguages
|
||||
//
|
||||
this.comboBoxLanguages.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.comboBoxLanguages.FormattingEnabled = true;
|
||||
this.comboBoxLanguages.Location = new System.Drawing.Point(6, 53);
|
||||
this.comboBoxLanguages.Name = "comboBoxLanguages";
|
||||
this.comboBoxLanguages.Size = new System.Drawing.Size(194, 21);
|
||||
this.comboBoxLanguages.TabIndex = 7;
|
||||
//
|
||||
// WhisperAudioToTextSelectedLines
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
@ -21,6 +22,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
private readonly Regex _timeRegex = new Regex(@"^\[\d\d:\d\d[\.,]\d\d\d --> \d\d:\d\d[\.,]\d\d\d\]", RegexOptions.Compiled);
|
||||
private List<ResultText> _resultList;
|
||||
private string _languageCode;
|
||||
private ConcurrentBag<string> _outputText = new ConcurrentBag<string>();
|
||||
|
||||
public Subtitle TranscribedSubtitle { get; private set; }
|
||||
|
||||
@ -96,9 +98,12 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
progressBar1.Maximum = 100;
|
||||
progressBar1.Value = 0;
|
||||
progressBar1.Visible = true;
|
||||
progressBar1.BringToFront();
|
||||
progressBar1.Refresh();
|
||||
progressBar1.Top = labelProgress.Bottom + 3;
|
||||
if (!textBoxLog.Visible)
|
||||
{
|
||||
progressBar1.BringToFront();
|
||||
}
|
||||
}
|
||||
|
||||
private void GenerateBatch()
|
||||
@ -112,7 +117,8 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
{
|
||||
ParagraphMaxChars = Configuration.Settings.General.SubtitleLineMaximumLength * 2,
|
||||
};
|
||||
textBoxLog.AppendText("Batch mode" + Environment.NewLine);
|
||||
_outputText.Add("Batch mode");
|
||||
timer1.Start();
|
||||
foreach (ListViewItem lvi in listViewInputFiles.Items)
|
||||
{
|
||||
_batchFileNumber++;
|
||||
@ -126,7 +132,8 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
comboBoxLanguages.Enabled = false;
|
||||
var waveFileName = videoFileName;
|
||||
|
||||
textBoxLog.AppendText("Wav file name: " + waveFileName + Environment.NewLine);
|
||||
_outputText.Add(string.Empty);
|
||||
_outputText.Add("Wav file name: " + waveFileName);
|
||||
progressBar1.Style = ProgressBarStyle.Blocks;
|
||||
var transcript = TranscribeViaWhisper(waveFileName);
|
||||
if (_cancel)
|
||||
@ -142,9 +149,11 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
TaskbarList.SetProgressValue(_parentForm.Handle, _batchFileNumber, listViewInputFiles.Items.Count);
|
||||
}
|
||||
|
||||
timer1.Stop();
|
||||
progressBar1.Value = 100;
|
||||
labelTime.Text = string.Empty;
|
||||
PostFix(postProcessor);
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
|
||||
@ -183,13 +192,19 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
Application.DoEvents();
|
||||
System.Threading.Thread.Sleep(100);
|
||||
|
||||
Refresh();
|
||||
Invalidate();
|
||||
if (_cancel)
|
||||
{
|
||||
process.Kill();
|
||||
progressBar1.Visible = false;
|
||||
buttonCancel.Visible = false;
|
||||
DialogResult = DialogResult.Cancel;
|
||||
|
||||
if (!textBoxLog.Visible)
|
||||
{
|
||||
DialogResult = DialogResult.Cancel;
|
||||
progressBar1.Hide();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -207,6 +222,8 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
return;
|
||||
}
|
||||
|
||||
_outputText.Add(outLine.Data.Trim() + Environment.NewLine);
|
||||
|
||||
foreach (var line in outLine.Data.SplitToLines())
|
||||
{
|
||||
if (_timeRegex.IsMatch(line))
|
||||
@ -316,7 +333,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
var parameters = $"--model {model} --language \"{language}\" --fp16 False \"{waveFileName}\"";
|
||||
var process = new Process { StartInfo = new ProcessStartInfo("whisper", parameters) { WindowStyle = ProcessWindowStyle.Hidden, CreateNoWindow = true } };
|
||||
|
||||
textBoxLog.AppendText("Calling whisper with : whisper " + parameters + Environment.NewLine);
|
||||
_outputText.Add("Calling whisper with : whisper " + parameters);
|
||||
|
||||
|
||||
if (dataReceivedHandler != null)
|
||||
@ -369,6 +386,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateLog();
|
||||
textBoxLog.Visible = true;
|
||||
textBoxLog.BringToFront();
|
||||
}
|
||||
@ -387,6 +405,17 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateLog()
|
||||
{
|
||||
if (_outputText.IsEmpty)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
textBoxLog.AppendText(string.Join(Environment.NewLine, _outputText) + Environment.NewLine);
|
||||
_outputText = new ConcurrentBag<string>();
|
||||
}
|
||||
|
||||
private void linkLabelOpenModelFolder_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
UiUtil.OpenFolder(WhisperModel.ModelFolder);
|
||||
@ -394,6 +423,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
||||
|
||||
private void timer1_Tick(object sender, EventArgs e)
|
||||
{
|
||||
UpdateLog();
|
||||
}
|
||||
|
||||
public static string ToProgressTime(float estimatedTotalMs)
|
||||
|
@ -8788,7 +8788,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
UiUtil.FixFonts(audioToTextVosk);
|
||||
audio.DropDownItems.Insert(0, audioClip);
|
||||
|
||||
if (!WhisperHelper.IsWhisperInstalled())
|
||||
if (WhisperHelper.IsWhisperInstalled())
|
||||
{
|
||||
audio.DropDownItems.Insert(0, audioToTextWhisper);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user