命令行输出未显示

时间:2018-04-20 14:13:31

标签: c# cmd

我写了一个使用ffmpeg编码器可执行文件的MP3转换应用程序。当我向它发送-h (help)参数时,我可以将所有输出都输出到我的txt文件中。但是当我尝试发送实际的转换参数时,该命令按预期工作,但我无法获得输出行。

这是我的代码:

/* Success */
string ffmpeg_cmd = "ffmpeg -h";    

/* Below command works well, but it's not able to get the output */
//string ffmpeg_cmd = "ffmpeg -i inputFile.wav -vn -ar 44100 -ac 2 -ab 320k -f mp3 -y outputFile.mp3";  

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = false;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();

cmd.StandardInput.WriteLine(ffmpeg_cmd /* + " & exit" */);    //"ping bing.com"

string output = cmd.StandardOutput.ReadToEnd();

File.AppendAllText(Directory.GetCurrentDirectory() + @"\cmd_logs.txt", output );

cmd.WaitForExit();

正如我所说,这两个命令都按预期工作。问题是只有第二个无法获得输出。

1 个答案:

答案 0 :(得分:1)

试试这个:

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.CreateNoWindow = false;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.Arguments = "/c ffmpeg.exe -i REMINDER.WAV -vn -ar 44100 -ac 2 -ab 320k -f mp3 -y REMINDER.mp3 2>>cmd_logs.txt";
cmd.Start();

cmd.WaitForExit();

编辑:: 您还可以使用-report选项生成ffmpeg.exe

的日志

<强>更新

ffmpeg使用StandardOutput创建二进制输出文件。在您的情况下MP3。对于日志,它使用StandardError流。您可以通过RedirectStandardError = true和阅读cmd.StandardError.ReadToEnd()来使代码正常工作。

还有一件事。您可以使用cmd.StartInfo.Arguments选项传递参数,而不是使用输入重定向。如果您通过CMD调用它,也请使用/c选项。否则命令窗口不会自动终止。