2012-11-18 39 views
0

我可以通过ffmpeg运行参数就好了,但我需要能够读取它的输出LIVE,因为它流(你可能知道,ffmpeg可能需要一段时间,它会更新它的stderr与当前帧每秒两次,等等)。阅读ffmpeg输出并将它发送到一个表格

我有一个名为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,里面有多个控件,包括进度条等。典型的输出(我感兴趣的)看起来像“frame = 240 fps = 12.8 q = 0.0 size = 1273802kB time = 00:00:08.008 bitrate = 4415.2kbits/s dup = 46 drop = 0" 。我知道如何解析这个来获得我需要的东西,我只需要那一行!

回答

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

输出将是你的线。

相关问题