前回の記事「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)