2017-04-11 208 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是您要處理的文件。

相關問題