Pythonを利用したMP3カバーアート取得・更新のやり方


前回の記事「Pythonを利用したMP3メタデータ編集のやり方」で、MP3メタデータ編集について紹介しました。この記事では、MP3カバーアートの取得・更新方法を紹介します。

下記サイトのフリーBGMをMP3のサンプルデータとして利用しています。
なんでしょう? @ フリーBGM DOVA-SYNDROME

実行環境

下記pipコマンドにより音楽メタデータ操作ライブラリmutagen及びイメージ操作ライブラリpillowをインストール
pip install mutagen pillow

python 3.8.10 で実行可能なことを確認

カバーアート取得

mutagenのID3を利用することで、カバーアート(APIC:Attached Picture)を取得することができる。

from io import BytesIO

from mutagen.id3 import ID3
from PIL import Image

mp3_file_path = "なんでしょう?.mp3"
tags = ID3(mp3_file_path)

# カバーアート情報取得
apic = tags.get("APIC:")
if apic is not None:
    cover_img = Image.open(BytesIO(apic.data))
    artist, title = tags.get("TPE1"), tags.get("TIT2")
    cover_img.save(f"{artist}_{title}.jpg")

下記カバーアートが出力される(KK_なんでしょう?.jpg)

カバーアート更新

from io import BytesIO

from mutagen.id3 import APIC, ID3
from PIL import Image

mp3_file_path = "なんでしょう?.mp3"
tags = ID3(mp3_file_path)

# 更新用カバーアート画像ファイル作成
new_cover_file_path = "new_cover.jpg"
Image.new("RGB", (300, 300), (128, 0, 0)).save(new_cover_file_path)

# カバーアート更新
with open(new_cover_file_path, "rb") as img_file:
    cover_img_byte_str = img_file.read()
    tags.add(APIC(mime="image/jpeg", type=3, data=cover_img_byte_str))
tags.save()

# カバーアート更新結果確認
tags = ID3(mp3_file_path)
apic = tags.get("APIC:")
if apic is not None:
    cover_img = Image.open(BytesIO(apic.data))
    cover_img.show()

更新後の下記カバーアートが表示される(new_cover.jpg)

参考