0

我可以很好地通过 ffmpeg 运行参数,但我需要能够在流式传输时实时读取它的输出(您可能知道,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?

 }

我不知道现在该怎么做才能获得实时数据,但如果可以的话,我会更新prog,它有许多控件,包括进度条等。典型的输出(我感兴趣的)看起来像“帧= 240 fps= 12.8 q=0.0 大小= 1273802kB 时间=00:00:08.008 比特率=4415.2kbits/s dup=46 drop=0”。我知道如何解析它以获得我需要的东西,我只需要那一行!

4

1 回答 1

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

字符串输出将是您的行。

于 2013-07-03T04:57:28.720 回答