Вы можете легко реализовать индикатор выполнения, если работает ffmpeg. Выход FFmpeg во время работы что-то вроде:
frame= 3366 fps=465 q=31.0 Lsize= 6474kB time=140.35 bitrate= 377.9kbits/s
И обновляется ~ два раза в секунду. Вы можете проанализировать эту строку и получить данные, необходимые для отображения прогресса. Когда вы запускаете в командной строке, вы видите только одну строку, постоянно обновляемую, но то, что ffmpeg делает, это написать строку, за которой следует \ r. Вот почему вы не видите несколько строк. Однако при использовании StreamReader.ReadLine() на выходе ошибки программы вы получаете по одной строке для каждого обновления.
Ниже приведен пример кода для чтения. Вам нужно будет игнорировать любую строку, которая не начинается с «рамки», возможно, используйте 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();
}
}
Кто-нибудь? C'mon, кто-то, должно быть, использовал ffmpeg с .net –