Я знаю, что это очень старый вопрос, но если кто-то попадет сюда из-за поиска в Google, ответ будет следующим:
Вам также необходимо прочитать перенаправленный вывод ошибок первого процесса ffmpeg, даже если он вам не нужен. Это приведет к взаимоблокировке, если вы не прочитаете перенаправленный вывод ошибок, потому что ваша программа будет ожидать завершения процесса, но процесс ожидает чтения заполненного выходного потока ошибок. Вы можете посмотреть это здесь .
// convert to mpg 1st
ffmpeg.StartInfo.Arguments = " -i \"" + Server.MapPath("static/user/vid/") + videolink + "\" -f mpeg -b 300k -ac 2 -ab 128k -ar 44K \"" + Server.MapPath("static/user/vid/") + mpglink + "\"";
ffmpeg.StartInfo.FileName = Page.MapPath("bin/ffmpeg.exe");
ffmpeg.StartInfo.CreateNoWindow = true;
ffmpeg.StartInfo.UseShellExecute = false;
ffmpeg.StartInfo.RedirectStandardOutput = true;
ffmpeg.StartInfo.RedirectStandardError = true;
ffmpeg.Start();
// Use asynchronous read operations on at least one of the streams.
// Reading both streams synchronously would generate another deadlock.
ffmpeg.BeginOutputReadLine();
string tmpErrorOut = ffmpeg.StandardError.ReadToEnd();
ffmpeg.WaitForExit();
ffmpeg.Close();
Таким образом, вам придется читать перенаправленные сообщения об ошибках и потоки вывода, как вы это делали со вторым процессом ffmpeg.
То же самое относится и к генерации изображения для предварительного просмотра!