我正在尝试使用 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/