2012-11-18 2 views
0

ffmpeg를 통해 인수를 실행할 수는 있지만 출력 결과를 스트림으로 읽을 수 있어야합니다 (알고있는 것처럼 ffmpeg가 오래 걸릴 수 있습니다. 현재 프레임과 함께 두 번째로 stderr).ffmpeg 출력을 읽고 양식으로 보내기

ProgressForm prog = new ProgressForm();으로 전체적으로 선언 된 prog이라는 양식이 있습니다. 사용자가 비디오 파일의 폴더를 입력하고 일부 데이터가 수집 된 다음 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(); 

문자열 출력는 라인이 될 것입니다.

관련 문제