Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ffmpeg的子进程调用返回负值_Python_Ffmpeg - Fatal编程技术网

Python ffmpeg的子进程调用返回负值

Python ffmpeg的子进程调用返回负值,python,ffmpeg,Python,Ffmpeg,以下是在shell上工作的原始命令行调用: ffmpeg -i /Users/abc/Desktop/Test/Full_Mov.mov -vf "drawtext=fontfile=/System/Library/Fonts/Keyboard.ttf: text='SCENE BLAH BLAH - %{frame_num}': start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=white: fontsize=20: box=1: boxcol

以下是在shell上工作的原始命令行调用:

ffmpeg -i /Users/abc/Desktop/Test/Full_Mov.mov -vf "drawtext=fontfile=/System/Library/Fonts/Keyboard.ttf: text='SCENE BLAH BLAH - %{frame_num}': start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=white: fontsize=20: box=1: boxcolor=black: boxborderw=5","format=yuv420p" -f segment -segment_frames 123 -reset_timestamps 1 -c:a copy -map 0 "/Users/abc/Desktop/Test/%03d_test40.mov"
试图通过子进程运行ffmpeg时得到负值,导致其失败而无法处理。我甚至尝试过将调用简化为只运行ffmpeg而不带任何参数,但它仍然返回负值

import subprocess
ffmpeg = "/usr/local/bin/ffmpeg"
source = "/Users/abc/Desktop/Test/Full_Mov.mov"
destination = "/Users/abc/Desktop/Test/%03d_test40.mov"
cmd = "%s -i %s -vf \"drawtext=fontfile=/System/Library/Fonts/Keyboard.ttf: text='SCENE BLAH BLAH - %%{frame_num}': start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=5\",\"format=yuv420p\" -f segment -segment_frames 123 -reset_timestamps 1 -c:a copy -map 0 \"%s\"" % (ffmpeg, source, destination)
log("ffmpeg cmd: %s" % cmd)
log(subprocess.check_output(cmd, shell=True))
运行完整命令时:

CalledProcessError: Command '/usr/local/bin/ffmpeg -i /Users/abc/Desktop/Full_Mov.mov -vf "drawtext=fontfile=/System/Library/Fonts/Keyboard.ttf: text='SCENE BLAH BLAH - %{frame_num}': start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=5","format=yuv420p" -f segment -segment_frames 318 -reset_timestamps 1 -c:a copy -map 0 "/Users/abc/Desktop/Test/%03d.tmp.mov"' returned non-zero exit status -8
    raise CalledProcessError(retcode, cmd, output=output)
仅运行ffmpeg时,无参数:

CalledProcessError: Command '/usr/local/bin/ffmpeg' returned non-zero exit status 1
    raise CalledProcessError(retcode, cmd, output=output)
最新输出,建议更改如下:

subprocess.CalledProcessError: Command '['/usr/local/bin/ffmpeg', '-i', '/Users/szaharak/Desktop/Flix_Test/ep888_sq66_main_mov_2019_05_20_14_15.mov', '-vf', 'drawtext=fontfile=/System/Library/Fonts/Keyboard.ttf:', 'text=SCENE BLAH BLAH - %%{frame_num}:', 'start_number=1:', 'x=(w-tw)/2:', 'y=h-(2*lh):', 'fontcolor=black:', 'fontsize=20:', 'box=1:', 'boxcolor=white:', 'boxborderw=5', 'format=yuv420p', '-f', 'segment', '-segment_frames', '123', '-reset_timestamps', '1', '-c:a', 'copy', '-map', '0', '/Users/szaharak/Desktop/Flix_Test/%03d_test40.mov']' returned non-zero exit status 1

[NULL @ 0x7f88c3012200] Unable to find a suitable output format for 'text=SCENE BLAH BLAH - %%{frame_num}:'
text=SCENE BLAH BLAH - %%{frame_num}:: Invalid argument
这是最新的

    >>> rc = subprocess.check_call(cmd)
ffmpeg version N-93891-ge1839283bc-tessus  https://evermeet.cx/ffmpeg/  Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple LLVM version 10.0.1 (clang-1001.0.46.4)
  configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librubberband --enable-libshine --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-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay

  libavutil      56. 28.100 / 56. 28.100
  libavcodec     58. 52.102 / 58. 52.102
  libavformat    58. 27.103 / 58. 27.103
  libavdevice    58.  7.100 / 58.  7.100
  libavfilter     7. 53.101 /  7. 53.101
  libswscale      5.  4.101 /  5.  4.101
  libswresample   3.  4.100 /  3.  4.100
  libpostproc    55.  4.100 / 55.  4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/szaharak/Desktop/Flix_Test/ep888_sq66_main_mov_2019_05_20_14_15.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    creation_time   : 2019-05-14T17:58:24.000000Z
    com.apple.quicktime.player.movie.audio.gain: 1.000000
    com.apple.quicktime.player.movie.audio.treble: 0.000000
    com.apple.quicktime.player.movie.audio.bass: 0.000000
    com.apple.quicktime.player.movie.audio.balance: 0.000000
    com.apple.quicktime.player.movie.audio.pitchshift: 0.000000
    com.apple.quicktime.player.movie.audio.mute: 
    com.apple.quicktime.player.movie.visual.brightness: 0.000000
    com.apple.quicktime.player.movie.visual.color: 1.000000
    com.apple.quicktime.player.movie.visual.tint: 0.000000
    com.apple.quicktime.player.movie.visual.contrast: 1.000000
    com.apple.quicktime.player.version: 7.6.6 (7.6.6)
    com.apple.quicktime.version: 7.7.3 (2943.14) 0x7738000 (Mac OS X, 10.11.6, 15G22010)
  Duration: 00:01:12.67, start: 0.000000, bitrate: 23379 kb/s
    Stream #0:0(eng): Video: mjpeg (Baseline) (jpeg / 0x6765706A), yuvj422p(pc, bt470bg/unknown/unknown), 1280x720 [SAR 72:72 DAR 16:9], 21838 kb/s, 24 fps, 24 tbr, 24k tbn, 24k tbc (default)
    Metadata:
      creation_time   : 2019-05-14T17:58:24.000000Z
      handler_name    : Apple Video Media Handler
      encoder         : Photo - JPEG
    Stream #0:1(eng): Audio: pcm_s16be (twos / 0x736F7774), 48000 Hz, stereo, s16, 1536 kb/s (default)
    Metadata:
      creation_time   : 2019-05-14T17:58:24.000000Z
      handler_name    : Apple Sound Media Handler
[NULL @ 0x7f8ddc8ce200] Unable to find a suitable output format for 'text=SCENE BLAH BLAH - %{frame_num}: start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=5: format=yuv420p'
text=SCENE BLAH BLAH - %{frame_num}: start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=5: format=yuv420p: Invalid argument
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 190, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/usr/local/bin/ffmpeg', '-i', '/Users/szaharak/Desktop/Flix_Test/ep888_sq66_main_mov_2019_05_20_14_15.mov', '-vf', 'drawtext=fontfile=/System/Library/Fonts/Keyboard.ttf:', 'text=SCENE BLAH BLAH - %{frame_num}: start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=5: format=yuv420p', '-f', 'segment', '-segment_frames', '123', '-reset_timestamps', '1', '-c:a', 'copy', '-map', '0', '/Users/szaharak/Desktop/Flix_Test/%03d_test40.mov']' returned non-zero exit status 1
rc=子进程检查调用(cmd) ffmpeg版本N-93891-ge1839283bc-tessushttps://evermeet.cx/ffmpeg/ 版权所有(c)2000-2019 FFmpeg开发者 使用Apple LLVM版本10.0.1(clang-1001.0.46.4)构建 配置:--cc=/usr/bin/clang--prefix=/opt/ffmpeg--extra-version=tessus--enable avisynth--enable fontconfig--enable gpl--enable libaom--enable libass--enable libfruray--enable libgsm--enable libmodplug--enable-libmp3lame--enable libmysofa enable libopencore amrnb--enable libopencore amrwb--enable-libopenh264--enable libopenjpeg--enable libopus--enable libruberband--enable libshine--enable libsnapy--enable libsoxr--enable libspeex--enable libthora--enable libtwolame--enable libvidstab--enable libvorbis--enable libvpx--enable libwavpack--enable libwebp--enable-libx264--enable-libx265--enable libxavs--enable libxvid--enable libzimg--enable libzmq--enable libzvbi--enable-version3--pkg config flags=--static--disable ffplay libavutil 56。28.100 / 56. 28.100 libav编解码器58。52.102 / 58. 52.102 libav58格式。27.103 / 58. 27.103 libav58设备。7.100 / 58. 7.100 libav7。53.101 / 7. 53.101 Libsw5。4.101 / 5. 4.101 libswresample 3。4.100 / 3. 4.100 Libroc 55。4.100 / 55. 4.100 从“/Users/szaharak/Desktop/Flix_Test/ep888_sq66_main_mov_2019_05_20_14_15.mov”输入#0、mov、mp4、m4a、3gp、3g2、mj2): 元数据: 主要品牌:qt 次要版本:537199360 兼容品牌:qt 创建时间:2019-05-14T17:58:24.000000Z com.apple.quicktime.player.movie.audio.gain:1.000000 com.apple.quicktime.player.movie.audio.treble:0.000000 com.apple.quicktime.player.movie.audio.bass:0.000000 com.apple.quicktime.player.movie.audio.balance:0.000000 com.apple.quicktime.player.movie.audio.pitchshift:0.000000 com.apple.quicktime.player.movie.audio.mute: com.apple.quicktime.player.movie.visual.brightness:0.000000 com.apple.quicktime.player.movie.visual.color:1.000000 com.apple.quicktime.player.movie.visual.tint:0.000000 com.apple.quicktime.player.movie.visual.contrast:1.000000 com.apple.quicktime.player.version:7.6.6(7.6.6) com.apple.quicktime.version:7.7.3(2943.14)0x7738000(Mac OS X,10.11.6,15G22010) 持续时间:00:01:12.67,开始时间:0.000000,比特率:23379 kb/s 流#0:0(英文):视频:mjpeg(基线)(jpeg/0x6765706A),yuvj422p(pc,bt470bg/未知/未知),1280x720[SAR 72:72 DAR 16:9],21838 kb/s,24 fps,24 tbr,24k tbn,24k tbc(默认) 元数据: 创建时间:2019-05-14T17:58:24.000000Z 处理器名称:苹果视频媒体处理器 编码器:照片JPEG 流#0:1(英语):音频:pcm#s16be(两个s/0x736F77774),48000 Hz,立体声,S161536 kb/s(默认) 元数据: 创建时间:2019-05-14T17:58:24.000000Z 处理器名称:苹果声音媒体处理器 [NULL@0x7f8ddc8ce200]找不到“text=SCENE BLAH BLAH-%{frame_num}:start_number=1:x=(w-tw)/2:y=h-(2*lh):fontcolor=black:fontsize=20:box=1:boxcolor=white:boxborderw=5:format=yuv420p”的合适输出格式 text=SCENE BLAH BLAH-%{frame_num}:start_number=1:x=(w-tw)/2:y=h-(2*lh):fontcolor=black:fontsize=20:box=1:boxcolor=white:boxborderw=5:format=yuv420p:参数无效 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/usr/local/cillar”/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py“,check_call中的第190行 引发被调用的进程错误(retcode,cmd) subprocess.CalledProcessError:Command'['/usr/local/bin/ffmpeg','-i','/Users/szaharak/Desktop/Flix_Test/ep888_sq66_main_mov_2019_05_20_14_15.mov','-vf',drawtext=fontfile=/System/Library/Fonts/Keyboard.ttf:','text=SCENE BLAH-%{frame_num}:start_number=1:x=(w-tw)/2:y=h-(2*lh):fontcolor=black:fontsize=20:box=1:boxcolor=white:boxborderw=5:format=yuv420p'、'-f'、'-segment'、'-segments\u frames'、'123'、'-reset\u timestamps'、'1'、'-c:a'、'copy'、'-map'、'0'、'/Users/szaharak/Desktop/Flix\u Test/%03d\u test40.mov']'返回非零退出状态1
ffmpeg
命令行很棘手,因为有很多特殊参数,错误有时很难理解,程序有时会解释/丢弃错误参数,导致错误消息晦涩难懂

另一个困难是使用
检查输出。你真的不需要这样做,如果程序失败,你将没有任何输出

我会尝试以下方法(我无法测试),即:

  • drop
    shell=True
  • 传递参数列表,而不是自己编写字符串。它允许忘记引用/转义。您不需要格式化命令、源和目标,因为它们是独立的参数:
  • 不记录,只需打印
    检查\u call
    。 作为奖励,您将实时获得输出,而不是最终
请注意,我已经删除了
“text=SCENE BLAH-BLAH-%{frame_num}:,
中的单引号,并取消了
%
字符的scape

像这样:

cmd = [ffmpeg,"-i",source,"-vf",
      "drawtext=fontfile=/System/Library/Fonts/Keyboard.ttf:",
      "text=SCENE BLAH BLAH - %{frame_num}: start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=5: format=yuv420p",
      "-f","segment","-segment_frames","123",
       "-reset_timestamps","1","-c:a","copy","-map","0",destination] 
log("ffmpeg cmd: %s" % cmd)
rc = subprocess.check_call(cmd)
if rc:
    raise Exception("ffmpeg failed")

对于
ffmpeg
的情况,您可以迁移到。这样也可以避免一些参数解析的麻烦。

您应该尝试使用
check\u call
查看输出是什么。
check\u output