读取ffmpeg输出并将其发送到表单

时间:2012-11-18 14:48:48

标签: c# ffmpeg stderr

我可以通过ffmpeg运行参数就好了,但是我需要能够在它流时读取它的输出LIVE(你可能知道,ffmpeg可能需要一段时间,并且它会使用当前帧每秒更新一次stderr,等等)。

我有一个名为prog的表单,使用ProgressForm prog = new ProgressForm();全局声明用户输入视频文件的文件夹,收集一些数据,然后按下按钮以使用ffmpeg启动编码过程。 button_click事件创建一个新线程,如下所示:

 runFFMpeg = new Thread(run_ffmpeg);
 runFFMpeg.start();

runFFMpeg早先使用private Thread runFFMpeg;全局初始化。

现在我有方法run_ffmpeg:

private void run_ffmpeg()
{
    string program = "C:\\ffmpeg64.exe";
    string args = //some arguments that I know work;

    ProcessStartInfo run = new ProcessStartInfo(program,args);
    run.UseShellExecute = false;
    run.CreateNoWindow = true;
    run.RedirectStandardOutput = true;
    run.RedirectStandardError = true;
    Process runP = new Process();
    runP = Process.Start(run);
    runP.WaitForExit();

    //NOW WHAT?

 }

我不知道现在要做什么来获取数据LIVE,但如果可以,我会更新prog,它有许多控件,包括进度条等。典型输出(即我很感兴趣)看起来像“frame = 240 fps = 12.8 q = 0.0 size = 1273802kB time = 00:00:08.008 bitrate = 4415.2kbits / s dup = 46 drop = 0”。我知道如何解析它以获得我需要的东西,我只需要那条线!

1 个答案:

答案 0 :(得分:0)

run.Start();
StreamReader sr = run.StandardError;
while (!sr.EndOfStream)
{
    string output = sr.ReadLine();
}
run.WaitForExit();

字符串输出将是您的行。