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

Posted: | Tags: Python

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

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

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以外のファイルにも適用されている。

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については以下のリンクの公式ドキュメントにまとめられているが、どういう情報を表しているのかが分かりにくい。

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

関連カテゴリー

関連記事