我尝试使用以下代码中的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()命令时,它似乎工作。这就是我难以接受的原因。
答案 0 :(得分:1)
我建议您尝试使用subprocess.check_call()
或check_output
而不是call
。如果您的程序无法正确执行,它们将引发异常,而不是让您想知道为什么没有生成输出。
我猜你可能会在Python环境中遇到可执行文件的路径问题
尝试将此功能与&fffmpeg':
一起使用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会在你的论证中出现问题。