使用Python访问mp3元数据
在python中检索mp3元数据的最佳方法是什么?我已经看到了几个框架,但是我不确定哪个将是最好的使用....有什么想法吗?
解决方案
回答
该工具包可以满足需求。我不能说这是否是"最好的",但实际上,如果它满足需求,那就很重要了,对吧?
高温超导
回答
《 Dive Into Python》一书中的一个简单示例对我来说很好,这是下载链接,示例是fileinfo.py。不知道它是否是最好的,但它可以完成基本工作。
整本书可在此处在线获得。
回答
除了读取元数据外,它还可能完全取决于我们要执行的操作。如果仅是我们需要的比特率/名称等,而没有别的,那么轻量级的东西可能是最好的。
如果我们要操作的是mp3,则建议使用PyMedia。
无论我们得到什么,都有很多东西,请确保在大量示例媒体上进行测试。特别是ID3标签有几种不同的版本,因此请确保它不是过时的。
我个人很幸运地使用了这个小的MP3Info类。虽然已经很老了。
http://www.omniscia.org/~vivake/python/MP3Info.py
回答
我们所追求的是ID3模块。这非常简单,可以为我们提供所需的确切信息。只需将ID3.py文件复制到site-packages目录中,就可以执行以下操作:
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
回答
我以前使用过诱变剂来编辑媒体文件中的标签。关于mutagen的好处是它可以处理其他格式,例如mp4,FLAC等。我已经使用此API编写了许多脚本,并取得了很多成功。
回答
如果可以使用IronPython,则可以使用TagLibSharp。可以从任何.NET语言使用它。
回答
前几天,我使用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()
可以选择特定的标签版本:
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()
回答
我查看了以上答案,发现它们由于GPL许可问题而不适用于我的项目。
我发现了这一点:PyID3Lib,尽管该特定的python绑定发布日期较旧,但它使用的ID3Lib本身就是最新的。
值得一提的是,两者都是LGPL,而且都很好。
回答
检查这一:
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()