我可以通过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”。我知道如何解析它以获得我需要的东西,我只需要那条线!
答案 0 :(得分:0)
run.Start();
StreamReader sr = run.StandardError;
while (!sr.EndOfStream)
{
string output = sr.ReadLine();
}
run.WaitForExit();
字符串输出将是您的行。