使用Mutagen嵌入封面图片到MP4文件中

5

我希望使用mutagen将专辑封面添加到文件中,但当我将其作为文件添加时,会返回以下内容:

File "D:\Download\pandora\renamingMETAEFF.pyw", line 71, in <module>
    meta['covr'] = image
File "C:\Users\AMD\AppData\Local\Programs\Python\Python35\lib\site-packages\mutagen\_file.py", line 67, in __setitem__
    self.tags[key] = value
File "C:\Users\AMD\AppData\Local\Programs\Python\Python35\lib\site-packages\mutagen\mp4\__init__.py", line 357, in __setitem__
    self._render(key, value)
File "C:\Users\AMD\AppData\Local\Programs\Python\Python35\lib\site-packages\mutagen\mp4\__init__.py", line 371, in _render
    return render_func(self, key, value)
File "C:\Users\AMD\AppData\Local\Programs\Python\Python35\lib\site-packages\mutagen\mp4\__init__.py", line 732, in __render_cover 
    b"data", struct.pack(">2I", imageformat, 0) + cover))

TypeError: can't concat bytes to str

相关的代码如下:

from mutagen.mp4 import MP4

image = jpgname + '.jpg'
meta['\xa9nam'] = song
meta['\xa9ART'] = artist
meta['\xa9alb'] = album
meta = MP4(songPath)
meta['covr'] = image
meta.save()

其余的元数据都可以正常使用,但是图片部分完全破坏了整个代码。
1个回答

11

Mutagen文档中得知:

MP4元数据 'covr' - 封面艺术品,是一个MP4Cover对象的列表(这些对象被标记为字符串)。

MP4Cover imageformat - 图像的格式(可以是FORMAT_JPEG或FORMAT_PNG)

from mutagen.mp4 import MP4, MP4Cover

video = MP4("test.mp4")

video["\xa9nam"] = "Test1"
video["\xa9ART"] = "Test2"
video["\xa9alb"] = "Test3"

with open("cover.jpg", "rb") as f:
    video["covr"] = [
        MP4Cover(f.read(), imageformat=MP4Cover.FORMAT_JPEG)
    ]

video.save()

将文件函数替换为打开函数可以使整个脚本工作,谢谢。 - Daniel Rachfał
@DanielRachfał 抱歉,我本来想写 open 的。老实说,我不知道为什么我写了 file,这只在 Python 2 中有效。无论如何,很高兴能帮到你。请考虑接受这个答案。 - Simon Kirsten
你能用.mp3文件使它工作吗?怎么做? - imrek
1
@DrunkenMaster 当然,看这里:https://dev59.com/9XRC5IYBdhLWcg3wG9Jb - Simon Kirsten
@SimonKirsten 非常感谢您的帮助。我想知道,为什么您要将MP4Cover实例放在单例列表中?这是不必要的吗?还是您只是想将MP4Cover内容放在一行上,并使用方括号而不是圆括号? - Luke Davis
@LukeDavis 我将其放入列表中,因为文档告诉我这样做:“封面艺术品,MP4Cover对象列表”,而且我见过带有多个艺术品的mp4,所以列表是有意义的。但对于mp3可能会有所不同! - Simon Kirsten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接