この質問を参照すると、ご覧のとおり、プログラムを実行してデータを受け取ることができました。
ただし、たとえば、ファイルの変換中にデータを送信することができず、q
すぐに変換を停止してプログラムを停止しました。
プロセスの停止もアプリケーションでサポートする必要があります。これは、このパラメーターを ffmpeg アプリに渡すことで行う必要があると思います。収集されていないすべてのリソースや、単に行って使うprocess.Kill()
これが私が試したことです:
static int lineCount = 0;
static bool flag;
static void process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
Console.WriteLine("Error ({1:m:s:fff}: {0})", lineCount++,
DateTime.Now);
if (e.Data != null && string.Equals(e.Data,"Press [q] to stop, [?] for help"))
flag = true;
if (flag)
{
flag = false;
Console.WriteLine("Stopping ({0:m:s:fff})...", DateTime.Now);
process.CancelErrorRead();
process.CancelOutputRead();
process.StandardInput.WriteLine("q");
}
Console.WriteLine(e.Data);
Console.WriteLine();
}
しかし、それは何もしません。変換が要求されると、それを制御できなくなり、出力を受け取ることしかできないようです。スタンドアロンとして実行すると、もちろん対話が可能になります。
ここで何が欠けていますか、出力を送信する際の別のトリックですか、前の回答のコードが間違っていますか、それとも別のアプローチを選択する必要がありましたか?
あなたの注意のために、RedirectStandardInput
オンです。
注: 前の質問の回答でわかるように、ffmpeg の相互作用は異なります。答えを知っているのは (おそらく私が間違っているかもしれません) ffmpeg の経験がある人だと思います。