Python 在Popen选项上使用子进程
我在MacOS10.10上使用Python2.7和ffmpeg。 当使用python中的一些命令时,代码如下Python 在Popen选项上使用子进程,python,ffmpeg,Python,Ffmpeg,我在MacOS10.10上使用Python2.7和ffmpeg。 当使用python中的一些命令时,代码如下 p = subprocess.Popen(cmd.strip().split(" ")) 这一直都很好,但在ffmpeg filter_复杂的情况下就不行了。 下面的代码可以在终端上直接输入运行 ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex " nullsrc=size=1920x1440 [base]; [0:v] setpts
p = subprocess.Popen(cmd.strip().split(" "))
这一直都很好,但在ffmpeg filter_复杂的情况下就不行了。
下面的代码可以在终端上直接输入运行
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命令,就像
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选项混淆。
任何人都可以提供帮助。您实际上是在传递开头和结尾双引号
“
,因为中间没有使用它们的shell。只需使用
' 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'
相反,即没有打开和关闭\“
您也可以尝试使用。@yumyumyum我的荣幸。如果答案解决了你的问题,请接受。
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']