Вы можете легко реализовать индикатор выполнения, если запустите ffmpeg. Вывод ffmpeg во время работы выглядит примерно так:
frame= 3366 fps=465 q=31.0 Lsize= 6474kB time=140.35 bitrate= 377.9kbits/s
И обновляется ~ два раза в секунду. Вы можете проанализировать эту строку и получить данные, необходимые для отображения прогресса. Когда вы запускаете в командной строке, вы видите, что все время обновляется только одна строка, но ffmpeg пишет строку, за которой следует \ r . Вот почему вы не видите несколько строк. Однако при использовании StreamReader.ReadLine () при выводе ошибок программы вы получаете одну строку для каждого обновления.
Ниже приведен пример кода для чтения выходных данных. Вам придется игнорировать любую строку, которая не начинается с 'frame', возможно, используйте BeginErrorReadLine () + ErrorDataReceived , если вы хотите, чтобы строки чтения были асинхронными и т. Д., Но вы получаете идея (я на самом деле это проверил):
using System;
using System.Diagnostics;
using System.IO;
class Test {
static void Main (string [] args)
{
Process proc = new Process ();
proc.StartInfo.FileName = "ffmpeg";
proc.StartInfo.Arguments = "-i " + args [0] + " " + args [1];
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
if (!proc.Start ()) {
Console.WriteLine ("Error starting");
return;
}
StreamReader reader = proc.StandardError;
string line;
while ((line = reader.ReadLine ()) != null) {
Console.WriteLine (line);
}
proc.Close ();
}
}