2012-02-24 73 views
4

我嘗試了3種方法從python調用ffmpeg,但它總是阻塞並且不返回任何結果。爲什麼從python塊調用ffmpeg?

但是,如果我從shell執行它,它的工作原理。

對於如:

/usr/bin/ffmpeg -y -i /tmp/uploadedfiles/movie8_15_10s.mpg -ar 1600 -ac 1 /tmp/uploadedfiles/movie8_15_10s.mpg.wav 

這個工程。

然而,

ffmpeg_command = "/usr/bin/ffmpeg -y -i test.wav testout.wav" 
f_ffmpeg=os.popen(ffmpeg_command); 

這使得蟒蛇掛起。

回答

7

您應該使用subprocess.Popen而不是os.popen

特別是,要獲得相同的行爲,你可以通過一個外殼,shell=True運行過程,並從stdout收集輸出和stderr如下:

p = subprocess.Popen(command, shell=True, 
        stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
output = p.communicate()[0] 

其中command是同一個命令行,你會寫在一個外殼。

+0

謝謝jcollado,這就像一個魅力工作! – rosh 2012-02-24 10:02:44

1

(這是不是直接回答你的問題),但如果你有多個要轉換的文件,你可以嘗試這樣的事情:(把你的script.py在同一文件夾)

import os 
import subprocess 

fileList = os.listdir("path") 

for name in fileList: 
    command = 'ffmpeg -i' + ' ' + str(name) +' '+'-f mp3'+' '+ str(name)+'.mp3' 
    p = subprocess.Popen(command, shell=True, 
        stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
    output = p.communicate()[0] 

請注意變量COMMAND

+0

這可以修改回答這個問題嗎? – digitalextremist 2014-02-09 00:04:42

相關問題