2015-09-26 86 views
1

我在Mac OS 10.10上使用python 2.7和ffmpeg。 时可以使用Python的一些命令,编码方式类似于下面在Popen上使用子流程选项

p = subprocess.Popen(cmd.strip().split(" ")) 

这远远所有的时间,而不是在ffmpeg的filter_complex情况。 下面的代码可以直接在终端上运行输入。

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex " nullsrc=size=1920x1440 [base]; [0:v] setpts=PTS-STARTPTS, scale=1920x1440 [frame0];[1:v] setpts=PTS-STARTPTS, scale=640x480 [frame1]; [base] [frame0] overlay=shortest=1:x=1920:y=1440 [tmp1]; [tmp1] [frame1] overlay=shortest=1:x=640:y=480 output.mp4 

但是不能用下面的python Popen脚本运行。

cmd = "ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex " nullsrc=size=1920x1440 [base]; [0:v] setpts=PTS-STARTPTS, scale=1920x1440 [frame0];[1:v] setpts=PTS-STARTPTS, scale=640x480 [frame1]; [base] [frame0] overlay=shortest=1:x=1920:y=1440 [tmp1]; [tmp1] [frame1] overlay=shortest=1:x=640:y=480 output.mp4" 
p = subprocess.Popen(cmd.strip().split(" ")) 

这有问题在分裂(“”)工程意想不到的细分。 所以我直接准备拆分命令状

split_cmd = [ffmpeg_exe,'-i','input1.mp4','-i','input2.mp4','-filter_complex','\" nullsrc=size=1920x1440 [base]; [0:v] setpts=PTS-STARTPTS, scale=1920x1440 [frame0];[1:v] setpts=PTS-STARTPTS, scale=640x480 [frame1]; [base] [frame0] overlay=shortest=1:x=1920:y=1440 [tmp1]; [tmp1] [frame1] overlay=shortest=1:x=640:y=480\"','output.mp4']; 
p = subprocess.Popen(split_cmd) 

即使在这种情况下,系统返回

[AVFilterGraph @ 0x7fb1c9f000c0] No such filter: '" nullsrc' 
Error configuring filters. 

这可能是系统混淆了-filter_complex选项,因为ffmpeg的选项。 任何人都可以帮助这个,请。

回答

0

您实际上在开始和结束双引号",因为中间没有使用它们的外壳。只需使用' nullsrc=size=1920x1440 [base]; [0:v] setpts=PTS-STARTPTS, scale=1920x1440 [frame0];[1:v] setpts=PTS-STARTPTS, scale=640x480 [frame1]; [base] [frame0] overlay=shortest=1:x=1920:y=1440 [tmp1]; [tmp1] [frame1] overlay=shortest=1:x=640:y=480'即可,即不需要打开和关闭\"

您还可以尝试使用shlex.split,如subprocess documentation中所述。

+0

非常感谢。究竟。 – yumyumyum

+0

@yumyumyum我的荣幸。如果解决了您的问题,请接受答案。 – MisterMiyagi