现在网上下载的mp3,放到电脑里面很多时候你可以看到mp3文件会显示出专辑图片,
如下图这样:
就这种效果,有的歌曲没得,有的有,
百度百科这样介绍到:
ID3标签
ID3是一种metadata容器,多应用于MP3格式的音频文件中。它可以将相关的曲名、演唱者、专辑、音轨数等信息存储在MP3文件中。
ID3标签是MP3音乐档案中的歌曲附加讯息,它能够在MP3中附加曲子的演出者、作者以及其它类别资讯,方便众多乐曲的管理。缺少ID3标签并不会影响 MP3的播放,但若没有的话,管理音乐文件也会相当的麻烦。如果你在网上downloadMP3,里面多半已经写有预设的ID3讯息。如果你想要将其清除重设,使用WinAMP中的“Alt + 3”热键,就能修改MP3档案中之的ID3标签。
ID3Tags
此外,ID3也就是ID3Tags,其中的“Tag”在英文中名词的一个意思是“标签”,所以“ID3Tags”也就是“MP3文件曲目标签”的意思。
有些地方以“ID3”这样的简称来代表“ID3Tags”,二者本质是一样的。
标准的制定
如果没有ID3,那么人们只能根据文件名判断一首歌它是什么内容了,何况就算听出了是什么歌,它的演唱者、专辑名称你也未必背得下来,所以给MP3文件增加内置的标签是理所当然的事情。有趣的是,MP3的标签并没有一个ISO国际标准,ID3的各种版本只是一个近乎事实上的标准,并没有人强迫播放器或者编码程序必须支持它。
博主我对mp3的这些内部结构也不了解
最近在做一个播放器,我要显示出当前播放的歌曲的缩略图,第一种想到一个很笨的方法,就是把这首歌拿到某音乐网站搜一下,然后抓取图片,
发现这还是很难做的,搜到歌曲后要点击播放才会异步去下载专辑图片,要去分析网页中的js代码,麻烦,随便看了一下没有看出什么端倪,
然后我就换思路了,很多歌曲里面都内置了专辑图,如果能够提取出来岂不是更好,也不用联网了,而且我发现好些播放器都是这么做的,并不是任何一首歌曲都能搜出专辑图。
然后我在网上搜了一下,id3提取专辑图片。果然,一条实用的都没找到,好些文章都是说其原理,具体怎么提取却没有说的,百度不好使,还是换了谷歌试了一把,
同时把搜索关键字改成英文(我这么搜的:how to get picture from mp3 file..博主英文很烂,不要笑话,只是给大家一个思路),果然在一个国外很火的IT问答社区看到了我想要的。(推荐一下,这个网站真的很好,解决了我很多问题: http://stackoverflow.com)
from mutagen import File afile = File('some.mp3') # mutagen can automatically detect format and type of tags artwork = afile.tags['APIC:e'].data # access APIC frame and grab the image with open('image.jpg', 'wb') as img: img.write(artwork) # write artwork to new image
使用 print afile.tags 可以看到这个文件里面所有的tags,然后提取你想要的,
我使用open("src/temp.jpg","w").write(afiles.tags[‘APIC:e‘].data)提取到了图片的数据,保存到一个新的图片了,不得不说python类库很丰富
这个模块还有很多其他的方法可以自己研究研究;
以上解决了我的问题,
网上流传的通用的提取方法是把mp3作为二进制文件读入,截取指定长度的内容,至于截取那部分数据可以参看一下id3的结构组成介绍