来自C#应用程序的ffmpeg使用Process类 – 用户提示符未显示在standardError中

我正在编写一个使用c#运行ffmpeg的应用程序。 我的程序将standardError输出重定向到流,以便可以解析它以获取进度信息。

在测试期间,我发现了一个问题:

如果输出显示在命令窗口而不是被重定向,则ffmpeg将显示它的正常标题,后跟“file c:\ temp \ testfile.mpg已经存在.overrite [y]” 。 如果我单击命令窗口并按y,程序将继续对文件进行编码。

如果将StandardError重定向到我的处理程序然后打印到控制台,我会看到现在打印到控制台的命令窗口中显示的相同标题信息。 除了文件……已存在提示 。 如果我在命令窗口中单击并按y,程序将继续处理该文件。

当提示操作员提供信息时,是否存在除standardOutput或standardError之外的流,或者我是否遗漏了其他内容?

public void EncodeVideoWithProgress(string filename, string arguments, BackgroundWorker worker, DoWorkEventArgs e) { Process proc = new Process(); proc.StartInfo.FileName = "ffmpeg"; proc.StartInfo.Arguments = "-i " + " \"" + filename + "\" " + arguments; proc.StartInfo.UseShellExecute = false; proc.EnableRaisingEvents = true; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.RedirectStandardOutput = false; proc.StartInfo.CreateNoWindow = false; //set to true for testing proc.ErrorDataReceived += new DataReceivedEventHandler(NetErrorDataHandler); proc.Start(); proc.BeginErrorReadLine(); StreamReader reader = proc.StandardOutput; string line; while ((line = reader.ReadLine()) != null) { Console.WriteLine(line); } proc.WaitForExit(); } private static void NetErrorDataHandler(object sendingProcess, DataReceivedEventArgs errLine) { if (!String.IsNullOrEmpty(errLine.Data)) { Console.WriteLine(errLine.Data); } } 

在启动进程时,请使用“-y”命令行选项,而不是完成所有这些操作,这将强制ffmpeg覆盖现有文件。