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

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值