我正在尝试将文件或麦克风流转换为 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
是手动设置复用器/输出格式
猛跑小猪
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.
添加回答
举报
0/150
提交
取消