Mutagen 的 save() 不会设置或更改 MP3 文件的封面
Mutagen's save() does not set or change cover art for MP3 files
我正在尝试使用 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)
但是,文件(或至少 APIC
标签)保持不变,通过回读标签进行检查。但是,在系统文件资源管理器中,该文件确实显示了更新后的 Date modified
。我怎样才能让 Mutagen 正确更新封面?
我需要将封面设置为 "APIC:" 标签,而不是 "APIC" 标签(我猜这是 IDv2.3 的指定方式)。
问题的出现是由于 ID3 specification 指出:
There may be several pictures attached to one file, each in their individual "APIC" frame, but only one with the same content descriptor.
这意味着 ID3 必须使用 ['APIC:Description']
存储 APIC 标签。另外,推荐的添加标签的方式不是像问题中的例子那样直接通过字典界面,而是使用ID3.add()
function. Using the ID3 object also allows us to use the 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)
我正在尝试使用 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)
但是,文件(或至少 APIC
标签)保持不变,通过回读标签进行检查。但是,在系统文件资源管理器中,该文件确实显示了更新后的 Date modified
。我怎样才能让 Mutagen 正确更新封面?
我需要将封面设置为 "APIC:" 标签,而不是 "APIC" 标签(我猜这是 IDv2.3 的指定方式)。
问题的出现是由于 ID3 specification 指出:
There may be several pictures attached to one file, each in their individual "APIC" frame, but only one with the same content descriptor.
这意味着 ID3 必须使用 ['APIC:Description']
存储 APIC 标签。另外,推荐的添加标签的方式不是像问题中的例子那样直接通过字典界面,而是使用ID3.add()
function. Using the ID3 object also allows us to use the 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)