Используйте WriteLine('q');
вместо Write('q');
.
:)
Я попытался запустить ffmpeg из оболочки Cygwin Bash и увидел, что мне пришлось вводить ввод после 'q'
.Итак ....
static void process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
Console.WriteLine("Error line: {0} ({1:m:s:fff})", lineCount++,
DateTime.Now);
Console.WriteLine(e.Data);
Console.WriteLine();
if (lineCount == 5)
process.StandardInput.WriteLine("q");
}
При наличии c:\Documents and Settings\All Users\Documents\My Music\Sample Music\Beethoven's Symphony No. 9 (Scherzo).wma
- без
process.StandardInput.WriteLine
он печатает 61 строку на stderr, 1 строку на stdout и создает mp3-файл1212457 байт. - добавляет выход, и он выводит меньшее количество строк на stderr, ничего на stdout и намного меньший файл mp3.
Обратите внимание, что он оставляет файл mp3 вокруг.
Итак.
РЕДАКТИРОВАТЬ
Увидев ваш комментарий, что вы уже пробовали это ..
Я только что перепроверил.Поведение странное.
Сначала я повторил то, что у меня было, и увидел, что отправка "q\n"
на 5-й строке в sterr создает файл намного меньшего размера, хотя в разных сериях он немного отличается - между 160K и 220K.
Далее я прокомментировал Console.WriteLine
, надеясь, что это заставит ffmpeg выйти быстрее.Напротив, ffmpeg теперь не остановился совсем и создал полный файл с точно таким же числом байтов, 1212457 байт.Это поведение согласуется с вашим наблюдением
Наконец, с WriteLines
на месте я накачал "q\n"
в каждой строке до stderr
после пятой.Большой сюрприз!После регистрации 40 строк ошибок,
Unhandled Exception: System.InvalidOperationException: StandardIn has not been redirected.
at System.Diagnostics.Process.get_StandardInput()
at StandAlone.Program.process_ErrorDataReceived(Object sender, DataReceivedEventArgs e) in C:\[..]\StandAlone\Program.cs:line 171
at System.Diagnostics.Process.ErrorReadNotifyUser(String data)
Не перенаправлен? А вы мне говорите после того, как я отправил 35 строк на его вход?
Что-то не совсем правильно ... пахнет ошибкой.
Обновление от asker:
Обновление сборок Windows с здесь (статическое) решило мою проблему, я использовалнекоторые сборки с неофициального сайта, по-видимому.