7

mutagen、.ogg、.apev2、.wma、flac、mp4、および asf で受け入れられるすべてのファイル タイプを処理するには、どうすればよいですか? (ドキュメントが最も多いため、mp3を除外しました)

これがどのように行われるかを知っている人が、使用されている手法を説明するために疑似コードを提供できれば幸いです。抽出したい主なタグは、ファイルのタイトルとアーティスト、アルバムがある場合です。

どこから始めれば?

4

1 に答える 1

11

タグ タイプごとにフィールドの名前が異なり、すべてが完全にマッピングされるわけではありません。

最も重要なフィールドのいくつかだけが必要な場合、Mutagen には ID3v2 および MP4/ITMF 用の「簡単な」ラッパーがあります。したがって、たとえば、次のようにできます。

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

ただし、これはこれら 2 つのファイル形式でのみ機能します。Vorbis、Metaflac、APEv2、および WMT タグは、本質的に自由形式のキー: 値またはキー: [値のリスト] マッピングです。Vorbis には、一般的なコメント フィールドに推奨される一連の名前があり、WM には、WMP GUI と .NET API によってマップされる一連のフィールドがありますが、Metaflac と APEv2 にはそれさえありません。実際、古い ID3v1 フィールド名の「Artist」と Vorbis の「ARTIST」の両方が Metaflac のコメントに表示されることはよくあります。

また、ID3v2 の場合でも、マッピングは完全ではありません。iTunes では「TPE1」フレームが「アーティスト」として、「TPE2」が「アルバム アーティスト」として表示されますが、Foobar2000 では TPE2 が「アーティスト」として、TXXX: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のこのコードのように、コードを借りてください。MusicBrainz Picardには Mutagen のラッパーもあり、すべてのタグ タイプで一貫したメタデータ名のセット (ここで説明するもの) を使用できます。

于 2013-10-05T22:01:39.257 に答える