2017-04-11 188 views
0

我试图从C#中的命令行运行FFMpeg。以前我是从“CMD.exe”运行它的,它工作正常,但是需要本地安装ffmpeg来配置我的系统环境变量。所以我想直接从“ffmpeg.exe”运行它。我正在使用下面的代码(所有路径都是正确的),并且什么也没有发生:C#应用程序 - 从命令行运行FFMpeg不起作用

string programToRun = "C:\\Users\\dkahn\\Documents\\PlaybackTool\\PlaybackTool\\Desktop\\Source\\Player\\Player\\ffmpeg\\ffmpeg.exe"; 

string directoryName = "C:\\Users\\dkahn\\Documents\\PlaybackTool\\PlaybackTool\\Desktop\\Source\\Player\\test\\test1-1.mp4"; 

string command = "@ffmpeg -i test1-1.mp4 -r 1 -s 180x101 test1-1\\output_%04d.png"; 

Process cmd = new Process(); 
cmd.StartInfo.FileName = programToRun; 
cmd.StartInfo.RedirectStandardInput = true; 
cmd.StartInfo.RedirectStandardOutput = true; 
cmd.StartInfo.CreateNoWindow = true; 
cmd.StartInfo.UseShellExecute = false; 
cmd.StartInfo.WorkingDirectory = directoryName; 
cmd.Start(); 
cmd.StandardInput.WriteLine(command); 
cmd.StandardInput.Flush(); 
cmd.StandardInput.Close(); 
cmd.WaitForExit(); 

有没有人有任何见解?

+0

“ffmpeg.exe”的参数是“@ ffmpeg”的一部分吗? – dcg

+0

也许不是,那是当我从命令行(cmd.exe)运行它时。但我试图删除它,它仍然无法正常工作。 –

+0

尝试将'cmd.StartInfo.Arguments'设置为'-i test1-1.mp4 -r 1 -s 180x101 test1-1 \\ output_%04d.png'并删除使用'StandardInput'的行。 – dcg

回答

0

这就是我解决这个问题的方法。

  var startInfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "ffmpeg.exe"); 
      startInfo.WindowStyle = ProcessWindowStyle.Hidden; 
      startInfo.WorkingDirectory = path + "\\"; 

      startInfo.Arguments = "-ss " + _startTime + " -i " + info.FullName + " -t " + _duration + " -map 0 -c copy -c:a copy " + "sample" + GetExtension(info);//-acodec 

      var processn = Process.Start(startInfo); 
      processn.EnableRaisingEvents = true; 

      processn.WaitForExit(); 

其中path是您的目录,info是您要处理的文件。

相关问题