根据其他 StackOverflow 问题和 mutagen 文档的多项建议,我能够提出代码来获取和设置 MP3 和 MP4 文件中的每个 ID3 标记。我遇到的问题是为 M4B 文件设置封面。
我已经完全按照此答案中的说明复制了代码:
但是当我尝试运行代码时仍然收到错误消息。如果我自己运行带有“albumart”值的代码,我会收到错误:
MP4file.tags['covr'] = albumart
发生异常:TypeError 无法将 int 连接到字节
但是,如果我用括号括住专辑标签变量,如前面提到的 StackOverflow 问题中所示,我会得到以下输出:
MP4file.tags['covr'] = [albumart]
发生异常:struct.error 所需参数不是整数
这是完整的功能。MP3 部分可以正常工作。
from mutagen.mp3 import MP3
from mutagen.mp4 import MP4, MP4Cover
def set_cover(filename, cover):
r = requests.get(cover)
with open('C:/temp/cover.jpg', 'wb') as q:
q.write(r.content)
if(filename.endswith(".mp3")):
MP3file = MP3(filename, ID3=ID3)
if cover.endswith('.jpg') or cover.endswith('.jpeg'):
mime = 'image/jpg'
else:
mime = 'image/png'
with open('C:/temp/cover.jpg', 'rb') as albumart:
MP3file.tags.add(APIC(encoding=3, mime=mime, type=3, desc=u'Cover', data=albumart.read()))
MP3file.save(filename)
else:
MP4file = MP4(filename)
if cover.endswith('.jpg') or cover.endswith('.jpeg'):
cover_format = 'MP4Cover.FORMAT_JPEG'
else:
cover_format = 'MP4Cover.FORMAT_PNG'
with open('C:/temp/cover.jpg', 'rb') as f:
albumart = MP4Cover(f.read(), imageformat=cover_format)
MP4file.tags['covr'] = [albumart]
两天来我一直在试图弄清楚我做错了什么。如果有人能帮我发现问题,我会欠你的。
谢谢!