2012-02-24 69 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

相关问题