踩坑
本人Java 开发,最近开发音频转码项目,同事提供了一个 Python 工具脚本。执行脚本可使音频转成对应的格式。这是踩坑的开始。
落坑
拿到脚本工具后,我担心不能正常使用,特意在终端上执行了下,发现一切正常,音频转码也正常的。之后正常开发,通过程序去调用脚本,发现无论如何都无法转码出音频。重新在终端上执行也是没有问题(终端环境就是项目部署的服务器),下面是脚本工具部分代码
def get_sr(audio_path,inar):
path,file = os.path.split(audio_path)
new_path = os.path.join(path,'test.wav')
fake = 0
try:
os.system('ffmpeg -y -i {0} {1}'.format(audio_path,new_path))
f = wave.open(new_path,'rb')
audio_info = f.getparams()
f.close
os.remove(new_path)
except:
audio_info = get_pcm_info(audio_path, inar)
fake += 1
return audio_info,fake
爬坑
通过不断的在脚本中添加日志,最后发现 os.system 执行失败。
再次写脚本测试
import os
os.system ('ffmpeg')
返回:
os.system ('ffmpeg')
sh: ffmpeg: command not found
崩溃了吧 ~~~~
通过不断的百度,最终也没有找到直接的解决问题的办法。最终在一篇博客中得到提示:可以指定到 ffmpeg 安装目录下执行下,于是乎修改脚本:
def get_sr(audio_path,inar):
# print("audio_path = " + audio_path + ", inar = " + inar)
path,file = os.path.split(audio_path)
new_path = os.path.join(path,'test.wav')
fake = 0
try:
os.system('/usr/local/ffmpeg/bin/ffmpeg -y -i {0} {1}'.format(audio_path,new_path))
with wave.open(new_path,'rb') as f:
audio_info = f.getparams()
os.remove(new_path)
except:
audio_info = get_pcm_info(audio_path, inar)
fake += 1
return audio_info,fake
音频正常输出,问题解决
猜想
大概猜想下通过 java程序去读取 Python 脚本,Python 执行的时候 环境变量不是当前服务器配置的环境变量,这个有待求证,请 Python 大佬们指点下,感激。。。。