2017-04-11 8 views
0

C#のコマンドラインからFFMpegを実行しようとしています。以前は "CMD.exe"から実行していましたが、動作していましたが、システム環境変数を設定してffmpegをローカルにインストールする必要があります。だから私は "ffmpeg.exe"から直接実行したかったのです。私は次のコードを使用しています(すべてのパスが正しい)、何も起こりません:C#app - コマンドラインから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'は' ffmpeg.exe'の引数の一部ですか? – 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は処理するファイルです。

関連する問題