根据其他StackOverflow问题和mutagen文档的多个建议,我能够编写代码获取和设置MP3和MP4文件中的每个ID3标签。但是,我在为M4B文件设置封面时遇到了问题。
我已经按照以下答案中所述的方式精确复制了代码:
Embedding album cover in MP4 file using Mutagen
但是,当我尝试运行代码时仍然收到错误。如果我只使用“albumart”值运行代码,则会收到以下错误:
MP4file.tags['covr'] = albumart
异常已发生:TypeError 无法将 int 连接到字节中
然而,如果我像上述 StackOverflow 问题中所示的那样在 albumart 变量周围加上括号,我会得到以下输出:
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]
我已经试了两天,想找出我的问题在哪里。如果有人能帮我找到问题,我将感激不尽。
谢谢!
bytes(albumart)
周围添加方括号,现在你可以将一个列表保存到MP4file.tags['covr']
中,这也意味着你可以在其中有多个图像。 - J-a-n-u-scover_format
无法被正确识别并写入文件。我也认为分配cover_format
的行不应该有单引号,但我认为这不是问题所在。 - Aaron left Stack Overflow