Improve audio-to-text F2 log view

This commit is contained in:
niksedk 2022-10-04 19:41:37 +02:00
parent fa0433ca20
commit cefcff2a61
6 changed files with 103 additions and 72 deletions

View File

@ -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();

View File

@ -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;
}

View File

@ -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)

View File

@ -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);

View File

@ -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)

View File

@ -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);
}