无法在Python 3.5.2中将封面艺术嵌入Mp3

时间:2018-06-25 22:55:35

标签: python mp3 id3

我有此文件“ image.jp 这个.mp3文件:

“绿色节-我来了[官方音乐视频] .mp3”

在“测试”目录中

我已经使用eyeD3库成功设置了标签为作者,标题,专辑等。 然后我尝试设置Cover Art。

我尝试了两种可能性,但没有一种可行: 第一个: Mutagen

from mutagen.mp3 import MP3
from mutagen.id3 import ID3, APIC, error

complete_file_path = "test\\"+"Green Day - When I Come Around [Official Music Video].mp3"
path_to_thumb_wf = "test\\"+"image.jpg"

audio = MP3(complete_file_path, ID3=ID3)
# add ID3 tag if it doesn't exist
try:
    audio.add_tags()
except error:
    pass

print(path_to_thumb_wf)

audio.tags.add(
    APIC(
        encoding=3, # 3 is for utf-8
        mime='image/jpg', # image/jpeg or image/png
        type=3, # 3 is for the cover image
        desc=u'Cover',
        data=open(path_to_thumb_wf, 'rb').read()
    )
)
audio.save(v2_version=3)

以及使用 eyeD3

的解决方案
audiofile = eyed3.load(complete_file_path)


# read image into memory
imagedata = open(path_to_thumb_wf,"rb").read()

# append image to tags
audiofile.tag.images.set(3,imagedata,"image/jpeg", u"you can put a description here")

audiofile.tag.save()

我在Windows 10上使用python 3.5.2。我不知道它是否会影响结果,但是无论如何,我会说,这首歌已经有了我想要更改的封面。

1 个答案:

答案 0 :(得分:0)

ID3v2.3 section on APIC中所述:

  

一个文件可能有几张图片,每张图片都在各自的“ APIC”框架中,但是只有一张具有相同的内容描述符。可能只有一张图片,其图片类型分别声明为图片类型$ 01和$ 02。

在v2.3中,IIRC实际上没有在任何地方记录“内容描述符”,因此,不同的客户端在这里可能做的事情略有不同,但是大多数工具会将其视为图片类型加上描述字符串,或者视为整个标头(文本编码,MIME类型,图片类型和编码描述)作为二进制Blob。 (有些工具只是忽略它,而允许您使用完全相同的帧头存储图片,但我认为与Mutagen无关)。

无论如何,这意味着您可能只是添加了另一张名为Cover (front)的{​​{1}}图片,而不是替换任何现有的图片。


您尚未说明如何查看文件。但是我猜您正在尝试在Windows Media Player或iTunes或其他播放器中打开它,或在Windows资源管理器中查看它(我想只是要求WMP读取标签),或者类似的东西?

几乎所有此类工具在面对多张图片时,仅向您展示第一个。 (其中有些甚至不区分图片类型,并向您显示 any 类型的第一张图片,即使它是32x32文件图标…)

但是,有些人确实可以查看其他图片。例如,在iTunes中,如果您在轨道上'Cover'Get Info,请转到Properties或类似标签(抱歉,但名称因版本而异),您可以看到标签中的所有图片。


无论如何,如果您想用不同的API替换APIC,则需要完全匹配描述符(并且同样,对于不同的库来说可能意味着不同的事情……),或者更简单地,只需删除旧版本以及添加新版本。


还需要注意的另一件事:iTunes和WMP缓存的封面,并假设一旦导入文件就永远不会改变。 WMP还有很多可以覆盖文件中图像的功能,例如同一目录中正确使用UUID的文件夹封面图像。