2015-09-26 44 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