【问题标题】:reading ffmpeg output and sending it to a form读取 ffmpeg 输出并将其发送到表单
【发布时间】:2012-11-18 14:48:48
【问题描述】:

我可以很好地通过 ffmpeg 运行参数,但是我需要能够在流式传输时实时读取它的输出(您可能知道,ffmpeg 可能需要一段时间,并且它会使用当前帧每秒更新其 stderr 两次, ETC)。

我有一个名为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,它有许多控件,包括进度条等。典型输出(我m 感兴趣)看起来像“帧= 240 fps= 12.8 q=0.0 大小= 1273802kB 时间=00:00:08.008 比特率=4415.2kbits/s dup=46 drop=0”。我知道如何解析它以获得我需要的东西,我只需要那行!

【问题讨论】:

    标签: c# ffmpeg stderr


    【解决方案1】:
    run.Start();
    StreamReader sr = run.StandardError;
    while (!sr.EndOfStream)
    {
        string output = sr.ReadLine();
    }
    run.WaitForExit();
    

    string output 将是你的行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 2022-10-06
      • 2021-06-24
      • 2021-09-18
      • 1970-01-01
      • 2020-01-17
      相关资源
      最近更新 更多