Pythonでmp3などのID3タグを編集するmutagenの使い方
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()
メソッドで表示して対応を確認するほうが楽かもしれない。