`Process`不以过程参数

时间:2015-09-21 07:35:41

标签: c# wpf ffmpeg

我可以在cmd中运行FFmpeg.exe -i test.flv -f flv - | ffplay -i -,但是当" |"时,我无法在c#代码中运行它。正在争论中。

此代码有效:

  Process process = new Process();
  process process .StartInfo.FileName = "FFmpeg.exe";
  process process .StartInfo.Arguments =" -i test.flv "
  process .Start();

但是这段代码不起作用:

  Process process = new Process();
  process process .StartInfo.FileName = "FFmpeg.exe";
  process process .StartInfo.Arguments =" -i test.flv -f flv - | ffplay -i -"
  process .Start();

我尝试了这些代码但没有效果:

   process process .StartInfo.Arguments =" -i test.flv -f flv - \| ffplay -i -"

   process process .StartInfo.Arguments =" -i test.flv -f flv - \\| ffplay -i -"

   process process .StartInfo.Arguments =@" -i test.flv -f flv - | ffplay -i -"

   process process .StartInfo.Arguments ="\" -i test.flv -f flv - \| ffplay -i -\""

请告诉我如何在C#代码中运行FFmpeg.exe -i test.flv -f flv - | ffplay -i -

1 个答案:

答案 0 :(得分:3)

将输出从一个命令输送到另一个命令是shell的一个功能,您可以在其中执行这些命令。在.NET中,使用Process类需要使用shell(通常为cmd.exe)来实现相同的效果。

// usually expands to `C:\Windows\System32\cmd.exe`
process.StartInfo.FileName = Environment.ExpandEnvironmentVariables("%COMSPEC%"); 
// Build a command line passed to CMD.EXE
process.StartInfo.Arguments = "/C FFmpeg.exe -i test.flv -f flv - | ffplay -i -"

此外,根据您的使用情况,您通常希望等待该过程完成:

process.WaitForExit();

可以评估退出代码

if (process.ExitCode != 0) // Convention only! Usually, an exit of 0 means error. YMMV.

最后请注意,对于管道,此处返回的退出代码是最后一个命令的退出代码(在您的情况下为ffplay)。