当前位置:  开发笔记 > 编程语言 > 正文

使用Python访问mp3元数据

如何解决《使用Python访问mp3元数据》经验,为你挑选了8个好方法。

在python中检索mp3元数据的最佳方法是什么?我已经看到了几个框架,但我不确定哪个框架最好用......哪有想法?



1> Owen..:

我前几天使用eyeD3取得了很大的成功.我发现它可以在ID3标签上添加艺术品,而我看到的其他模块则不能.您必须python setup.py install从源文件夹下载tar并执行.

该网站的相关示例如下.

读取包含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()


eyeD3也是**GPL**...所以,如果像我一样你计划在你的程序中使用它,你必须将你的程序作为一个免费程序发布...与这些人一起玩,为什么他们不能在LGPL下发布?
@Ciantic:ID3标签非常简单,为什么你不自己创建一个库并在BSD下发布它?此外,*这个人*首先不拥有任何东西.看这里http://diveintopython.org/object%5Foriented%5Fframework/index.html
在较新的版本中,使用`import eyed3`(小写d).
请注意,这些注释适用于较旧版本的eyed3,并且不再适用.例如,link()函数已经消失,属性现在以声明方式设置,没有setter.
@voyager,ID3v1标签很简单,ID3v2标签很复杂......现在我已经为pytagger创建了BSD包装器http://github.com/Ciantic/songdetails我还没有标记它已发布,但是它有效.
不幸的是,大多数这些命令现在已经过时,甚至更新的`eyed3`也会导致普通MP3文件出错.最好使用`mutagen`类`EasyID3`,如[这个答案](http://stackoverflow.com/a/34970600/130427)所示.

2> jkp..:

我以前用过mutagen来编辑媒体文件中的标签.mutagen的优点在于它可以处理其他格式,例如mp4,FLAC等.我已经编写了几个使用此API取得了很大成功的脚本.


http://code.google.com/p/mutagen/ - 另请注意,Mutagen是GPL,因此大多数项目都是禁忌.
Mutagen很不错,但是我缺少一种统一的方式来获取艺术家,标题类型等。-您最终不得不知道各种键,这些键与格式有关。mp3的`TIT2`,ogg的`title`,mp4的`\ xa9nam`,WMA的`Title`等-很烂。

3> Chris Redfor..:

一个问题eyed3是它会抛出NotImplementedError("Unable to write ID3 v2.2")常见的MP3文件.

根据我的经验,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教程中找到.



4> Harley Holco..:

您所追求的是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


只是一张纸条.这个模块非常陈旧(2002)并且不支持ID3标签的V2

5> Corey Goldbe..:

检查一下:

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



6> PabloG..:

"Dive Into Python"一书中的一个简单例子对我来说没问题,这是下载链接,例如fileinfo.py.不知道它是否是最好的,但它可以完成基本工作.

整本书可在网上点击这里.


这个例子现在有点过时,无论是在python版本还是在ID3版本方面......

7> Ciantic..:

我看了上面的答案,发现由于GPL的许可问题,它们对我的项目不利.

我发现了这个:PyID3Lib,虽然特定的python绑定发布日期很旧,但它使用的是ID3Lib,它本身是最新的.

值得一提的是,两者都是LGPL,并且很好.



8> quabug..:

只是给你们的其他信息:

看一下PythonInMusic页面中的"MP3内容和元数据编辑器"部分.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有