0

ffmpeg を介して引数を問題なく実行できますが、ストリームの出力を LIVE で読み取れるようにする必要があります (ご存じのとおり、ffmpeg には時間がかかる場合があり、現在のフレームなどで stderr を 1 秒に 2 回更新します)。

ユーザーがビデオファイルのフォルダーを入力すると、いくつかのデータが収集され、ボタンが押されてffmpegでエンコードプロセスが開始されますprogProgressForm prog = new ProgressForm();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". 必要なものを取得するためにそれを解析する方法を知っています。その行が必要なだけです!

4

1 に答える 1

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

文字列出力はあなたの行になります。

于 2013-07-03T04:57:28.720 に答える