2017-06-21 5 views
-5

ffmpegを使用して2つのビデオを並行してマージしようとしています。各ビデオのサイズが1MB未満であれば正常に動作しています.1MBの変換プロセスを超えると無限の時間がかかります。それを速くする方法がありますか、私はコマンドラインを変更する必要があります。ここでは、ここで2つのビデオをC#で並行してマージする大きなファイルで作業しない

ProcessStartInfo proce = new ProcessStartInfo("ffmpeg.exe"); 
     proce.WorkingDirectory = @"d:\vid"; 
     Process p = Process.Start(proce); 
     string wavefilep = @"D:\vid\camVid1.avi"; 
     string videop = @"D:\vid\DeskCamVid1.avi"; 
     string fileout = @"D:\vid\OutPut123.avi"; 
     System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
     try 
     { 

      proc.StartInfo.Arguments = string.Format(" -i {0} -i {1} -filter_complex \"[0:v:0]pad=iw*4:iw[bg]; [bg][1:v:0] overlay=h\" {2}",wavefilep,videop,fileout); 

      proc.StartInfo.UseShellExecute = false; 
      proc.StartInfo.CreateNoWindow = false; 
      proc.StartInfo.RedirectStandardOutput = true; 
      proc.StartInfo.RedirectStandardError = true; 
      proc.StartInfo.FileName = @"d:\vid\ffmpeg.exe"; 
      proc.Start(); 
      string StdOutVideo = proc.StandardOutput.ReadToEnd(); 
      string StdErrVideo = proc.StandardError.ReadToEnd(); 
      MessageBox.Show(" video done"); 

をしようとしているスニペットでは、動画ここ

-i vidoe1.avi -i video2.avi -filter_complex "[0:v:0]pad=iw*2:ih[bg]; [bg][1:v:0]overlay=3*w" output.avi 

をマージして使用していますコマンドでのffmpegの出力ログには、私はそれがこのフレームで

ffmpeg version N-86482-gbc40674 Copyright (c) 2000-2017 the FFmpeg developers 
    built with gcc 7.1.0 (GCC) 
    configuration: --enable-gpl --enable-version3 --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-zlib 
    libavutil  55. 66.100/55. 66.100 
    libavcodec  57. 99.100/57. 99.100 
    libavformat 57. 73.100/57. 73.100 
    libavdevice 57. 7.100/57. 7.100 
    libavfilter  6. 92.100/6. 92.100 
    libswscale  4. 7.101/4. 7.101 
    libswresample 2. 8.100/2. 8.100 
    libpostproc 54. 6.100/54. 6.100 
Input #0, avi, from 'd:\vid\camVid1.avi': 
    Metadata: 
    encoder   : Lavf57.56.100 
    Duration: 00:01:49.64, start: 0.000000, bitrate: 347 kb/s 
    Stream #0:0: Video: mpeg4 (Simple Profile) (FMP4/0x34504D46), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 342 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc 
Input #1, avi, from 'd:\vid\DeskCamVid1.avi': 
    Metadata: 
    encoder   : Lavf57.56.100 
    Duration: 00:01:48.80, start: 0.000000, bitrate: 427 kb/s 
    Stream #1:0: Video: mpeg4 (Simple Profile) (FMP4/0x34504D46), yuv420p, 1366x768 [SAR 1:1 DAR 683:384], 422 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc 
File 'd:\vid\outap.avi' already exists. Overwrite ? [y/N] Stream mapping: 
    Stream #0:0 (mpeg4) -> pad 
    Stream #1:0 (mpeg4) -> overlay:overlay 
    overlay -> Stream #0:0 (mpeg4) 
Press [q] to stop, [?] for help 
Output #0, avi, to 'd:\vid\outap.avi': 
    Metadata: 
    ISFT   : Lavf57.73.100 
    Stream #0:0: Video: mpeg4 (FMP4/0x34504D46), yuv420p, 2560x640 [SAR 1:1 DAR 4:1], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc (default) 
    Metadata: 
     encoder   : Lavc57.99.100 mpeg4 
    Side data: 
     cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1 
frame= 28 fps=0.0 q=31.0 size=  325kB time=00:00:03.60 bitrate= 740.3kbits/s speed=7.12x  
frame= 59 fps= 59 q=31.0 size=  416kB time=00:00:07.72 bitrate= 441.8kbits/s speed=7.67x  
frame= 90 fps= 60 q=31.0 size=  536kB time=00:00:11.84 bitrate= 370.8kbits/s speed=7.85x  
frame= 121 fps= 60 q=24.8 size=  661kB time=00:00:15.96 bitrate= 339.5kbits/s speed= 7.9x  
frame= 152 fps= 60 q=31.0 size=  762kB time=00:00:20.08 bitrate= 310.9kbits/s speed=7.96x  
frame= 183 fps= 61 q=31.0 size=  883kB time=00:00:24.20 bitrate= 299.0kbits/s speed= 8x  
frame= 215 fps= 61 q=31.0 size=  974kB time=00:00:28.44 bitrate= 280.6kbits/s speed=8.05x  
frame= 246 fps= 61 q=31.0 size= 1100kB time=00:00:32.56 bitrate= 276.8kbits/s speed=8.05x  
frame= 278 fps= 61 q=31.0 size= 1234kB time=00:00:36.80 bitrate= 274.6kbits/s speed=8.08x  
frame= 310 fps= 61 q=31.0 size= 1327kB time=00:00:41.08 bitrate= 264.6kbits/s speed=8.13x  
frame= 340 fps= 61 q=31.0 size= 1439kB time=00:00:45.04 bitrate= 261.7kbits/s speed=8.11x  
frame= 371 fps= 61 q=31.0 size= 1525kB time=00:00:49.16 bitrate= 254.1kbits/s speed=8.11x  
frame= 403 fps= 61 q=31.0 size= 1639kB time=00:00:53.44 bitrate= 251.2kbits/s speed=8.13x  
frame= 434 fps= 61 q=31.0 size= 1753kB time=00:00:57.56 bitrate= 249.5kbits/s speed=8.14x  
frame= 466 fps= 61 q=31.0 size= 1845kB time=00:01:01.80 bitrate= 244.6kbits/s speed=8.16x  
frame= 497 fps= 61 q=31.0 size= 1958kB time=00:01:05.92 bitrate= 243.3kbits/s speed=8.15x 
を突っ込んアプリケーションを実行するたびです
+1

あなたの質問は何ですか? – rene

+1

ファイルを通常(コマンドラインから)変換してみてください。それが遅い場合でも、ffmpegコードベースに貢献する以外には何もできません。 –

+2

コマンドラインツールを起動しているだけなので、ツールのドキュメントまたはサポートを参照して問題を解決する必要があります。これはプログラミングの問題ではなく、ツールです。 –

答えて

0

私は自分の質問に答えるつもりはありません。 ffmpegコマンドに何も問題はありませんが、ffmpeg.exeを呼び出すプロセスコードの少しの変更が私の問題を解決しました。私はffmpegのの出力と出力のログを取得するためのプロセスの真にRedirectStandardOutput & RedirectStandardErrorを設定

string wavefilep = @"D:\vid\camVid1.avi"; 
    string videop = @"D:\vid\DeskCamVid1.avi"; 
    string fileout = @"D:\vid\OutPut123.avi"; 
    System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
    try 
    { 

     proc.StartInfo.Arguments = string.Format(" -i {0} -i {1} -filter_complex \"[0:v:0]pad=iw*4:iw[bg]; [bg][1:v:0] overlay=h\" {2}",wavefilep,videop,fileout); 

     proc.StartInfo.UseShellExecute = false; 
     proc.StartInfo.CreateNoWindow = true; 
     proc.StartInfo.FileName = @"d:\vid\ffmpeg.exe"; 
     proc.StartInfo.WindowsStyle=ProcessWindowStyle.Hidden; 
     proc.Start(); 
     MessageBox.Show(" video done"); 

それが出力を読むために無限の時間がかかるように、これは大規模なビデオファイルのための凍結問題が発生します。私たちがffmpegを使って作業しているなら、これら2つのステートメントは必要ないと思います。

関連する問題