mutagenでMP3のコメントを編集する

chosic.comというサイトでフリーの音源を漁るのが好きです。soundcloudなどで活動する人が投稿してくれて自分好みの曲が多いのでよく使っています。。

ダウンロードした楽曲がどういう条件で使えるのかわかるようにしておくためにコメントをちまちまと再生ソフトでメモするのですが、これをPython使ってもう少しシンプルな作業にしたいと思いました。

MP3ヘッダを扱えるmutagenというライブラリがあるのですが、メディアファイル全般を扱える結構汎用的なライブラリでちょっと複雑だったのでメモしときます。

コメントの読み出し: id3クラスを使います。ディクショナリ形式でアクセスができます。ここまでは結構いろんなサイトでも開設されていると思います。

from mutagen import id3

#...中略....

try:
    audio = id3.ID3(args.mp3file) #args.mp3fileにはファイル名を入れてね。
except id3._util.ID3NoHeaderError:
    print(f"{args.mp3file}にはヘッダがありません。")
    exit()

printf(audio["COMM::eng"][0])

コメントの書き出しと保存:id3クラスのCOMMメソッドを使ってコメントデータを生成するのですが、langという引数を設定するのと、コメントテキストは配列で与えること。ここがなかなか調べても出てこなかった。最後はsaveメソッドです。

from mutagen import id3

#...中略...

try:
    audio = id3.ID3(args.mp3file)
except id3._util.ID3NoHeaderError:
    print(f"{args.mp3file}にはヘッダがありません。作成します。")
    audio = id3.ID3()

comment = "この楽曲はアメリカ中西部の原住民のスタイルを踏襲しています。"

if "COMM::eng" in audio:
     audio['COMM::eng'] = id3.COMM(encoding=3, lang='eng',text=[comment])
audio.save(args.mp3file)
print(f"書き込まれたデータは:\n{audio['COMM::eng'][0]}")

ディクショナリ形式でCOMM::engを登録先に指定してもCOMM::engに登録されないというところが謎だったのですが、id3.COMMメソッドでlang=として3文字の言語コードを指定することで記入ができます。日本語のデータでも’eng’でよいと思います。多くのプレーヤソフトはengを参照しているように見えます。

なお、この手順でコメントを保存すると。 ID3v2v2.4のタグとして挿入されます。おおよそ問題はないと思いますが古いプレーヤを使っている人は注意。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です