python - Mutagen 的 save() 不会设置或更改 MP3 文件的封面
问题描述
我正在尝试使用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 正确更新封面艺术?
解决方案
由于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)
推荐阅读
- docker - 服务器给 HTTPS 客户端 Ubuntu20.04 的 HTTP 响应
- amazon-web-services - 无法设置计算属性,但为“区域”设置了值
- django - 通过没有端口的 ip 访问本地 dockerized Django 项目
- node.js - 使用 Heroku 部署 Node.js 应用程序会引发“进程退出,状态为 132”错误
- python - 没有行时从pdf中提取表格-使用Python
- javascript - 如何使用 typescript 和 three.js 将纹理添加到文件中
- typescript - 类型 ErrorConstructor 的 TypeScript 问题
- python - 我如何让这个功能从卡组中选择?
- angular - 我使用 angular 11.and 模板驱动形式创建了 invoive
- kubernetes - 对于 yq - 我们如何获取 kubernetes configmap 中的 data 参数