python提取mp3专辑图片

现在网上下载的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的结构组成介绍

时间: 2024-10-12 17:16:10

python提取mp3专辑图片的相关文章

读取MP3专辑图片

1 #define WIN32_LEAN_AND_MEAN 2 #define NOWINRES 3 #define NOSERVICE 4 #define NOMCX 5 #define NOIME 6 #include "windows.h" 7 8 #include <stdio.h> 9 #include <malloc.h> 10 11 #define TAG_SIZE(a) (((a)[0]&0x7F)*0x200000 + ((a)[1]&

Python提取图片的ROI

图像处理经常需要提取图片的ROI,本文使用Python提取图片的ROI. 使用的Module是PIL (Pillow),一个图像处理库,用到的函数为类 Image 中的 crop 方法. 函数原型为: Image.crop(box=None) Returns a rectangular region from this image. The box is a 4-tuple defining the left, upper, right, and lower pixel coordinate.

Python实战:美女图片下载器,海量图片任你下载

Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习Python这门语言. 本文是在前一部分Python基础之上Python实战:Python爬虫学习教程,获取电影排行榜,再次升级的Python网页爬虫实战课程. 1.项目概述. 利用XPath和requests模块进行网页抓取与分析,达到网页图片下载的效果. 抓爬图片地址:http://www.2c

python进行mp3格式判断

python进行mp3格式判断 项目中使用mp3格式进行音效播放,遇到一个mp3文件在程序中死活播不出声音,最后发现它是wav格式的文件,却以mp3结尾.要对资源进行mp3格式判断,那么如何判断呢,用.mp3后缀肯定不靠谱,得从编码格式判断,方法如下: 1.mp3编码 MP3文件是一种流媒体文件格式,所以没有文件头.像AVI.WAV这种有文件头的格式,很好判断,他们都是RIFF开头的,只要进行RIFF字符串对比,就可以查出是否是AVI.WAV,而mp3就只能分析编码格式了.这里大概说mp3编码规

爬虫学习 08.Python网络爬虫之图片懒加载技术、selenium和PhantomJS

爬虫学习 08.Python网络爬虫之图片懒加载技术.selenium和PhantomJS 引入 今日概要 图片懒加载 selenium phantomJs 谷歌无头浏览器 知识点回顾 验证码处理流程 今日详情 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据 #!/usr/bin/env python # -*- coding:utf-8 -*- import requests from lxml import

Python 提取新浪微博的博文中的元素(包含Text, Screen_name)

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-8 @author: guaguastd @name: extractWeiboEntities.py ''' if __name__ == '__main__': import json # get weibo_api to access sina api from sinaWeiboLogin import sinaWeiboLogin sinaWeib

PHP 正则表达式匹配 img ,PHP 正则提取或替换图片 img 标记中的任意属性。

PHP正则提取或替换img标记属性 PHP 正则表达式匹配 img ,PHP 正则提取或替换图片 img 标记中的任意属性. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <?php /*PHP正则提取图片img标记中的任意属性*/ $str = '<center><img src="/uploads/images/20100516000.jpg"

关于使用TexturePackerGUI将图片合成和用Python Imaging Library将图片分解

写这片博客前,我在学习cocos2d-x,正在做一个微信打飞机的项目,为了将飞机图片资源合成为一张,使用到了TexturePackerGUI软件,在这介绍使用方法,后面是将这张合成图片分解成原来图片的方法. 合成 软件下载地址 破解完成之后就开始使用,对里面控件不熟悉的请参考这篇文章,虽然看起来复杂,但是只要把你所有需要合成的资源全部移到右边的框内就行了,如下图(蓝色的地方): 好了,把图片全部拖进去之后,就可以开始导出了,选择菜单栏中的Publish,在此之前,请在左边的DataFile中设置

Java与Python下载Bing首页图片

Java与Python下载Bing首页图片 一,首先是Java代码 import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache