ffmpeg を介して引数を問題なく実行できますが、ストリームの出力を LIVE で読み取れるようにする必要があります (ご存じのとおり、ffmpeg には時間がかかる場合があり、現在のフレームなどで stderr を 1 秒に 2 回更新します)。
ユーザーがビデオファイルのフォルダーを入力すると、いくつかのデータが収集され、ボタンが押されてffmpegでエンコードプロセスが開始されますprog
。ProgressForm 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". 必要なものを取得するためにそれを解析する方法を知っています。その行が必要なだけです!