Mutagen:如何提取专辑封面属性?

时间:2019-02-19 01:48:12

标签: python image id3 mutagen

我正在尝试使用python 3.7.1和mutagen 1.42从mp3文件中获取专辑封面图片的属性(到目前为止只是宽度和高度),但到目前为止似乎没有任何作用。我仍然能够正确提取其他一些信息

该文档告诉的是APIC,但是尝试显示所有标签并没有显示与任何图片相关的任何内容(并且我的mp3测试文件 有专辑图片):

import os,sys
from mutagen.mp3 import MP3
from mutagen.easyid3 import EasyID3

song_path = os.path.join(sys.argv[1]) # With sys.argv[1] the path to a mp3 file containing a picture
track = MP3(song_path, ID3=EasyID3)
pprint(track.get('title')[0] + ' ' + str(track.info.length) + 's, ' + str(int(track.info.bitrate / 1000)) + 'kbps')
print(track.keys())

结果,使用我的文件:

> Exponential Tears 208.0s, 205kbps
> ['album', 'copyright', 'encodedby', 'length', 'title', 'artist', 'albumartist', 'tracknumber', 'genre', 'date', 'originaldate']

(此mp3文件确实具有嵌入的图片,使用任何音乐软件都可以看到该图片。)

我发现有很多不同的诱变剂处理方法,但有些似乎已经过时,有些则行不通,我不明白我在这里缺少什么。

这里的任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

好的,我最终弄清楚了:EasyID3模块仅处理大多数常用标签,并且不包含图片数据(APIC)。为此,您需要使用ID3模块,该模块更易于理解。然后,寻找APIC:键,该键将图片存储为字节字符串。

这里有个例子,使用PIL处理图片:

import os,sys
from io import BytesIO
from mutagen.mp3 import MP3
from mutagen.id3 import ID3
from PIL import Image

song_path = os.path.join(sys.argv[1])
track = MP3(song_path)
tags = ID3(song_path)
print("ID3 tags included in this song ------------------")
print(tags.pprint())
print("-------------------------------------------------")
pict = tags.get("APIC:").data
im = Image.open(BytesIO(pict))
print('Picture size : ' + str(im.size))

希望有帮助,祝您好运! ;)