python - 为什么 `subprocess.call` 没有调用命令

标签 python ffmpeg

我正在尝试使用 subprocess.call(shell=True) 通过 ffmpeg 运行 .wav 文件在下面的代码中,它似乎没有运行。我知道这是因为 output_file未创建,我在 open() 中遇到异常方法。
我究竟做错了什么?

try:
    import pocketsphinx

except:
    import pocketsphinx as ps
    import sphinxbase
    import subprocess
    import os

hmmd = "../../Pocketsphinx_Files/en-us-8khz"
lmdir = "../../Pocketsphinx_Files/cmusphinx-5.0-en-us.lm"
dictp = "../../Pocketsphinx_Files/cmu07a.dic"

output_filename = "../../temp/ps_output.wav"

def recognize(filename="../../temp/temp_output.wav"):

    command = "ffmpeg -i "+filename+" -ac 1 -ab 16 -ar 16000 "+output_filename

    subprocess.call(command,shell=True)

    wavFile = open(output_filename,"rb")

    speechRec = ps.Decoder(hmm = hmmd, lm = lmdir, dict = dictp)

    wavFile.seek(44)

    speechRec.decode_raw(wavFile)

    result = speechRec.get_hyp()

    #os.remove(filename)
    #os.remove(output_filename)

    return result

if __name__=="__main__":
    print(recognize())

编辑:我已经安装了 ffmpeg。
此外,当我从 python 解释器运行 subprocess.call() 命令时,它似乎可以工作。这就是我难过的原因。

最佳答案

我建议您尝试使用 subprocess.check_call()check_output而不是简单的call .如果您的程序无法正确执行,它们将引发异常,而不是让您想知道为什么没有生成输出。

我猜你可能会在 Python 环境中遇到可执行文件的路径问题

尝试将此功能与“ffmpeg”一起使用:

def is_exe(prog):
    for path in os.environ["PATH"].split(os.pathsep):
        if os.path.isfile(os.path.join(path, prog)):
            if os.access(os.path.join(path, prog), os.X_OK):
                return os.path.join(path, prog)
            else:
                print "Program '%s' found in '%s', but lacks executable permissions." % (prog, path)
    return False

如果返回 False ,您在运行 ffmpeg 的 Python 时遇到问题,否则是 ffmpeg 在理解您的论点时遇到问题。

关于python - 为什么 `subprocess.call` 没有调用命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24086940/

相关文章:

Matlab 中的 Python zip 函数

python - 从 DictRow 中删除一个项目

php - 使用 ffmpeg 和 php 执行帧转换

ffmpeg - 使用 ffmpeg 进行最快解码的编码

ios - HTML5 视频播放器在 iPad/iPhone 上不起作用

python - 在R,G,B平面中有效替换像素值python-openCV

python - 在 python 中迭代 JSON 并根据键过滤值以获得所需的结果

python - 使用 Pandas 和 Django 读取和解析 excel 文件

c - Libav(ffmpeg)容器编解码器时基和流时基的目的是什么?

php - 无法使用 protonemedia/laravel-ffmpeg 为上传的视频添加水印