Puede implementar fácilmente una barra de progreso si ejecuta ffmpeg. La salida de ffmpeg mientras se ejecuta es algo así como:
frame= 3366 fps=465 q=31.0 Lsize= 6474kB time=140.35 bitrate= 377.9kbits/s
Y se actualiza ~ dos veces por segundo. Puede analizar esa línea y obtener los datos que necesita para mostrar el progreso. Cuando se ejecuta en la línea de comando, solo ve una línea que se actualiza todo el tiempo, pero lo que hace ffmpeg es escribir la línea seguida de \ r. Es por eso que no ves líneas múltiples. Sin embargo, al usar StreamReader.ReadLine() en la salida de error del programa, se obtiene una línea por cada actualización.
A continuación se muestra un código de muestra para leer la salida. Tendría que ignorar cualquier línea que no comience con 'frame', quizás use BeginErrorReadLine() + ErrorDataReceived si quiere que las líneas de lectura sean asincrónicas, etc., pero se entiende (lo he probado):
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();
}
}
¿Alguien? Vamos, alguien debe haber usado ffmpeg con .net –