Отображение процесса конвертирования видео FFMPEG с Progress Bar в С# - C#

Узнай цену своей работы

Формулировка задачи:

У меня проект Windows Form. Необходимо чтобы на форме отображался процесс конвертирования, возможно с компонентами: label или Progress Bar. У меня такой код:
 Process p = new Process();
                
                ProcessStartInfo info = new ProcessStartInfo();
                info.FileName = Application.StartupPath + "\\ffmpeg_files\\ffmpeg.exe";
                info.WindowStyle = ProcessWindowStyle.Hidden; // Предоставляет возможность скрыть консольное окно ffmpeg, при выполнении конвертации.
                p.StartInfo.CreateNoWindow = false;
               info.Arguments = " -i " + randomString + ext + " -ar 22050 -ab 128k -f flv -b 700k -s 640x480 -y " + randomString + ".flv";
                p = Process.Start(info);
                p.WaitForExit();
                p.Close();
                txtFilename.Text = randomString + ".flv";

                info.Arguments = " -i " + randomString + ".flv" + " -vframes 1 -s 640x480 " + randomString + ".jpg";
                p = Process.Start(info);
                p.WaitForExit();
                p.Close()
Облазил весь google и не где нет информации. А что Вы думаете по этому поводу?
Нет, серьёзно ребята! Информацию, которую я за целую неделю нашел, это для ASP.NET. Если у Вас много работы и мало времени, то подскажите хоть "откуда копать". Пусть процесс конвертации отображается не в прогресс баре, а в чем-то другом. Хоть что-то.

Решение задачи: «Отображение процесса конвертирования видео FFMPEG с Progress Bar в С#»

textual
Листинг программы
private void button1_Click(object sender, EventArgs e)
{
   var button = sender as Button;
 
   if (worker.IsBusy) worker.CancelAsync();
   else 
   {
      button.Text = "Stop";
      worker.RunWorkerAsync();
   }
}
 
void Worker_DoWork(object sender, DoWorkEventArgs e)
{
   var worker = sender as BackgroundWorker;
 
   Process p = new Process();
 
   var info = p.StartInfo;
   info.FileName = info.FileName = Application.StartupPath + "\\ffmpeg_files\\ffmpeg.exe";
   info.Arguments = " -i " + randomString + ext + " -ar 22050 -ab 128k -f flv -b 700k -s 640x480 -y " + randomString + ".flv";
   info.CreateNoWindow = true;
   info.UseShellExecute = false;
   info.RedirectStandardError = true;
   info.RedirectStandardInput = true;
 
   try
   {
      p = Process.Start(info);
 
      string line;
      while ((line = p.StandardError.ReadLine()) != null)
      {
         if (worker.CancellationPending) 
         {
            p.StandardInput.Write('q');
            e.Cancel = true;
         }
         if (line.StartsWith("frame")) worker.ReportProgress(0, line);
      }
      p.WaitForExit();
   }
   finally 
   {
      if (!p.HasExited) p.Kill();
      p.Dispose();
   }
}
 
private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
   label.Text = e.UserState.ToString();
}
 
private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
   if (e.Error != null)
      MessageBox.Show(e.Error.Message, "Conversion failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
   else if (e.Cancelled)
      MessageBox.Show("Conversion has been cancelled.", "Conversion cancelled", MessageBoxButtons.OK, MessageBoxIcon.Information);
   else
      MessageBox.Show("Finished.", "Conversion complete", MessageBoxButtons.OK, MessageBoxIcon.Information);
   convertButton.Text = "Start";
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5