首页 文章

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

提问于
浏览
4

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

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

从哪儿开始?

1 回答

  • 8

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

    如果你只想要一些最重要的领域,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确实有一组用于常见注释字段的recommended名称,WM有一组由WMP GUI和.NET API映射的字段,但Metaflac和APEv2很常见"Artist",来自旧版本ID3v1字段名称,以及来自Vorbis的"ARTIST",在Metaflac评论中 .

    即使对于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论坛和wiki中找到人们收集的关于不同玩家/标记如何将值映射到每种格式的几乎所有信息,并且各种其他项目已将该信息转换为简单的标记映射表,您可以随便拿起并借用对于您的代码,例如来自MusicBrainz的this one . MusicBrainz Picard甚至还有一个Mutagen包装器,它允许你使用一组一致的元数据名称(描述为here)和所有标签类型 .

相关问题