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

8

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

如果有人知道如何做到这一点,并能提供一些伪代码以解释使用的技术,我会很感激。我想要提取的主要标签是文件的标题和艺术家,如果有可用的话还有专辑。

从哪里开始?


2
在阅读@abarnert的答案后,我进行了一些搜索,然后发现了以下内容,这是一个非常好的Mutagen包装器的起点,它可以智能地获取许多格式的常见字段:https://github.com/sampsyo/beets/blob/master/beets/mediafile.py - Emory Petermann
2
有一个在pypi上的包,它包装了muatgen并使得使用多种格式变得容易 - https://pypi.org/project/phrydy。顺便说一下,它是基于https://github.com/sampsyo/beets/blob/master/beets/mediafile.py的。 - sudormrfbin
1
@Gokul的评论应该是答案。对于我的用例(获取和偶尔写入各种格式的艺术家/专辑标签),这个方法非常完美。它具有Pythonic风格,不需要处理TALB等标签。 - benshepherd
1个回答

12
每种标签类型都有不同的字段名称,它们并不完全对应。
如果你只想要一些最重要的字段,Mutagen为ID3v2和MP4/ITMF提供了“易用”的包装器。例如,你可以这样做:
>>> m = mutagen.File(path, easy=True)
>>> m['title']
[u'Sunshine Smile']
>>> m['artist']
[u'Adorable']
>>> m['album']
[u'Against Perfection']

但这仅适用于这两种文件格式。Vorbis、Metaflac、APEv2和WMT标签基本上是自由形式的键值或键值列表映射。Vorbis确实有一个推荐常见评论字段名称的集合,WM有一组由WMP GUI和.NET API映射的字段,但Metaflac和APEv2甚至没有那个。事实上,在Metaflac注释中看到“Artist”(来自旧ID3v1字段名称)和“ARTIST”(来自Vorbis)两者都很常见。 即使对于ID3v2,映射也不完美——iTunes将“TPE1”帧显示为“Artist”,而将“TPE2”显示为“Album Artist”,而Foobar2000将TPE2显示为“Artist”,将TXXX:ALBUM ARTIST显示为“Album Artist”。
所以,要做到这一点,你需要查看 iTMFVorbiscommentID3v2(或参见 Wikipedia)和 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

更好的解决方案是根据标签类型进行切换,并仅尝试适合该格式的字段。

幸运的是,其他人已经为您完成了这项工作。您可以在Hydrogen Audio论坛和维基以及其他各种项目中找到人们收集有关不同播放器/标记器如何将值映射到每个格式的几乎所有信息,并且各种其他项目已将该信息转换为简单的标记映射表,您可以只需获取并借用您的代码,例如来自MusicBrainz的此表MusicBrainz Picard甚至具有Mutagen的包装器,可让您使用一组一致的元数据名称(在此处描述)与所有标记类型一起使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接