用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")

根据我的经验, mutagenEasyID3工作更可靠。 例:

 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类。 这是相当古老的。

http://www.omniscia.org/~vivake/python/MP3Info.py

如果你可以使用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文件是相同的。非常方便我的目的。