2014-10-08 69 views
1

我試圖通過從python子進程庫調用ffmpeg來創建一個循環視頻文件。這裏是一個的給我的問題的一部分:在Popen Python中的Bash進程替換

import subprocess as sp 
sp.Popen(['ffmpeg', '-f', 'concat', '-i', "<(for f in ~/Desktop/*.mp4; do echo \"file \'$f\'\"; done)", "-c", "copy", "~/Desktop/sample3.mp4"]) 

與上面的代碼,我發現了以下錯誤:

<(for f in /home/delta/Desktop/*.mp4; do echo "file '$f'"; done): No such file or directory 

我沒有找到一個類似的措辭問題here。但我不確定該解決方案如何適用於解決我的問題。

編輯: 感謝您的幫助!繼評論和其他地方的意見後,我最終改變了代碼:

sp.Popen("ffmpeg -f concat -i <(for f in ~/Desktop/*.mp4; do echo \"file \'$f\'\"; done) -c copy ~/Desktop/sample3.mp4", shell=True, executable="/bin/bash") 

- 哪些工作正常。

+3

您正在運行'ffmpeg',但重定向是shell的一項功能。使用'shell = True'參數來強制'Popen'將它傳遞給shell。還要考慮不傳遞一組命令和參數,而是一個字符串。閱讀更多[here](https://docs.python.org/2/library/subprocess.html#popen-constructor) – Amadan 2014-10-08 02:10:05

+3

如果使用'shell = True',參數需要作爲字符串傳遞,而不是列表。 – dano 2014-10-08 02:11:19

+4

+1阿馬丹和達諾所說的。您可能還需要明確指出您希望'/ bin/bash'而不是'Popen'的默認'/ bin/sh'。 – 2014-10-08 02:12:16

回答

1

繼在評論意見,並跳槽我最終的代碼更改爲此:

sp.Popen("ffmpeg -f concat -i <(for f in ~/Desktop/*.mp4; do echo \"file \'$f\'\"; done) -c copy ~/Desktop/sample3.mp4", shell=True, executable="/bin/bash") 

,可呈現正常工作。 - moorej