ffmpeg command working from command line but not f

2019-08-25 02:16发布

I'm trying to run the below command from within a Python script.

ffmpeg -y -loglevel verbose -i /var/www/Intro30.mp4 -i /var/www/temp/videoHD.mp4 -i /var/www/Credits30.mp4 -filter_complex '[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] concat=n=3:v=1:a=1 [v] [a]' -map '[v]' -map '[a]' /var/www/temp/merged.mp4

But it results in a corrupted file. This is the output.

ffmpeg version 3.3.4-2~16.04.york0 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
  configuration: --prefix=/usr --extra-version='2~16.04.york0' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libavresample   3.  5.  0 /  3.  5.  0
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100
[h264 @ 0x7f6d1ca0a7c0] Reinit context to 1920x1088, pix_fmt: yuv420p
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/var/www/Intro30.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
  Duration: 00:00:02.93, start: 0.000000, bitrate: 3490 kb/s
    Stream #0:0(und): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(left), 1920x1080 (1920x1088), 3507 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 2 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
[h264 @ 0x7f6d1ca334e0] Reinit context to 1920x1088, pix_fmt: yuv420p
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '/var/www/temp/videoHD.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
  Duration: 00:00:57.23, start: 0.000000, bitrate: 3087 kb/s
    Stream #1:0(eng): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(left), 1920x1080 (1920x1088), 2950 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #1:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
[h264 @ 0x7f6d1ca307a0] Reinit context to 1920x1088, pix_fmt: yuv420p
Input #2, mov,mp4,m4a,3gp,3g2,mj2, from '/var/www/Credits30.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
  Duration: 00:00:14.14, start: 0.000000, bitrate: 5706 kb/s
    Stream #2:0(und): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(left), 1920x1080 (1920x1088), 5711 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #2:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 2 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 (h264) -> concat:in0:v0
  Stream #0:1 (aac) -> concat:in0:a0
  Stream #1:0 (h264) -> concat:in1:v0
  Stream #1:1 (aac) -> concat:in1:a0
  Stream #2:0 (h264) -> concat:in2:v0
  Stream #2:1 (aac) -> concat:in2:a0
  concat:out:v0 -> Stream #0:0 (libx264)
  concat:out:a0 -> Stream #0:1 (aac)
Press [q] to stop, [?] for help
[h264 @ 0x7f6d1d1210e0] Reinit context to 1920x1088, pix_fmt: yuv420p
[h264 @ 0x7f6d1cc07420] Reinit context to 1920x1088, pix_fmt: yuv420p
[h264 @ 0x7f6d1cd449a0] Reinit context to 1920x1088, pix_fmt: yuv420p
[graph 0 input from stream 0:0 @ 0x7f6d1d8f9400] w:1920 h:1080 pixfmt:yuv420p tb:1/15360 fr:30/1 sar:0/1 sws_param:flags=2
[graph_0_in_0_1 @ 0x7f6d1d8ef520] tb:1/44100 samplefmt:fltp samplerate:44100 chlayout:0x3
[graph 0 input from stream 1:0 @ 0x7f6d1d1052a0] w:1920 h:1080 pixfmt:yuv420p tb:1/15360 fr:30/1 sar:0/1 sws_param:flags=2
[graph_0_in_1_1 @ 0x7f6d1d105ac0] tb:1/44100 samplefmt:fltp samplerate:44100 chlayout:0x3
[graph 0 input from stream 2:0 @ 0x7f6d1d17fd20] w:1920 h:1080 pixfmt:yuv420p tb:1/15360 fr:30/1 sar:0/1 sws_param:flags=2
[graph_0_in_2_1 @ 0x7f6d1d109d40] tb:1/44100 samplefmt:fltp samplerate:44100 chlayout:0x3
[libx264 @ 0x7f6d1ca9aaa0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x7f6d1ca9aaa0] profile High, level 4.0
[libx264 @ 0x7f6d1ca9aaa0] 264 - core 148 r2795 aaa9aa8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to '/var/www/temp/merged.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
    Stream #0:0: Video: h264 (libx264), 1 reference frame ([33][0][0][0] / 0x0021), yuv420p(progressive), 1920x1080, q=-1--1, 30 fps, 15360 tbn, 30 tbc (default)
    Metadata:
      encoder         : Lavc57.89.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1: Audio: aac (LC) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, delay 1024, 128 kb/s (default)
    Metadata:
      encoder         : Lavc57.89.100 aac
frame=   46 fps=0.0 q=0.0 size=       0kB time=00:00:01.62 bitrate=   0.0kbits/s speed=2.78x

But when I run it from the command line it executes perfectly.

ffmpeg version 3.3.4-2~16.04.york0 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
  configuration: --prefix=/usr --extra-version='2~16.04.york0' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libavresample   3.  5.  0 /  3.  5.  0
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100
[h264 @ 0x7f6dc62417c0] Reinit context to 1920x1088, pix_fmt: yuv420p
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/var/www/Intro30.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
  Duration: 00:00:02.93, start: 0.000000, bitrate: 3490 kb/s
    Stream #0:0(und): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(left), 1920x1080 (1920x1088), 3507 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 2 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
[h264 @ 0x7f6dc626a4e0] Reinit context to 1920x1088, pix_fmt: yuv420p
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '/var/www/temp/videoHD.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
  Duration: 00:00:57.23, start: 0.000000, bitrate: 3087 kb/s
    Stream #1:0(eng): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(left), 1920x1080 (1920x1088), 2950 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #1:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
[h264 @ 0x7f6dc62677a0] Reinit context to 1920x1088, pix_fmt: yuv420p
Input #2, mov,mp4,m4a,3gp,3g2,mj2, from '/var/www/Credits30.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
  Duration: 00:00:14.14, start: 0.000000, bitrate: 5706 kb/s
    Stream #2:0(und): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(left), 1920x1080 (1920x1088), 5711 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #2:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 2 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 (h264) -> concat:in0:v0
  Stream #0:1 (aac) -> concat:in0:a0
  Stream #1:0 (h264) -> concat:in1:v0
  Stream #1:1 (aac) -> concat:in1:a0
  Stream #2:0 (h264) -> concat:in2:v0
  Stream #2:1 (aac) -> concat:in2:a0
  concat:out:v0 -> Stream #0:0 (libx264)
  concat:out:a0 -> Stream #0:1 (aac)
Press [q] to stop, [?] for help
[h264 @ 0x7f6dc69580e0] Reinit context to 1920x1088, pix_fmt: yuv420p
[h264 @ 0x7f6dc643e420] Reinit context to 1920x1088, pix_fmt: yuv420p
[h264 @ 0x7f6dc657b9a0] Reinit context to 1920x1088, pix_fmt: yuv420p
[graph 0 input from stream 0:0 @ 0x7f6dc712fda0] w:1920 h:1080 pixfmt:yuv420p tb:1/15360 fr:30/1 sar:0/1 sws_param:flags=2
[graph_0_in_0_1 @ 0x7f6dc693c040] tb:1/44100 samplefmt:fltp samplerate:44100 chlayout:0x3
[graph 0 input from stream 1:0 @ 0x7f6dc693cb60] w:1920 h:1080 pixfmt:yuv420p tb:1/15360 fr:30/1 sar:0/1 sws_param:flags=2
[graph_0_in_1_1 @ 0x7f6dc69b68a0] tb:1/44100 samplefmt:fltp samplerate:44100 chlayout:0x3
[graph 0 input from stream 2:0 @ 0x7f6dc69b74a0] w:1920 h:1080 pixfmt:yuv420p tb:1/15360 fr:30/1 sar:0/1 sws_param:flags=2
[graph_0_in_2_1 @ 0x7f6dc6941460] tb:1/44100 samplefmt:fltp samplerate:44100 chlayout:0x3
[libx264 @ 0x7f6dc62d1aa0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x7f6dc62d1aa0] profile High, level 4.0
[libx264 @ 0x7f6dc62d1aa0] 264 - core 148 r2795 aaa9aa8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to '/var/www/temp/merged.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
    Stream #0:0: Video: h264 (libx264), 1 reference frame ([33][0][0][0] / 0x0021), yuv420p(progressive), 1920x1080, q=-1--1, 30 fps, 15360 tbn, 30 tbc (default)
    Metadata:
      encoder         : Lavc57.89.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1: Audio: aac (LC) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, delay 1024, 128 kb/s (default)
    Metadata:
      encoder         : Lavc57.89.100 aac
frame=   46 fps=0.0 q=0.0 size=       0kB time=00:00:01.62 bitrate=   0.0kbits/sframe=   64 fps= 59 q=29.0 size=     289kB time=00:00:02.22 bitrate=1062.4kbits/frame=   83 fps= 48 q=29.0 size=     762kB time=00:00:02.85 bitrate=2186.9kbits/[Parsed_concat_0 @ 0x7f6dc69b5ca0] EOF on in0:v0, 1 streams left in segment.
[Parsed_concat_0 @ 0x7f6dc69b5ca0] EOF on in0:a0, 0 streams left in segment.
[Parsed_concat_0 @ 0x7f6dc69b5ca0] Segment finished at pts=2902494
frame=  104 fps= 46 q=29.0 size=     908kB time=00:00:03.55 bitrate=2094.5kbits/frame=  123 fps= 44 q=29.0 size=    1048kB time=00:00:04.17 bitrate=2053.3kbits/frame=  140 fps= 42 q=29.0 size=    1215kB time=00:00:04.76 bitrate=2091.1kbits/frame=  149 fps= 38 q=29.0 size=    1374kB time=00:00:05.06 bitrate=2223.4kbits/frame=  161 fps= 35 q=29.0 size=    1528kB time=00:00:05.45 bitrate=2293.6kbits/frame=  173 fps= 34 q=29.0 size=    1695kB time=00:00:05.82 bitrate=2382.5kbits/frame=  180 fps= 32 q=29.0 size=    1784kB time=00:00:06.08 bitrate=2402.4kbits/frame=  193 fps= 32 q=29.0 size=    1959kB time=00:00:06.50 bitrate=2468.6kbits/frame=  200 fps= 30 q=29.0 size=    2052kB time=00:00:06.75 bitrate=2487.8kbits/frame=  211 fps= 30 q=29.0 size=    2221kB time=00:00:07.12 bitrate=2552.6kbits/frame=  221 fps= 29 q=29.0 size=    2303kB time=00:00:07.45 bitrate=2530.9kbits/frame=  232 fps= 28 q=29.0 size=    2433kB time=00:00:07.82 bitrate=2547.0kbits/frame=  245 fps= 28 q=29.0 size=    2560kB time=00:00:08.26 bitrate=2536.7kbits/frame=  255 fps= 28 q=29.0 size=    2684kB time=00:00:08.59 bitrate=2558.9kbits/frame=  264 fps= 27 q=29.0 size=    2776kB time=00:00:08.89 bitrate=2557.5kbits/frame=  275 fps= 27 q=29.0 size=    2894kB time=00:00:09.26 bitrate=2559.0kbits/frame=  285 fps= 26 q=29.0 size=    3028kB time=00:00:09.58 bitrate=2586.3kbits/frame=  295 fps= 26 q=29.0 size=    3172kB time=00:00:09.91 bitrate=2621.2kbits/frame=  303 fps= 25 q=29.0 size=    3277kB time=00:00:10.19 bitrate=2633.9kbits/frame=  314 fps= 25 q=29.0 size=    3475kB time=00:00:10.56 bitrate=2694.1kbits/frame=  322 fps= 24 q=29.0 size=    3584kB time=00:00:10.82 bitrate=2713.7kbits/frame=  330 fps= 24 q=29.0 size=    3694kB time=00:00:11.09 bitrate=2726.3kbits/frame=  336 fps= 24 q=29.0 size=    3774kB time=00:00:11.30 bitrate=2733.9kbits/frame=  344 fps= 23 q=29.0 size=    3882kB time=00:00:11.56 bitrate=2750.3kbits/frame=  353 fps= 23 q=29.0 size=    4016kB time=00:00:11.86 bitrate=2772.5kbits/frame=  363 fps= 23 q=29.0 size=    4165kB time=00:00:12.19 bitrate=2798.7kbits/frame=  371 fps= 22 q=29.0 size=    4263kB time=00:00:12.46 bitrate=2800.6kbits/frame=  381 fps= 22 q=29.0 size=    4429kB time=00:00:12.79 bitrate=2835.7kbits/frame=  388 fps= 22 q=29.0 size=    4557kB time=00:00:13.02 bitrate=2865.6kbits/frame=  397 fps= 22 q=29.0 size=    4678kB time=00:00:13.32 bitrate=2875.5kbits/frame=  406 fps= 22 q=29.0 size=    4773kB time=00:00:13.63 bitrate=2868.5kbits/frame=  414 fps= 21 q=29.0 size=    4871kB time=00:00:13.88 bitrate=2873.6kbits/frame=  419 fps= 21 q=29.0 size=    4954kB time=00:00:14.04 bitrate=2888.6kbits/frame=  427 fps= 21 q=29.0 size=    5046kB time=00:00:14.32 bitrate=2885.1kbits/frame=  435 fps= 21 q=29.0 size=    5141kB time=00:00:14.58 bitrate=2888.2kbits/frame=  443 fps= 21 q=29.0 size=    5232kB time=00:00:14.86 bitrate=2884.1kbits/frame=  452 fps= 20 q=29.0 size=    5333kB time=00:00:15.16 bitrate=2881.5kbits/frame=  463 fps= 20 q=29.0 size=    5442kB time=00:00:15.53 bitrate=2869.9kbits/frame=  472 fps= 20 q=29.0 size=    5552kB time=00:00:15.81 bitrate=2876.5kbits/frame=  479 fps= 20 q=29.0 size=    5663kB time=00:00:16.06 bitrate=2887.2kbits/frame=  489 fps= 20 q=29.0 size=    5798kB time=00:00:16.39 bitrate=2897.4kbits/frame=  499 fps= 20 q=29.0 size=    5918kB time=00:00:16.71 bitrate=2899.9kbits/frame=  509 fps= 20 q=29.0 size=    6043kB time=00:00:17.06 bitrate=2900.5kbits/frame=  521 fps= 20 q=29.0 size=    6191kB time=00:00:17.46 bitrate=2904.7kbits/frame=  533 fps= 20 q=29.0 size=    6304kB time=00:00:17.85 bitrate=2892.0kbits/frame=  542 fps= 20 q=29.0 size=    6391kB time=00:00:18.15 bitrate=2883.5kbits/frame=  553 fps= 20 q=29.0 size=    6525kB time=00:00:18.52 bitrate=2884.9kbits/frame=  563 fps= 20 q=29.0 size=    6635kB time=00:00:18.85 bitrate=2882.8kbits/frame=  573 fps= 20 q=29.0 size=    6740kB time=00:00:19.17 bitrate=2878.9kbits/frame=  585 fps= 20 q=29.0 size=    6868kB time=00:00:19.59 bitrate=2870.8kbits/frame=  595 fps= 20 q=29.0 size=    6986kB time=00:00:19.92 bitrate=2872.6kbits/frame=  606 fps= 20 q=29.0 size=    7095kB time=00:00:20.29 bitrate=2864.1kbits/frame=  617 fps= 20 q=29.0 size=    7237kB time=00:00:20.66 bitrate=2868.8kbits/frame=  629 fps= 20 q=29.0 size=    7452kB time=00:00:21.06 bitrate=2898.8kbits/frame=  639 fps= 20 q=29.0 size=    7566kB time=00:00:21.38 bitrate=2898.1kbits/frame=  647 fps= 20 q=29.0 size=    7684kB time=00:00:21.66 bitrate=2905.7kbits/frame=  657 fps= 20 q=29.0 size=    7807kB time=00:00:21.98 bitrate=2908.3kbits/frame=  667 fps= 20 q=29.0 size=    7919kB time=00:00:22.31 bitrate=2907.3kbits/frame=  677 fps= 20 q=29.0 size=    8046kB time=00:00:22.66 bitrate=2908.3kbits/frame=  687 fps= 20 q=29.0 size=    8156kB time=00:00:22.98 bitrate=2906.7kbits/frame=  699 fps= 20 q=29.0 size=    8294kB time=00:00:23.38 bitrate=2905.9kbits/frame=  711 fps= 20 q=29.0 size=    8414kB time=00:00:23.80 bitrate=2896.2kbits/frame=  722 fps= 20 q=29.0 size=    8510kB time=00:00:24.14 bitrate=2887.0kbits/frame=  733 fps= 20 q=29.0 size=    8630kB time=00:00:24.52 bitrate=2883.1kbits/frame=  745 fps= 20 q=29.0 size=    8751kB time=00:00:24.91 bitrate=2877.3kbits/frame=  756 fps= 20 q=29.0 size=    8857kB time=00:00:25.28 bitrate=2869.5kbits/frame=  766 fps= 20 q=29.0 size=    8979kB time=00:00:25.63 bitrate=2869.5kbits/frame=  777 fps= 20 q=29.0 size=    9088kB time=00:00:25.98 bitrate=2865.3kbits/frame=  787 fps= 20 q=29.0 size=    9187kB time=00:00:26.33 bitrate=2858.1kbits/frame=  798 fps= 20 q=29.0 size=    9308kB time=00:00:26.67 bitrate=2858.0kbits/frame=  808 fps= 20 q=29.0 size=    9400kB time=00:00:27.02 bitrate=2849.1kbits/frame=  820 fps= 20 q=29.0 size=    9554kB time=00:00:27.42 bitrate=2854.2kbits/frame=  830 fps= 20 q=29.0 size=    9662kB time=00:00:27.74 bitrate=2852.4kbits/frame=  842 fps= 20 q=29.0 size=    9778kB time=00:00:28.16 bitrate=2843.9kbits/frame=  854 fps= 20 q=29.0 size=    9886kB time=00:00:28.56 bitrate=2835.6kbits/frame=  864 fps= 20 q=29.0 size=    9992kB time=00:00:28.88 bitrate=2833.9kbits/frame=  876 fps= 20 q=29.0 size=   10112kB time=00:00:29.28 bitrate=2829.2kbits/frame=  889 fps= 19 q=29.0 size=   21309kB time=00:00:58.00 bitrate=3009.5kbits/frame= 1750 fps= 19 q=29.0 size=   21427kB time=00:00:58.42 bitrate=3004.5kbits/frame= 1761 fps= 19 q=29.0 size=   21553kB time=00:00:58.79 bitrate=3003.1kbits/frame= 1771 fps= 19 q=29.0 size=   21669kB time=00:00:59.11 bitrate=3002.7kbits/frame= 1783 fps= 19 q=29.0 size=   21787kB time=00:00:59.51 bitrate=2999.0kbits/frame= 1793 fps= 19 q=29.0 size=   21902kB time=00:00:59.86 bitrate=2997.3kbits/[Parsed_concat_0 @ 0x7f6dc69b5ca0] EOF on in1:v0, 1 streams left in segment.
[Parsed_concat_0 @ 0x7f6dc69b5ca0] EOF on in1:a0, 0 streams left in segment.
[Parsed_concat_0 @ 0x7f6dc69b5ca0] Segment finished at pts=60135827
frame= 1805 fps= 19 q=29.0 size=   21990kB time=00:01:00.23 bitrate=2990.7kbits/frame= 1816 fps= 19 q=29.0 size=   22117kB time=00:01:00.60 bitrate=2989.6kbits/frame= 1830 fps= 19 q=29.0 size=   bitrate=3521.1kbits/frame= 2194 fps= 19 q=29.0 size=   31450kB time=00:01:13.21 bitrate=3519.0kbits/frame= 2213 fps= 19 q=29.0 size=   31591kB time=00:01:13.83 bitrate=3504.9kbits/[Parsed_concat_0 @ 0x7f6dc69b5ca0] EOF on in2:v0, 1 streams left in segment.
[Parsed_concat_0 @ 0x7f6dc69b5ca0] EOF on in2:a0, 0 streams left in segment.
[Parsed_concat_0 @ 0x7f6dc69b5ca0] Segment finished at pts=74253559
No more output streams to write to, finishing.
frame= 2227 fps= 19 q=-1.0 Lsize=   32179kB time=00:01:14.25 bitrate=3549.9kbits/s speed=0.633x    
video:31198kB audio:901kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.247438%
Input file #0 (/var/www/Intro30.mp4):
  Input stream #0:0 (video): 87 packets read (1271526 bytes); 87 frames decoded; 
  Input stream #0:1 (audio): 126 packets read (773 bytes); 125 frames decoded (128000 samples); 
  Total: 213 packets (1272299 bytes) demuxed
Input file #1 (/var/www/temp/videoHD.mp4):
  Input stream #1:0 (video): 1717 packets read (21108999 bytes); 1717 frames decoded; 
  Input stream #1:1 (audio): 2464 packets read (918725 bytes); 2463 frames decoded (2522112 samples); 
  Total: 4181 packets (22027724 bytes) demuxed
Input file #2 (/var/www/Credits30.mp4):
  Input stream #2:0 (video): 423 packets read (10066322 bytes); 423 frames decoded; 
  Input stream #2:1 (audio): 609 packets read (3705 bytes); 608 frames decoded (622592 samples); 
  Total: 1032 packets (10070027 bytes) demuxed
Output file #0 (/var/www/temp/merged.mp4):
  Output stream #0:0 (video): 2227 frames encoded; 2227 packets muxed (31946574 bytes); 
  Output stream #0:1 (audio): 3198 frames encoded (3274582 samples); 3199 packets muxed (923102 bytes); 
  Total: 5426 packets (32869676 bytes) muxed
[libx264 @ 0x7f6dc62d1aa0] frame I:19    Avg QP:18.19  size:110490
[libx264 @ 0x7f6dc62d1aa0] frame P:851   Avg QP:21.97  size: 23670
[libx264 @ 0x7f6dc62d1aa0] frame B:1357  Avg QP:25.31  size:  7150
[libx264 @ 0x7f6dc62d1aa0] consecutive B-frames:  3.1% 44.8%  6.1% 46.0%
[libx264 @ 0x7f6dc62d1aa0] mb I  I16..4: 31.3% 59.2%  9.6%
[libx264 @ 0x7f6dc62d1aa0] mb P  I16..4:  4.5% 11.6%  0.7%  P16..4: 40.9%  8.2%  2.5%  0.0%  0.0%    skip:31.6%
[libx264 @ 0x7f6dc62d1aa0] mb B  I16..4:  0.5%  1.2%  0.2%  B16..8: 28.5%  2.0%  0.2%  direct: 1.0%  skip:66.3%  L0:42.2% L1:55.1% BI: 2.8%
[libx264 @ 0x7f6dc62d1aa0] 8x8 transform intra:67.4% inter:89.6%
[libx264 @ 0x7f6dc62d1aa0] coded y,uvDC,uvAC intra: 39.8% 43.5% 4.0% inter: 7.8% 12.4% 0.1%
[libx264 @ 0x7f6dc62d1aa0] i16 v,h,dc,p: 25% 33% 18% 24%
[libx264 @ 0x7f6dc62d1aa0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 23% 24% 25%  3%  5%  5%  6%  4%  5%
[libx264 @ 0x7f6dc62d1aa0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 30% 14%  5%  6%  5%  6%  4%  7%
[libx264 @ 0x7f6dc62d1aa0] i8c dc,h,v,p: 58% 20% 17%  4%
[libx264 @ 0x7f6dc62d1aa0] Weighted P-Frames: Y:0.8% UV:0.2%
[libx264 @ 0x7f6dc62d1aa0] ref P L0: 73.9% 12.2% 11.3%  2.7%  0.0%
[libx264 @ 0x7f6dc62d1aa0] ref B L0: 92.1%  6.8%  1.1%
[libx264 @ 0x7f6dc62d1aa0] ref B L1: 98.4%  1.6%
[libx264 @ 0x7f6dc62d1aa0] kb/s:3442.75
[aac @ 0x7f6dc62dd100] Qavg: 18520.436

Some lines removed to keep under the line limit.

Here is the python method I use to execute the ffmpeg lines.

def ffmpeg(args):
    err = None
    command = [
        ffmpegcmd, '-y',
        '-loglevel', loglevel
    ] + args
    ffmpeg = subprocess.Popen(command, stderr=subprocess.PIPE ,stdout=subprocess.PIPE, universal_newlines=True)
    while err == None:
        out, err = ffmpeg.communicate()
        time.sleep(1)
    if err:
        print(" ".join(command))
        raise Exception(err)

*Edit

When ever I need to use a command that requires single quotes around the arguments i.e. '[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] concat=n=3:v=1:a=1 [v] [a]' the above function wouldn't work. So I made another function for those case which deals with the command as a string. Here is is.

def ffmpegStr(args):
    err = None
    command = [
        ffmpegcmd, '-y',
        '-loglevel', loglevel
    ] + args
    commandStr = " ".join(command)
    print(commandStr)
    ffmpeg = subprocess.Popen(shlex.split(commandStr), stderr=subprocess.PIPE ,stdout=subprocess.PIPE, universal_newlines=True)
    while err == None:
        out, err = ffmpeg.communicate()
        time.sleep(1)
    if err:
        print(commandStr)
        raise Exception(err)

As you can see I've added a print to see what is being handed to the subprocess.Popen function. This is the method that is being used when the ffmpeg command does not run as expected.

I use ffmpegcmd as a variable so that I can change the ffmpeg version if needed in both functions with 1 change.

The args is just the list of arguments specific to what I want ffmpeg to do.

I also like to have the option of changing the loglevel in both functions with 1 line and so use a variable for this.

*End Edit

Why the difference in how it is handled?

Cheers,

Stu

标签: python ffmpeg
1条回答
smile是对你的礼貌
2楼-- · 2019-08-25 03:01

You should not include the single quotes in the arguments. When you run it from the command line, ffmpeg does not see the single quotes. The shell sees them and understands that everything between the single quotes must be taken as a single argument, so when it executes ffmpeg it hands it that single argument without the single quotes.

To match what you're running on the command line, you want:

args = ["-i", "/var/www/Intro30.mp4",
        "-i", "/var/www/temp/videoHD.mp4",
        "-i", "/var/www/Credits30.mp4",
        "-filter_complex", "[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] concat=n=3:v=1:a=1 [v] [a]",
        "-map", "[v]",
        "-map", "[a]",
        "/var/www/temp/merged.mp4"]
ffmpeg(args)

To demonstrate, create a fake ffmpeg command and test it:

$ vi /tmp/ffmpeg
$ chmod 755 /tmp/ffmpeg
$ cat /tmp/ffmpeg
#!/bin/bash

# Fake ffmpeg
COUNT=0
for arg; do
    echo "arg $COUNT: $arg"
    COUNT=$((COUNT+1))
done

Now run the fake ffmpeg with an argument that you would normally wrap in single quotes:

$ /tmp/ffmpeg -map '[v]'
arg 0: -map
arg 1: [v]

Note that ffmpeg does not see the single quotes.

Now try it from Python:

$ python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> import time
>>> def ffmpeg(args):
...     err = None
...     command = ["/tmp/ffmpeg"] + args
...     ffmpeg = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE, universal_newlines=True)
...     while err == None:
...         out, err = ffmpeg.communicate()
...         time.sleep(1)
...     if err:
...         print(" ".join(command))
...         raise Exception(err)
...     print(out)
... 
>>> ffmpeg(["-map", "'[v]'"])
arg 0: -map
arg 1: '[v]'

>>> ffmpeg(["-map", "[v]"])
arg 0: -map
arg 1: [v]

>>> 

Note that when ffmpeg() was called with the single quotes, the fake ffmpeg did see the single quotes.

But when ffmpeg() was called without the single quotes, the fake ffmpeg did not see them, just like when it was run from the command line.

查看更多
登录 后发表回答