我需要以编程方式(使用python)将缩略图(相册)添加到mp3(和其他)文件中,并将ffmpeg输出保存在内存中(以便将生成的字节发送到另一个进程)。
请在最后一个示例中注意'-f', 'mp3', 'pipe:1'
。除非您为结果流设置格式,否则Ffmpeg将无法使用管道。
我现在所拥有的: 1.此示例bash oneliner可以按预期的方式制作带有缩略图的mp3文件(电报播放音频并显示缩略图):
ffmpeg -i qwe.mp3 -i asd.png -acodec copy -map 0 -map 1 -disposition:v:1 attached_pic out.mp3
subprocess.run(['ffmpeg', '-i', 'qwe.mp3', '-i', 'asd.png', '-acodec', 'copy', '-map', '0', '-map', '1', '-disposition:v:1', 'attached_pic', 'out.mp3'])
audio_data = subprocess.run(['ffmpeg', '-i', 'qwe.mp3', '-i', 'asd.png', '-acodec', 'copy', '-map', '0', '-map', '1', '-disposition:v:1', 'attached_pic', '-f', 'mp3', 'pipe:1'], stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
len(audio_data.stdout)
2621690 # 2,6 Mbytes, it's ok
with open('out.mp3', 'wb') as f:
f.write(audio_data.stdout)
最后一个示例使我的mp3文件损坏了。无法在Deadbeef和Telegram中播放。
我建议问题出在几个流(-map参数)或/ -f mp3
指令周围(因为我在mp3流中有一个图像或类似的东西)。
我尝试设置其他id2v3标签并更改其他选项,但是没有运气。有什么建议吗?