【问题标题】:Why does calling ffmpeg from python block?为什么从 python 块中调用 ffmpeg?
【发布时间】:2014-02-09 07:43:02
【问题描述】:

我尝试了 3 种方法从 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);

这会使 python 挂起。

【问题讨论】:

    标签: python ffmpeg


    【解决方案1】:

    您应该使用subprocess.Popen 而不是os.popen

    特别是,要获得相同的行为,您可以通过带有shell=True 的shell 运行该进程并从stdoutstderr 收集输出,如下所示:

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

    command 与您在 shell 中编写的命令行相同。

    【讨论】:

      【解决方案2】:

      (这不是您问题的直接答案)但是如果您有多个文件要转换,您可以尝试这样的操作:(将您的 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

      【讨论】:

      • 这个可以修改回答问题吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 2014-04-11
      • 2021-04-26
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 2019-12-01
      相关资源
      最近更新 更多