Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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 在Popen选项上使用子进程_Python_Ffmpeg - Fatal编程技术网

Python 在Popen选项上使用子进程

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

我在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=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']