使用 Mutagen 在 MP4 文件中嵌入专辑封面

Posted

技术标签:

【中文标题】使用 Mutagen 在 MP4 文件中嵌入专辑封面【英文标题】:Embedding album cover in MP4 file using Mutagen 【发布时间】:2016-10-20 05:59:53 【问题描述】:

我希望能够使用诱变剂将专辑封面添加到文件中,但是当我将其添加为文件时,它会返回:

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】:

来自mutagen docs:

MP4 meta 'covr' – 封面图,MP4Cover 对象列表(标记为 strs)。

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()

【讨论】:

把文件函数换成打开函数,让整个脚本工作起来,谢谢 @DanielRachfał 抱歉,我是想写open。老实说,我不知道为什么我写了file,它只适用于python 2。无论如何我很高兴我能提供帮助。请考虑接受答案。 你能用 .mp3 文件代替它吗?怎么样? @DrunkenMaster 当然,请看这里:***.com/questions/409949/… @SimonKirsten 非常感谢您的帮助。我想知道,您为什么将 MP4Cover 实例放在单例列表中?这是不必要的吗/您是否只是想将MP4Cover 的内容放在一行中并使用括号而不是圆括号?

以上是关于使用 Mutagen 在 MP4 文件中嵌入专辑封面的主要内容,如果未能解决你的问题,请参考以下文章

在我的网站上嵌入 Mp4 视频文件

如何给FLAC文件写入专辑封面?200分来领吧

运行jekyll服务时,嵌入式本地mp4无法在Chrome中播放(ECONNRESET)

iTextSharp 将 MP4 嵌入 PDF,但无法从 Acrobat Reader 播放

如何使用 swift 加载原生专辑视频

Python 3.8 Mutagen 不会读取 GEOB 标签