无法使用ffmpeg将缩略图图像设置为mp3文件,并将其输出发送到控制台(ffmpeg pipe:1)

时间:2019-05-03 16:38:32

标签: python ffmpeg subprocess mp3 id3v2

我需要以编程方式(使用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
  1. 此python代码的结果相同:
subprocess.run(['ffmpeg', '-i', 'qwe.mp3', '-i', 'asd.png', '-acodec', 'copy', '-map', '0', '-map', '1', '-disposition:v:1', 'attached_pic', 'out.mp3'])
  1. 但是我需要字节,而不是文件系统上的文件,因此我执行以下操作并获取字节。但是,如果我将这些字节保存到文件中,则会导致mp3文件损坏。我不能和Deadbeef和Telegram玩。
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标签并更改其他选项,但是没有运气。有什么建议吗?

0 个答案:

没有答案