用Python访问mp3元数据
在python中检索mp3元数据的最佳方式是什么? 我已经看到了几个框架,但我不确定哪个最好用….任何想法?
前几天我用eyeD3取得了很大的成功。 我发现它可以添加艺术品ID3标签,我看着其他模块不能。 您将不得不下载tar并从源文件夹执行python setup.py install
。
下面是该网站的相关示例。
读取包含v1或v2标签信息的mp3文件的内容:
import eyeD3 tag = eyeD3.Tag() tag.link("/some/file.mp3") print tag.getArtist() print tag.getAlbum() print tag.getTitle()
读取一个MP3文件(曲目长度,比特率等)并访问它的标签:
if eyeD3.isMp3File(f): audioFile = eyeD3.Mp3AudioFile(f) tag = audioFile.getTag()
可以select特定的标签版本:
tag.link("/some/file.mp3", eyeD3.ID3_V2) tag.link("/some/file.mp3", eyeD3.ID3_V1) tag.link("/some/file.mp3", eyeD3.ID3_ANY_VERSION) # The default.
或者你可以迭代原始帧:
tag = eyeD3.Tag() tag.link("/some/file.mp3") for frame in tag.frames: print frame
一旦标签链接到一个文件,它可以被修改和保存:
tag.setArtist(u"Cro-Mags") tag.setAlbum(u"Age of Quarrel") tag.update()
如果链接的标签是v2,并且您想将其保存为v1:
tag.update(eyeD3.ID3_V1_1)
阅读标签并将其从文件中删除:
tag.link("/some/file.mp3") tag.remove() tag.update()
添加一个新的标签:
tag = eyeD3.Tag() tag.link('/some/file.mp3') # no tag in this file, link returned False tag.header.setVersion(eyeD3.ID3_V2_3) tag.setArtist('Fugazi') tag.update()
我以前使用过诱变剂来编辑媒体文件中的标签。 有关诱变剂的好处是它可以处理其他格式,如mp4,FLAC等。我用这个API编写了很多成功的脚本。
你所追求的是ID3模块。 这是非常简单的,会给你正是你所需要的。 只需将ID3.py文件复制到您的站点包目录中,您就可以执行以下操作:
from ID3 import * try: id3info = ID3('file.mp3') print id3info # Change the tags id3info['TITLE'] = "Green Eggs and Ham" id3info['ARTIST'] = "Dr. Seuss" for k, v in id3info.items(): print k, ":", v except InvalidTagError, message: print "Invalid ID3 tag:", message
检查这一个出来:
https://github.com/Ciantic/songdetails
用法示例:
>>> import songdetails >>> song = songdetails.scan("data/song.mp3") >>> print song.duration 0:03:12
保存更改:
>>> import songdetails >>> song = songdetails.scan("data/commit.mp3") >>> song.artist = "Great artist" >>> song.save()
eyed3
一个问题是,它会抛出普通MP3文件的NotImplementedError("Unable to write ID3 v2.2")
。
根据我的经验, mutagen
级EasyID3
工作更可靠。 例:
from mutagen.easyid3 import EasyID3 audio = EasyID3("example.mp3") audio['title'] = u"Example Title" audio['artist'] = u"Me" audio['album'] = u"My album" audio['composer'] = u"" # clear audio.save()
所有其他标签可以这样访问和保存,这将用于大多数目的。 更多信息可以在Mutagen教程中find。
“Dive Into Python”一书中的一个简单例子对我来说可行, 这是下载链接,示例是fileinfo.py。 不知道这是否是最好的,但它可以做基本的工作。
整本书在线提供。
我看了上面的答案,发现他们对我的项目不好,因为GPL的许可问题。
我发现这个: PyID3Lib ,而特定的Python绑定发布date是旧的,它使用ID3Lib ,它本身是最新的。
值得一提的是,两者都是LGPL ,并且很好走。
只是更多的信息给你们:
请参阅PythonInMusic页面中的“MP3文件和元数据编辑器”部分。
最简单的方法是songdetails ..
读取数据
import songdetails song = songdetails.scan("blah.mp3") if song is not None: print song.artist
类似的编辑
import songdetails song = songdetails.scan("blah.mp3") if song is not None: song.artist = u"The Great Blah" song.save()
不要忘了在名字前加上你 ,直到你懂中文。
你可以使用python glob模块批量读取和编辑
恩。
import glob songs = glob.glob('*') // script should be in directory of songs. for song in songs: // do the above work.
这个工具包可以做你需要的。 我不能说这是否是“最好的”,但是真的,如果它做到了你所需要的,这就是最重要的,对吧?
HTH
除了阅读元数据之外,它可以完全依赖于你想要做什么。 如果只是你需要的比特率/名称等,而没有别的,轻量级的东西可能是最好的。
如果你操纵的是过去的PyMedia,可能是合适的。
有很多,不pipe你做什么,都要确保在大量的样品介质上进行testing。 特别是有几个不同版本的ID3标签,所以请确保它不过时。
我个人喜欢用这个小的MP3Info类。 这是相当古老的。
如果你可以使用IronPython,那就是TagLibSharp。 它可以从任何.NET语言中使用 。
经过一些初步研究,我认为songdetails可能适合我的用例,但它不处理.m4b文件。 诱变剂。 请注意,尽pipe一些人已经(合理地)考虑到了Mutagen的格式原生键的表面问题,这些键格式各不相同(TIT2为mp3,标题为ogg,\ xa9nam为mp4,标题为WMA等),mutagen.File )有一个(new?)easy = True参数,它提供了EasyMP3 / EasyID3标签,它具有一致的,尽pipe有限的一组键。 到目前为止,我只进行了有限的testing,但是当使用easy = True时,像专辑,艺术家,albumartist,genre,tracknumber,discnumber等常见的键都存在并且对于.mb4和.mp3文件是相同的。非常方便我的目的。