我可以在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 -
。
答案 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
)。