FFMPEG进程在通过python3 subprocess.Popen执行时被杀死并引发返回码137,但从命令行

时间:2017-11-22 04:27:16

标签: python python-3.x ffmpeg subprocess popen

我不确定这是否是解决此问题的最佳方法,但我还有另一个问题here,我认为这个问题没有得到很好的解答(或者更多的是我意识到实际问题并有一个更简单的方式寻求帮助)。如果你能回答这个问题,你就可以得到对方的答案。

我正在使用python 3.5.2ffmpeg 3.3.4-2并使用此功能运行我的ffmpeg命令:

def ffmpegPro(args):
    err = None
    for i, arg in enumerate(args):
        if(" " in arg or "(" in arg or "[" in arg):
            args[i] = "\"" + arg + "\""
    command = [
        ffmpegcmd, '-y',
        '-loglevel', loglevel
    ] + args
    commandStr = " ".join(command)
    ffmpeg = subprocess.Popen(commandStr, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE, universal_newlines=True, shell=True)
    out, err = ffmpeg.communicate()
    if ffmpeg.returncode != 0:
        print(commandStr + "\n" + "ERROR CODE: " + str(ffmpeg.returncode))
        raise Exception(err)

当我通过以下args时,returncode137且流程为Killed。这只发生在python中执行时,当我按照预期执行的command line运行相同的命令时。

['-i', '/var/www/temp/film.mp4', '-vf', 'scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:x=(1920-iw)/2:y=(1080-ih)/2:color=black', '/var/www/temp/videoHD.mp4']

结果命令是:

ffmpeg -y -loglevel verbose -i /var/www/temp/film.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:x=(1920-iw)/2:y=(1080-ih)/2:color=black" /var/www/temp/videoHD.mp4

通过python执行时:

ERROR CODE: 137
Traceback (most recent call last):
  File "getInsta2.py", line 740, in <module>
    populate(media_feed, last, saved)
  File "getInsta2.py", line 679, in populate
    videoPost(media, hasVids, thisSaved)
  File "getInsta2.py", line 639, in videoPost
    processVideo(film, final, noMusic, audios, lengths)
  File "getInsta2.py", line 358, in processVideo
    ffmpegPro(args)
  File "getInsta2.py", line 170, in ffmpegPro
    raise Exception(err)
Exception: 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 @ 0x7fa3db55a560] Reinit context to 640x368, pix_fmt: yuv420p
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/var/www/temp/film.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
  Duration: 00:06:19.80, start: 0.000000, bitrate: 451 kb/s
    Stream #0:0(und): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(left), 640x358 (640x368), 313 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[h264 @ 0x7fa3db59c700] Reinit context to 640x368, pix_fmt: yuv420p
[graph_1_in_0_1 @ 0x7fa3db7115e0] tb:1/48000 samplefmt:fltp samplerate:48000 chlayout:0x3
[Parsed_scale_0 @ 0x7fa3db72e000] w:1920 h:1080 flags:'bicubic' interl:0
[graph 0 input from stream 0:0 @ 0x7fa3db72f6a0] w:640 h:358 pixfmt:yuv420p tb:1/15360 fr:30/1 sar:0/1 sws_param:flags=2
[Parsed_scale_0 @ 0x7fa3db72e000] w:640 h:358 fmt:yuv420p sar:0/1 -> w:1920 h:1074 fmt:yuv420p sar:0/1 flags:0x4
[Parsed_pad_1 @ 0x7fa3db72eac0] w:1920 h:1074 -> w:1920 h:1080 x:0 y:2 color:0x000000FF
[libx264 @ 0x7fa3db7309e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x7fa3db7309e0] profile High, level 4.0
[libx264 @ 0x7fa3db7309e0] 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/videoHD.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
    Stream #0:0(und): Video: h264 (libx264), 1 reference frame ([33][0][0][0] / 0x0021), yuv420p(left), 1920x1080, q=-1--1, 30 fps, 15360 tbn, 30 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      encoder         : Lavc57.89.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1(und): Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, delay 1024, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      encoder         : Lavc57.89.100 aac
Killed

注意最后的Killed。这发生在任何处理开始之前。

但是当从command line运行(剪切并粘贴代码输出的命令)时,我们得到:

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 @ 0x7f68c918f560] Reinit context to 640x368, pix_fmt: yuv420p
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/var/www/temp/film.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
  Duration: 00:06:19.80, start: 0.000000, bitrate: 451 kb/s
    Stream #0:0(und): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(left), 640x358 (640x368), 313 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[h264 @ 0x7f68c91d1700] Reinit context to 640x368, pix_fmt: yuv420p
[graph_1_in_0_1 @ 0x7f68c93465e0] tb:1/48000 samplefmt:fltp samplerate:48000 chlayout:0x3
[Parsed_scale_0 @ 0x7f68c9363000] w:1920 h:1080 flags:'bicubic' interl:0
[graph 0 input from stream 0:0 @ 0x7f68c93646a0] w:640 h:358 pixfmt:yuv420p tb:1/15360 fr:30/1 sar:0/1 sws_param:flags=2
[Parsed_scale_0 @ 0x7f68c9363000] w:640 h:358 fmt:yuv420p sar:0/1 -> w:1920 h:1074 fmt:yuv420p sar:0/1 flags:0x4
[Parsed_pad_1 @ 0x7f68c9363ac0] w:1920 h:1074 -> w:1920 h:1080 x:0 y:2 color:0x000000FF
[libx264 @ 0x7f68c93659e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x7f68c93659e0] profile High, level 4.0
[libx264 @ 0x7f68c93659e0] 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/videoHD.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
    Stream #0:0(und): Video: h264 (libx264), 1 reference frame ([33][0][0][0] / 0x0021), yuv420p(left), 1920x1080, q=-1--1, 30 fps, 15360 tbn, 30 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      encoder         : Lavc57.89.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1(und): Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, delay 1024, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      encoder         : Lavc57.89.100 aac
frame=   46 fps=0.0 q=0.0 size=       0kB time=00:00:01.62 bitrate=   0.0kbits/s
frame=   59 fps= 46 q=29.0 size=     116kB time=00:00:02.04 bitrate= 464.8kbits/
frame=   72 fps= 40 q=29.0 size=     203kB time=00:00:02.49 bitrate= 667.2kbits/
frame=   84 fps= 36 q=29.0 size=     308kB time=00:00:02.88 bitrate= 875.9kbits/
    Blah
    Blah
    Blah
frame=11351 fps= 21 q=26.0 size=   97572kB time=00:06:18.45 bitrate=2112.1kbits/
frame=11367 fps= 21 q=29.0 size=   97732kB time=00:06:18.98 bitrate=2112.5kbits/
frame=11384 fps= 22 q=29.0 size=   97809kB time=00:06:19.56 bitrate=2111.0kbits/
No more output streams to write to, finishing.
frame=11392 fps= 21 q=-1.0 Lsize=   98519kB time=00:06:19.77 bitrate=2125.1kbits/s speed=0.715x    
video:92124kB audio:5986kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.416313%
Input file #0 (/var/www/temp/film.mp4):
  Input stream #0:0 (video): 11392 packets read (14892948 bytes); 11392 frames decoded; 
  Input stream #0:1 (audio): 17803 packets read (6112540 bytes); 17802 frames decoded (18229248 samples); 
  Total: 29195 packets (21005488 bytes) demuxed
Output file #0 (/var/www/temp/videoHD.mp4):
  Output stream #0:0 (video): 11392 frames encoded; 11392 packets muxed (94334785 bytes); 
  Output stream #0:1 (audio): 17802 frames encoded (18229248 samples); 17803 packets muxed (6129981 bytes); 
  Total: 29195 packets (100464766 bytes) muxed
[libx264 @ 0x7f68c93659e0] frame I:74    Avg QP:19.08  size: 51540
[libx264 @ 0x7f68c93659e0] frame P:3506  Avg QP:21.34  size: 19348
[libx264 @ 0x7f68c93659e0] frame B:7812  Avg QP:24.07  size:  2904
[libx264 @ 0x7f68c93659e0] consecutive B-frames:  1.3% 20.2%  4.6% 73.9%
[libx264 @ 0x7f68c93659e0] mb I  I16..4: 19.7% 73.6%  6.7%
[libx264 @ 0x7f68c93659e0] mb P  I16..4:  3.2%  6.4%  0.1%  P16..4: 52.5%  7.6%  2.6%  0.0%  0.0%    skip:27.6%
[libx264 @ 0x7f68c93659e0] mb B  I16..4:  0.2%  0.2%  0.0%  B16..8: 23.2%  0.4%  0.0%  direct: 0.5%  skip:75.5%  L0:51.8% L1:46.6% BI: 1.6%
[libx264 @ 0x7f68c93659e0] 8x8 transform intra:66.4% inter:94.0%
[libx264 @ 0x7f68c93659e0] coded y,uvDC,uvAC intra: 33.6% 53.4% 7.3% inter: 5.3% 14.2% 0.0%
[libx264 @ 0x7f68c93659e0] i16 v,h,dc,p: 22% 27%  5% 46%
[libx264 @ 0x7f68c93659e0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 29% 19% 20%  4%  7%  7%  7%  5%  4%
[libx264 @ 0x7f68c93659e0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 31% 28% 11%  3%  9%  7%  6%  3%  2%
[libx264 @ 0x7f68c93659e0] i8c dc,h,v,p: 49% 21% 20% 10%
[libx264 @ 0x7f68c93659e0] Weighted P-Frames: Y:0.5% UV:0.1%
[libx264 @ 0x7f68c93659e0] ref P L0: 63.4%  8.9% 21.4%  6.3%  0.0%
[libx264 @ 0x7f68c93659e0] ref B L0: 89.3%  9.1%  1.6%
[libx264 @ 0x7f68c93659e0] ref B L1: 98.1%  1.9%
[libx264 @ 0x7f68c93659e0] kb/s:1987.38
[aac @ 0x7f68c9366e80] Qavg: 1160.814

并且输出视频很好。

为什么这个进程会被python杀死?

谢谢,

斯图

0 个答案:

没有答案