我可以很好地通过 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”。我知道如何解析它以获得我需要的东西,我只需要那一行!