【Python】os.system 执行 ffmpeg 命令不起作用,但终端中可用

【Python】os.system 执行 ffmpeg 命令不起作用,但终端中可用,第1张

【Python】os.system 执行 ffmpeg 命令不起作用,但终端中可用

os.system 执行 ffmpeg 命令不起作用,但终端中可用
    • 踩坑
    • 落坑
    • 爬坑
    • 猜想

踩坑

本人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 大佬们指点下,感激。。。。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5625114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存