TenForward

技術ブログ。はてなダイアリーから移転しました

メディアファイルのタグエディター探しの旅

手元の CD をデータ化して保存し、CD 自体は処分してモノを減らそうというのをずっとやっています。

経緯

環境は Plamo Linux です。次のソフトウェアを使っていました。

Asunder でメディアファイル化し、EasyTag で Asunder が入れてくれてないタグを編集していたわけです(アルバムアーティストとか、ジャケット画像の埋め込みとか)。

EasyTag

音楽を聴く環境は今やスマホです。音楽データは Google Drive に置き、そこから直接データを取得して再生できるアプリを使っています。スマホのローカルストレージに音楽データ入れるとそれだけでスマホのストレージが一杯になってしまうので。

先日までは "CloudBeats" というのを使っていました。必要最低限の機能はあるアプリでしたが、不満がありました。

  • 「最近追加した音楽」みたいな見せ方ができない

私は大量の CD データがあるので、最近リッピングして追加したやつをとりあえず聞きたいなあと思っても、どれが最近のやつかわからない。これではせっかくデータ化したのに結局聴かないままのアルバムが増えてしまう。

"CloudBeats" を使ってる限りでは、Asunder + EasyTag で不満はなかったのですが、最近 Claude AI と会話してて "Symfonium" というアプリが良さそうということを知って、有料だけど良さそうなので購入してみました。

このアプリはなかなか豪華で、結構多機能。最近追加したアルバムも表示してくれるし、世の中のプレーヤーアプリの多くになくて一番不満な「ジャンル→アーティスト→アルバム」という階層にも対応してます(これはCloudBeatsも対応してる)し、ランダムにアルバムを表示してくれる機能もあったりします。画面のカスタマイズも細かくできて自分好みのプレーヤーにできそう。

色々触ってると、ライブラリーの分類に「国」ってのがあるんですよね。プログレProgressive Rock)好きな私にとって、プログレサブジャンルで分けるとともに、国で分けるのはあるあるなのです。プログレ専門店行ったら国・地域別でわかれてるくらいなので一般的だと思います。それ以外にも、ライブラリーを色々なタグをベースに分類して表示してくれます。

Symphoniumのライブラリー画面

そうなると、「プログレのアルバムを国別で探せたら」と思うのはヲタクの性です。でも EasyTag には「国」を入力する欄はない。ここでまた Claude 君の出番です。

今までは「将来的に使えるかな」と思って「コメント」タグに国名を入れてたんですよね。Symfonium で、任意のタグでグルーピングして表示はできないのかな?と思って調べたけど、それはできないみたい。あらかじめ定められたタグでのグルーピングのみ。

すると、タグをエディターで書き込むことになります。「国」のタグを扱えるタグエディタがないか聞いてみると、

  • Kid3(Qt/KDE方面)
  • Quod Libet / Ex Falso(Gtk+ + Python
  • Mutagen(Python ライブラリー + CLI

を候補として挙げてくれました。

「国」タグ

タグの知識がないので、これも AI に。とりあえず "Symfonium" の「国」(Country)に出すには、どういうタグをセットすれば良いのかを調べてもらいました。それぞれ、

  • ID3v2(MP3): TXXX:COUNTRY
  • Vorbis Comments(FLAC/Ogg): RELEASECOUNTRY
  • iTunes/MP4 tags(M4A): ----:com.apple.iTunes:RELEASECOUNTRY or ----:com.apple.iTunes:MusicBrainz Album Release Country

というタグに書き込むと "Symfonium" から「国」で見えるようです。

これらはいずれも標準的なタグでないのか、「カスタムタグ」のようです。

タグエディタの検討

Kid3, Ex Falso は Plamo にはパッケージがないので、ビルドを考えないといけません。あまり依存関係で大量のパッケージを作らないといけなくなると面倒なので、機能面以外にも依存関係が少ないのが望ましいです。そういう観点で調べてみました。

Kid3

まず Kid3 の依存関係を調べると、Qt6 は Plamo にあるから良いとして、KDE 関係のモノが大量に依存関係で必要そうなので、これは諦めました。

Ex Falso

Ex Falso は Quod Libet というプレーヤー付属のタグエディタです。Ex Falso だけビルドできないかな?と思ったけど、一体でビルドが必要そうでした。

Quod Libet は結構シンプルですが、必要最低限の機能は備えてそうなプレーヤーです。

Quod Libet

しかし、依存関係も少なく、これなら簡単にできる!! ってことでパッケージを作ったら 4 つほどパッケージを作っただけで起動しました。依存関係として、AI が教えてくれた Mutagen が必要でしたが、これは Plamo 標準でありました。

Quod LibetのMP3タグ確認画面

で、起動してみたのですが、Ex Falso/Quod Libet では、MP3 ファイルでは任意のタグ名を入れられるのですが、M4A ファイルを開くとタグ名はプルダウンメニューで決まったものしか選べません。タグの編集は Quod Libet でもできるのですが、機能は当然同じです。

Quod Libetのタグ編集画面(MP3)

Quod Libetのタグ編集画面(M4A)タグ名は選択のみ

調べてもらうと、Ex Falso/Quod Libet は MP4(M4A)ではカスタムタグに未対応という話でした。

こちらはEx Falsoの画面。タグエディタの機能のみ

せっかく作ったので確認とかで便利だからソフトは入れたままですが、結局これも私が使うタグエディタとしては使えなさそうという結論です。

Mutagen

他にもあるのかもしれませんが、結局 Claude 君が出してきたのは Mutagen で Python スクリプトを書けばええやん、というものでした。

こんな感じで書けば、カスタムタグに書いてくれるみたいです。

from mutagen.mp4 import MP4

audio = MP4("file.m4a")
audio["----:com.apple.iTunes:RELEASECOUNTRY"] = b"Japan"  # バイト文字列として設定
audio.save()

で、書いてもらって、タグを表示するスクリプト

#!/usr/bin/env python3
from mutagen.mp4 import MP4

audio = MP4("file.m4a")
for key, value in audio.items():
    print(f"{key}: {value}")

これもやってあれもやってとスクリプト書いてもらうと、結局 CLI のタグエディタが出来上がった感じです。今は、オプションで色々な(私が必要な)タグを指定できる、ファイルタイプも識別して適切なタグに書き込んでくれるスクリプトを作ってくれました。

上記のコードはそのベースになったものです。そこから膨らませて、全部 AI に丸投げで作ったので誰でも作ってもらえるでしょうから、公開はしないし、ここには貼りません。

今まで EasyTag では「コメント」に国名を入れてましたが、「コメントに文字列が入っていたら『国』タグにコピーしてくれるスクリプト」も作ってもらいましたw

無事、Symphonium の「国」にも書き込んだ国名が出てきました。

Symphoniumのライブラリー内の「国」

AIに質問や依頼を投げながらスクリプト書いてもらって問題解決するの、なかなか楽しいですね。