栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/619039.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号