为了账号安全,请及时绑定邮箱和手机立即绑定

FFMpeg 使用 python 子进程给出无效参数错误

FFMpeg 使用 python 子进程给出无效参数错误

慕村9548890 2022-07-05 17:08:29
我正在尝试将文件或麦克风流转换为 22050 采样率并将速度更改为双倍。我可以使用带有以下代码的终端来做到这一点;#ffmpeg -i test.mp3 -af asetrate=44100*0.5,aresample=44100,atempo=2 output.mp3但我不能用 python 子进程运行这个终端代码。我尝试了很多事情,但每次都失败了。一般来说,我正在采用请求的输出格式“asetrate”或“aresample”或“atempo”不适合输出格式错误。无效的论点。我如何运行它并使用管道获取流?song = subprocess.Popen(["ffmpeg.exe", "-i", sys.argv[1], "-f", "asetrate", "22050", "wav", "pipe:1"],                         stdout=subprocess.PIPE)
查看完整描述

2 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

你的两个命令是不同的。尝试:

song = subprocess.Popen(["ffmpeg", "-i", sys.argv[1], "-af", "asetrate=22050,aresample=44100,atempo=2", "-f", "wav", "pipe:1"],
  • -af用于音频过滤器。

  • -f是手动设置复用器/输出格式


查看完整回答
反对 回复 2022-07-05
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

ffmpeg将所提供的任何内容解释-af为单个参数,然后它将在内部解析为单独的参数,因此在传递之前将它们分开Popen不会达到同样的效果。


使用终端的初始示例应使用Popenas创建


subprocess.Popen([

    'ffmpeg', '-i', 'test.mp3', '-af', 'asetrate=44100*0.5,aresample=44100,atempo=2',

    'output.mp3',

])

因此,对于您使用管道的实际示例,请尝试以下操作:


song = subprocess.Popen(

    ["ffmpeg.exe", "-i", sys.argv[1], "-f", "asetrate=22050,wav", "pipe:1"],

    stdout=subprocess.PIPE

)

然后,您将需要调用song.communicate()以获取由ffmpeg.exe.


查看完整回答
反对 回复 2022-07-05
  • 2 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信