如何获取Python中某首音乐的专辑图片?
How to I obtain the Album picture of a music in Python?
我正在尝试将音乐 (mp3) 的专辑图片作为图像插入 Python GUI window。我使用了 mutagen ID3 picture class for this purpose. It was described in the docs 但我完全不知道该怎么做。因此,我想请求一个示例来说明如何正确执行此操作。如果可能,请说明是否有其他选择。
谢谢!
Stagger是修改id3v2标签的库;它非常易于使用:
In [1]: import stagger
In [2]: mp3 = stagger.read_tag('/home/gokul/Music/Linkin Park - Burning In The Skies.mp3')
In [3]: mp3.artist
Out[3]: 'Linkin Park'
In [4]: mp3.album
Out[4]: 'A Thousand Suns'
In [5]: mp3.picture # the cover has not been set yet
Out[5]: ''
其余API与此类似。您可以这样修改标签:
In [6]: mp3.album = 'Changed It'
In [7]: mp3.album
Out[7]: 'Changed It'
要设置album/cover图片,您只需....
In [10]: mp3.picture = '/home/gokul/Pictures/Cover.jpg' # path to file
In [11]: mp3.picture # the cover has been saved!
Out[11]: 'Other(0)::<2834 bytes of jpeg data>'
您现在必须将标签保存到文件中:
In [12]: mp3.write()
就是这样!完成 ;)
如果您想查看文件中的所有标签,请使用 mp3.frames
:
In [13]: mp3.frames()
Out[13]:
[TIT2(encoding=0, text=['Burning In The Skies']),
TPE1(encoding=0, text=['Linkin Park']),
TALB(encoding=0, text=['Changed It']),
APIC(encoding=None, mime='image/jpeg', type=0, desc='', data=<2834 bytes of binary data b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00'...>)]
干杯!
P.S。您可以使用 stagger 修改任何 id3v2 标签;其中一些(最常见的)可以使用 mp3.title = 'title'
等格式进行修改。请参阅 stagger's GitHub page 以编辑其他(不常见和复杂的)标签。
我从 Gokul 的回答开始,发现有一种方法可以使用以下代码解码您通过交错获得的图像数据:
from PIL import Image
import stagger
import io
mp3 = stagger.read_tag('song.mp3')
by_data = mp3[stagger.id3.APIC][0].data
im = io.BytesIO(by_data)
imageFile = Image.open(im)
imageFile 变量保存图像的方式与直接使用
导入 jpg 的方式相同
imageFile = Image.open("test_image.jpg")
现在您可以随心所欲地使用 mp3 文件中的专辑封面。我认为有多种方法可以将图像添加到 GUI,但我使用的方法是添加行
import tkinter
from PIL import ImageTk
photo = ImageTk.PhotoImage(imageFile)
label = tkinter.Label(image=photo)
label.image = photo
label.pack()
我正在尝试将音乐 (mp3) 的专辑图片作为图像插入 Python GUI window。我使用了 mutagen ID3 picture class for this purpose. It was described in the docs 但我完全不知道该怎么做。因此,我想请求一个示例来说明如何正确执行此操作。如果可能,请说明是否有其他选择。
谢谢!
Stagger是修改id3v2标签的库;它非常易于使用:
In [1]: import stagger
In [2]: mp3 = stagger.read_tag('/home/gokul/Music/Linkin Park - Burning In The Skies.mp3')
In [3]: mp3.artist
Out[3]: 'Linkin Park'
In [4]: mp3.album
Out[4]: 'A Thousand Suns'
In [5]: mp3.picture # the cover has not been set yet
Out[5]: ''
其余API与此类似。您可以这样修改标签:
In [6]: mp3.album = 'Changed It'
In [7]: mp3.album
Out[7]: 'Changed It'
要设置album/cover图片,您只需....
In [10]: mp3.picture = '/home/gokul/Pictures/Cover.jpg' # path to file
In [11]: mp3.picture # the cover has been saved!
Out[11]: 'Other(0)::<2834 bytes of jpeg data>'
您现在必须将标签保存到文件中:
In [12]: mp3.write()
就是这样!完成 ;)
如果您想查看文件中的所有标签,请使用 mp3.frames
:
In [13]: mp3.frames()
Out[13]:
[TIT2(encoding=0, text=['Burning In The Skies']),
TPE1(encoding=0, text=['Linkin Park']),
TALB(encoding=0, text=['Changed It']),
APIC(encoding=None, mime='image/jpeg', type=0, desc='', data=<2834 bytes of binary data b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00'...>)]
干杯!
P.S。您可以使用 stagger 修改任何 id3v2 标签;其中一些(最常见的)可以使用 mp3.title = 'title'
等格式进行修改。请参阅 stagger's GitHub page 以编辑其他(不常见和复杂的)标签。
我从 Gokul 的回答开始,发现有一种方法可以使用以下代码解码您通过交错获得的图像数据:
from PIL import Image
import stagger
import io
mp3 = stagger.read_tag('song.mp3')
by_data = mp3[stagger.id3.APIC][0].data
im = io.BytesIO(by_data)
imageFile = Image.open(im)
imageFile 变量保存图像的方式与直接使用
导入 jpg 的方式相同imageFile = Image.open("test_image.jpg")
现在您可以随心所欲地使用 mp3 文件中的专辑封面。我认为有多种方法可以将图像添加到 GUI,但我使用的方法是添加行
import tkinter
from PIL import ImageTk
photo = ImageTk.PhotoImage(imageFile)
label = tkinter.Label(image=photo)
label.image = photo
label.pack()