使用Python访问mp3元数据

时间:2020-03-05 18:39:12  来源:igfitidea点击:

在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()