使用Mutagen处理所有接受的文件类型

lzc*_*lzc 5 python audio audio-processing mutagen audioformat

为了处理mutagen,.ogg,.apev2,.wma,flac,mp4和asf所接受的每种文件类型,我需要做什么?(我排除了mp3,因为它上面有最多的文档)

如果知道如何完成这项工作的人可以提供一些伪代码来解释所使用的技术,我将不胜感激.我想要提取的主要标签是标题,文件的艺术家,专辑(如果有).

从哪儿开始?

aba*_*ert 9

每个标记类型都有不同的字段名称,并且它们并不完全映射.

如果你只想要一些最重要的领域,Mutagen拥有ID3v2和MP4/ITMF的"简单"包装器.因此,例如,您可以这样做:

>>> m = mutagen.File(path, easy=True)
>>> m['title']
[u'Sunshine Smile']
>>> m['artist']
[u'Adorable']
>>> m['album']
[u'Against Perfection']
Run Code Online (Sandbox Code Playgroud)

但这只适用于这两种文件格式.Vorbis,Metaflac,APEv2和WMT标记本质上是自由格式的键:值或键:[值列表]映射.Vorbis确实有一组推荐的常用注释字段名称,WM有一组由WMP GUI和.NET API映射的字段,但Metaflac和APEv2甚至都没有.实际上,在旧的ID3v1字段名称中看到"Artist"和在Metaflac评论中看到来自Vorbis的"ARTIST"是很常见的.

即使对于ID3v2,映射也不完美 - iTunes将"TPE1"帧显示为"Artist",将"TPE2"显示为"Album Artist",而Foobar2000将TPE2显示为"Artist",将TXXX:ALBUM ARTIST显示为"Album Artist" ".

所以,要做到这一点,你必须查看iTMF,Vorbiscomment,ID3v2(或参见维基百科)和WMT,然后查看你拥有的文件并添加一些启发式方法来决定如何从文件中获得你想要的东西你有.

例如,您可以尝试这样的事情:

>>> m = mutagen.File(path)
>>> for tag in ('TPE1', 'TPE2', u'©ART', 'Author', 'Artist', 'ARTIST',
...             'TRACK ARTIST', 'TRACKARTIST', 'TrackArtist', 'Track Artist'):
...     try:
...         artist = unicode(m[tag][0])
...         break
...     except KeyError:
...         pass
Run Code Online (Sandbox Code Playgroud)

更好的解决方案是打开标签类型,只尝试格式的相应字段.

幸运的是,其他人已经为你完成了这项工作.您可以在Hydrogen Audio论坛和维基上找到人们收集的关于不同玩家/标签如何将值映射到每种格式的几乎所有信息,而其他各种项目已将这些信息转换为您可以选择的简单标签映射表.借用你的代码,像这样一个从MusicBrainz上.MusicBrainz Picard甚至还有一个Mutagen包装器,它允许您使用一组一致的元数据名称(这里描述的那些)与所有标签类型.