Pythonでmp3などのID3タグを編集するmutagenの使い方

Pythonのタグ編集ライブラリ、mutagen

Pythonのライブラリmutagenを使うと、mp3などのマルチメディアファイルのタグ(メタデータ)を編集することができます。

Overview — mutagen Mutagen is a Python module to handle audio metadata. It supports ASF, FLAC, MP4, Monkey’s Audio, MP3, Musepack, Ogg Opus, Ogg FLAC, Ogg Speex, Ogg Theora, Ogg Vorbis, True Audio, WavPack, OptimFROG, and AIFF audio files.

pipでインストールできます。 $ pip install mutagen

ここでは、ID3タグを編集する例を示す。 ID3についての詳細は以下のリンクを参照。もともとはmp3用に作られた規格だが、現在はmp4(m4a)などのmp3以外のファイルにも適用されています。

ID3タグ - Wikipedia ID3 - Wikipedia ID3.org - The MP3 Tag Standard

mutagen.easyid3 アーティスト名やアルバム名、トラック番号などを読み出したり書き込んだりするだけなら、EasyID3モジュールを使うのが簡単。

from mutagen.easyid3 import EasyID3

曲名を書き込む場合、以下のようにします。

path = 'example.mp3'
tags = EasyID3(path)
tags['title'] = 'new_title'
tags.save()

シンプルなインターフェースを実現するため限られたタグしか編集できないが、基本的な用途では十分。編集できるタグはEasyID3.valid_keys.keys()で確認できます。

for key in EasyID3.valid_keys.keys():
    print(key)
# album
# bpm
# compilation
# composer
# copyright
# encodedby
# lyricist
# length
# media
# mood
# title
# version
# artist
# albumartist
# conductor
# arranger
# discnumber
# organization
# tracknumber
# author
# albumartistsort
# albumsort
# composersort
# artistsort
# titlesort
# isrc
# discsubtitle
# language
# genre
# date
# originaldate
# performer:*
# musicbrainz_trackid
# website
# replaygain_*_gain
# replaygain_*_peak
# musicbrainz_artistid
# musicbrainz_albumid
# musicbrainz_albumartistid
# musicbrainz_trmid
# musicip_puid
# musicip_fingerprint
# musicbrainz_albumstatus
# musicbrainz_albumtype
# releasecountry
# musicbrainz_discid
# asin
# performer
# barcode
# catalognumber
# musicbrainz_releasetrackid
# musicbrainz_releasegroupid
# musicbrainz_workid
# acoustid_fingerprint
# acoustid_id

関数を定義しておくと便利です。 タグの書き込み。トータルのトラック数(曲数)は'tracknumber'の分母で表されます。ディスク数も同じ。

def set_id3_tag(file_path, title=None, artist=None, albumartist=None, album=None, genre=None,
                track_num=None, total_track_num=None, disc_num=None, total_disc_num=None):
    tags = EasyID3(file_path)

    if title:
        tags['title'] = title
    if artist:
        tags['artist'] = artist
    if albumartist:
        tags['albumartist'] = albumartist
    if album:
        tags['album'] = album
    if genre:
        tags['genre'] = genre
    if total_track_num:
        if track_num:
            tags['tracknumber'] = '{}/{}'.format(track_num, total_track_num)
        else:
            tags['tracknumber'] = '/{}'.format(total_track_num)
    else:
        if track_num:
            tags['tracknumber'] = '{}'.format(track_num)
    if total_disc_num:
        if disc_num:
            tags['discnumber'] = '{}/{}'.format(disc_num, total_disc_num)
        else:
            tags['discnumber'] = '/{}'.format(total_disc_num)
    else:
        if track_num:
            tags['discnumber'] = '{}'.format(disc_num)

    tags.save()

タグの読み出し(表示)。

def show_id3_tags(file_path):
    tags = EasyID3(file_path)
    print(tags.pprint())

タグの削除。

def delete_id3_tag(file_path, target_tag):
    tags = EasyID3(file_path)
    tags.pop(target_tag, None)
    tags.save()

def delete_all_id3_tag(file_path):
    tags = EasyID3(file_path)
    tags.delete()
    tags.save()

以下のように使います。

set_id3_tag(path, albumartist='new_artist')
delete_id3_tag(path, 'discnumber')
show_id3_tags(path) 

mutagen.id3

ID3タグを直接編集する場合、ID3モジュールを使います。

from mutagen.id3 import ID3, TIT2

path = 'example.mp3'
tags = ID3(path)
print(tags.pprint())

tags.add(TIT2(encoding=3, text="new_title"))
tags.save()

書き込む場合は、TIT2(曲名)やTALB(アルバム名)などのタグIDを指定します。 タグIDについては以下のリンクの公式ドキュメントにまとめられているが、どういう情報を表しているのかが分かりにくい。

id3v2.4.0-frames - ID3.org

既存のファイルのID3タグをpprint()メソッドで表示して対応を確認するほうが楽かもしれない。

Last Updated: 6/26/2019, 10:34:03 PM