我写了一个使用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();
正如我所说,这两个命令都按预期工作。问题是只有第二个无法获得输出。
答案 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
选项。否则命令窗口不会自动终止。