如何使用Python将唱片集艺术嵌入MP3?
我一直在使用诱变剂来读取和写入MP3标签,但我希望能够将相册艺术直接嵌入到文件中。看起来您必须为MP3添加一种特殊类型的帧。请参阅上的网站 另外,诱变剂教程暗示您可以在诱变剂中添加ID3标签,我已经使用该模块完成了这项工作如何使用Python将唱片集艺术嵌入MP3?,python,mp3,metadata,id3,albumart,Python,Mp3,Metadata,Id3,Albumart,我一直在使用诱变剂来读取和写入MP3标签,但我希望能够将相册艺术直接嵌入到文件中。看起来您必须为MP3添加一种特殊类型的帧。请参阅上的网站 另外,诱变剂教程暗示您可以在诱变剂中添加ID3标签,我已经使用该模块完成了这项工作 def update_id3(mp3_file_name, artwork_file_name, artist, item_title): #edit the ID3 tag to add the title, artist, artwork, date, a
def update_id3(mp3_file_name, artwork_file_name, artist, item_title):
#edit the ID3 tag to add the title, artist, artwork, date, and genre
tag = eyeD3.Tag()
tag.link(mp3_file_name)
tag.setVersion([2,3,0])
tag.addImage(0x08, artwork_file_name)
tag.setArtist(artist)
tag.setDate(localtime().tm_year)
tag.setTitle(item_title)
tag.setGenre("Trance")
tag.update()
以下是如何使用诱变剂将example.png作为专辑封面添加到example.mp3中:
from mutagen.mp3 import MP3
from mutagen.id3 import ID3, APIC, error
audio = MP3('example.mp3', ID3=ID3)
# add ID3 tag if it doesn't exist
try:
audio.add_tags()
except error:
pass
audio.tags.add(
APIC(
encoding=3, # 3 is for utf-8
mime='image/png', # image/jpeg or image/png
type=3, # 3 is for the cover image
desc=u'Cover',
data=open('example.png').read()
)
)
audio.save()
mid3v2是一个很好的小型CLI工具,它帮助我检查了我在开发id3时所做的工作,它是id3v2的诱变剂版本。它与Python诱变剂库捆绑在一起。这个小工具的来源也给了我很多关于如何使用诱变剂的答案。
您是否正在尝试将图像嵌入到大量文件中?如果是这样的话,我找到了一个脚本(见链接),它遍历一组目录,查找图像,并将它们嵌入到MP3文件中。这对我来说很有用,因为我想在我的(现已失效的)iPhone上的CoverFlow中看到一些东西。这不是一个很坏的主意吗?你会不会在一张专辑的所有mp3上多次嵌入同一张图片来增加你的mp3大小?相册艺术应该属于相册所在的文件夹。@nosklo有mp3播放器,只显示嵌入的图片,而不显示相册中的图片folder@nosklo我发现我的mp3文件太大了,一个小小的缩略图并没有多大区别。我估计我的平均大小为6MB,我允许我的缩略图最大为60KB,所以它们只增加了文件大小的1%。使用JPEG,结果是很多。这不起作用;我按照上面的代码进行操作,得到了“TypeError:需要一个整数”对于我来说也不是,我得到:
TypeError:“str”对象不能解释为整数。这里的完整跟踪和源代码:我发现有必要在save
中使用v2\u version=3
,以便Windows 7可以读取新标签,我通过直接读取ID3
对象简化了此代码。否则,这个答案是完美的,没有其他人报告的错误。@MarkRansom,您是如何“通过直接读取ID3对象来简化此代码的”?请在答案中发布您的代码。答案很好,但在我的例子中,我发现有必要添加“rb”模式来读取成功,就像这样:data=open('example.png','rb').read()
从v0.7开始,用法如下:audiofile=eyed43.load(file_name)
和audiofile.tag.artist=artist
,请看:这个博客很好地解释了eyed3的实现,它使用了最新的API。eyeD3不支持Unicode,因此每当指向音乐文件或图片的路径包含任何非ASCII字符时,它都会失败。因此,如果你有像“Canção do mar”、“Dvořák's 9.Simphonie”或昨日は歌を歌いました". 我建议使用Python的metagen模块。链接已过期。