python - ffmpeg 命令从命令行工作,但不能从 python subprocess.Popen

标签 python ffmpeg

我正在尝试从 Python 脚本中运行以下命令。

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

但它会导致文件损坏。这是输出。
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

但是当我从命令行运行它时,它会完美执行。
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

删除了一些行以保持在行限制之下。

这是我用来执行 ffmpeg 行的 python 方法。
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)

*编辑

每当我需要使用需要在参数周围加上单引号的命令时,即 '[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] concat=n=3:v=1:a=1 [v] [a]'上面的功能不起作用。所以我为那些将命令作为字符串处理的情况创建了另一个函数。这里是。
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)

正如你所看到的,我添加了一个打印来查看传递给 subprocess.Popen 函数的内容。这是 ffmpeg 命令未按预期运行时使用的方法。

我使用 ffmpegcmd 作为变量,以便我可以在需要时在两个函数中更改 ffmpeg 版本,只需进行 1 次更改。

args 只是我希望 ffmpeg 执行的特定参数列表。

我还喜欢选择用 1 行更改两个函数中的日志级别,因此为此使用变量。

*结束编辑

为什么处理方式不同?

干杯,

斯图

最佳答案

您不应在参数中包含单引号。从命令行运行它时,ffmpeg没有看到单引号。 shell 看到它们并理解单引号之间的所有内容都必须作为单个参数,所以当它执行时 ffmpeg它将没有单引号的单个参数交给它。

要匹配您在命令行上运行的内容,您需要:

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)

为了演示,创建一个假的 ffmpeg命令并测试它:
$ 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

现在运行假的ffmpeg有一个你通常会包装的论点
在单引号中:
$ /tmp/ffmpeg -map '[v]'
arg 0: -map
arg 1: [v]

请注意 ffmpeg没有看到单引号。

现在从 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]

>>> 

请注意,当 ffmpeg()用单引号调用,假的ffmpeg确实看到了单引号。

但是当ffmpeg()被调用时没有单引号,假的 ffmpeg没有看到它们,就像从命令行运行时一样。

关于python - ffmpeg 命令从命令行工作,但不能从 python subprocess.Popen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47120202/

相关文章:

python - 有没有办法在 Django 中为内联管理表单设置单独的页面?

python - Python if语句在使用负 float 时给出错误

python - 第一层的 Keras 权重没有改变

android - 在FFmpeg for Android中解码AAC

c++ - ffmpeg 将无效的 fps 写入 mp4 容器(在 avi 中它是真的)。是什么原因?

python - Pandas 滚动窗口百分位排名

python - 为什么Python允许抽象方法有代码?

linux - ubuntu上仍然无法安装pygame

video - FFMPEG 批处理中的多个步骤

video - Windows中的ffmpeg关键帧提取