Mutagen 的 save() 不会设置或更改 MP3 文件的封面

Emi*_*oss 5 python mp3 id3-tag mutagen id3v2

我正在尝试使用Mutagen以下列方式更改一堆 MP3 文件的 ID3(版本 2.3)封面艺术:

from mutagen.mp3 import MP3
from mutagen.id3 import APIC

file = MP3(filename)

with open('Label.jpg', 'rb') as albumart:
    file.tags['APIC'] = APIC(
        encoding=3,
        mime='image/jpeg',
        type=3, desc=u'Cover',
        data=albumart.read()
    )
file.save(v2_version=3)
Run Code Online (Sandbox Code Playgroud)

然而,文件(或至少APIC标签)保持不变,通过读回标签来检查。但是,在系统文件资源管理器中,该文件确实显示了更新的Date modified. 如何让 Mutagen 正确更新封面?

CDJ*_*DJB 5

该问题的出现是由于ID3 规范指出:

一个文件中可能附加有几张图片,每张图片都位于各自的“APIC”框架中,但只有一张具有相同的内容描述符。

这意味着 ID3 必须使用['APIC:Description']. 另外,推荐的添加标签的方式不是像问题中的例子那样直接通过字典界面,而是使用函数ID3.add()。使用 ID3 对象还允许我们使用该ID3.getall()函数来检查标签是否已正确附加。

from mutagen.id3 import APIC, ID3
file = ID3("test.mp3")

print(file.getall('APIC')) # [] (assuming no APIC tags attached)

with open('image.jpg', 'rb') as albumart:
    file.add(APIC(
        encoding=3,
        mime='image/jpeg',
        type=3, desc=u'Cover',
        data=albumart.read()
    ))

print(file.getall('APIC'))
# [APIC(encoding=<Encoding.UTF16: 1>, mime='image/jpeg', type=<PictureType.COVER_FRONT: 3>, desc='Cover', data=...]
file.save(v2_version=3)
Run Code Online (Sandbox Code Playgroud)


小智 0

我需要将封面设置为“APIC:”标签,而不是“APIC”标签(我猜这就是指定 IDv2.3 的方式)。