PythonでiTunesの曲のカスタムの歌詞を全て消す

iTunesで曲の歌詞を表示するにはApple Musicに登録しているか、自分で歌詞を入力する必要があるみたい。

support.apple.com

数日前に何を考えたのか、歌詞が表示されるといいよなと思って実際に入れようとしたんだけど、iTunesにある1,126曲を全て手入力するのはいやだなって思った。そこでなんとか自動で歌詞を入れることができないか調べたら、Lyrics Masterってツールがあったのでとりあえず入れてみた。

www.kenichimaehashi.com

Lyrics MasterはiTunesと連携して、iTunes内にある曲に歌詞をつけてくれるんですよね、しかも自動で。わぁとっても便利ー。ってことでやってみたんですけど、歌詞が見つからない曲があったり、Instrumentalだけど歌詞が入ってしまったり、と自分が求めていたものと微妙に違くて途中で止めてしまった(適切な設定ができていなかっただけかも)。歌詞が入らなかったり、歌詞が間違っている曲を一つずつ修正していくのはめんどくさいし、間違ったまま放置しておくのは嫌だし、なんとなく歌詞が表示されればいいなー程度に考えていたため修正に対するモチベーションが低かった。なので、いっそのこと歌詞なんて表示されなくていいのではないかと思ってしまった。

歌詞は表示されなくてよくなったので、今回入力したカスタムの歌詞を消したい。しかし、中途半端に歌詞を入力してしまっているのでどの曲に歌詞が入力されているかわからない。なのでiTunes内にある全ての曲の歌詞を削除するPythonスクリプトを書いた。

mutagen

mp3とかのメタデータを書いたり消したりできるPythonモジュールのmutagenを使う。

mutagen.readthedocs.io

インストール

普通にpipでインストールする。

$ pip install mutagen

iTunes内の曲の歌詞を消す

実際にmutagenを使って、曲の歌詞を消していく。今回はiTunesにMP3とM4Aしかなかったので、それらに対応したものにした。ITUNES_MEDIA_PATHは"iTunes Media"フォルダの場所にしておく。iTunes > 環境設定 > 詳細 に書いてある。

from mutagen.mp3 import MP3
from mutagen.mp4 import MP4
from mutagen import MutagenError
import glob

ITUNES_MEDIA_PATH = 'iTunes Mediaフォルダの場所'

def delete_lyrics_in_mp3(path):
    try:
        tags = MP3(path)
        if 'USLT::eng' in tags:
            tags.pop('USLT::eng', None)
            tags.save()
    except MutagenError:
        pass

def delete_lyrics_in_m4a(path):
    try:
        tags = MP4(path)
        if '\xa9lyr' in tags:
            tags.pop('\xa9lyr', None)
            tags.save()
    except MutagenError:
        pass

if __name__ == '__main__':
    mp3_list = glob.glob(ITUNES_MEDIA_PATH + '/Music/**/*.mp3', recursive=True)
    m4a_list = glob.glob(ITUNES_MEDIA_PATH + '/Music/**/*.m4a', recursive=True)

    for i in mp3_list:
        delete_lyrics_in_mp3(i)

    for i in m4a_list:
        delete_lyrics_in_m4a(i)

mutagen.mp3.MP3()mutagen.mp4.MP4()メタデータを辞書形式で受け取り、歌詞の要素を削除するだけ。MP3ならUSLT::eng、MP4なら\xa9lyrとなっている。

ということで、iTunes内の曲のカスタムの歌詞をPythonで消すことができた。正直Lyrics Masterを使う時点でもう少し調べておく必要があったとしか思えない...

追記(2021-03-24)

poetryを使ってpackageにした。

github.com

参考