2015-12-04 40 views
0

我想通過使用子流程在python中通過ffmpeg裁剪和重新編碼視頻。Ffmpeg映射和filter_complex子流程 - Python

我管理使用純字符串命令啓動子進程,並且shell = True,但我想構建更復雜的命令,並且傾向於使用shell = False並傳遞參數列表。

那麼,什麼是作品這種形式(這是一個簡單的例子,會出現在最終版本中多個數據流):

import subprocess as sp 

sp.Popen('ffmpeg.exe -i Test.avi -filter_complex "[0:v]crop=1024:1024:0:0[out1]" -map [out1] out1.mp4', shell=True) 

該腳本將產生預期的裁剪輸出視頻。

有關參數列表,我想:

FFMPEG_PATH = 'ffmpeg.exe' 
aviP='Test.avi' 
sp.Popen([FFMPEG_PATH, 
'-i', aviP, 
'-filter_complex', '[0:v]crop=1024:1024:0:0[out1]', 
'-map', '[out1] out1.mp4']) 

當我執行這個第二個版本,根本沒有任何反應。 (沒有錯誤,沒有輸出)

我懷疑我搞亂了地圖命令語法中的東西?

+0

看一看https://docs.python.org/2/library/subprocess.html#subprocess.check_output –

+0

我得到這個輸出 - 它對我沒有提示嗎?!:CalledProcessError:Command'['ffmpeg.exe','-i','C:/Users/jlarsch/Desktop/x264Test.avi','-filter_complex', '[0:v] crop = 1024:1024:0:0 [out1]','-map','[out1] out1.mp4']'返回非零退出狀態 – jlarsch

+0

您是否使用過'check_call'?使用'check_output'也會給你stderr。 –

回答

0

我想我想通了:

FFMPEG_PATH = 'ffmpeg.exe' 
aviP='Test.avi' 
sp.Popen([FFMPEG_PATH, 
'-i', aviP, 
'-filter_complex', '[0:v]crop=1024:1024:0:0[out1]', 
'-map', '[out1]', 'out1.mp4']) 

是正確的語法