Процесс останавливается при запуске в .NET (ffmpeg) - PullRequest
6 голосов
/ 16 ноября 2011

Я пытаюсь запустить ffmpeg как процесс в .NET (C #), но в некоторых случаях, в зависимости от аргументов (в частности, если я опускаю аргументы видео для создания аудиофайла), это останавливает,Он запускает, выводит некоторые строки, но затем просто останавливается (используя 0% CPU).Когда родительский процесс .NET уничтожен, он продолжается, и если я позволю ему продолжаться, ffmpeg правильно создает файл.Я подумал, что это может быть связано с использованием Peek() для просмотра потока, поэтому я просто упростил его до следующего, который ведет себя так же:

_process = new Process
{
    StartInfo =
    {
        UseShellExecute = false,
        RedirectStandardOutput = false,
        RedirectStandardError = true,
        FileName = "c:\\ffmpeg.exe",
        Arguments = string.Format(
    "-i {0} {1} {2} {3} -y {4}", inputPath, videoArgs, audioArgs, options, outputPath)
    }
};
_process.Start();
_process.WaitForExit();

ffmpeg добирается до точки, где он выводитинформация о входных видео / аудио потоках перед остановкой.Выполнение команды через командную строку работает должным образом.

Кто-нибудь знает, в чем может быть проблема?

Редактировать:

Просто добавить, я пытался UseShellExecute = trueRedirectStandardError = false)и это работает.Однако мне все еще нужно прочитать вывод, так что это мне не очень помогает.

Ответы [ 2 ]

6 голосов
/ 16 ноября 2011

Прочитайте это MSDN на RedirectStandardError

Очевидно, это немного сложновато и может привести к тупиковой ситуации, если буферы потока вывода или ошибок заполнены. Сижу там и жду, когда вы прочитаете, что написано ...

1 голос
/ 13 октября 2016

Согласно комментариям к этому ответу , в некоторых случаях FFmpeg манипулирует с памятью экрана напрямую без использования стандартных потоков вывода и ошибок .Одним из примеров этого является приглашение [file] already exists. Overwrite? [y/N].

Я предполагаю, что вы запустили программу снаружи, если .NET, чтобы увидеть, что вывод?Если это приглашение, подобное приведенному выше, оно может заплатить, чтобы избежать проблем, и попытаться предоставить аргумент, который пропустит его, например.команда -y, которая заставляет FFmpeg перезаписывать файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...