1
id3tag 文字化け
過去に Grip でエンコードした mp3 ファイルの id3tag 文字コードは EUC-JP や SJIS が入っていて、Palm の AeroPlayer では大丈夫なのだが iTunes では文字化けしてしまう。iTunes 自身は ID3Tagv2.2 に UTF-8 を入れるようだが、使うだけなら v2.3, v2.4 で UTF-8, UTF-16LE 等でも良いようだ。最近の Grip は v2.3 に UTF-8 でもタグを入れるのだが、どうもうちの既存ファイルは SJIS で入っているらしい。
2
id3tag を扱う ruby library
仕方がないので script でも書いて変換しようと思ったが、apt にある libmp3tag-ruby1.8 は ID3v1.1 までしかサポートしておらず使い物にならない。探してみると RAA に
id3tag と言う ID3v2.4 までサポートしているライブラリを発見。構造が煩雑だけど、まぁなんとか出来そうかな。と思ったら、この id3tag-ruby は read しかサポートしてなかった…。
IRC で友達に教えて貰った、Java で書かれた
id3iconv が UTF-16 への文字変換書き換えをサポートしているようなので、当面これを使うことに。しかし iconv は当然 guess してくれないので、guess だけ id3tag-ruby + NKF.guess を使い、その結果を id3iconv に流してみる。しかしこれ、guess に失敗するとタグ情報が吹っ飛ぶなぁ。変換が必要な場合は事前 backup 取るか。
4
script でっちあげ
と言うわけで v2.x タグ (ない場合は v1.x ) に JIS, EUC, SJIS があった場合のみファイルを $HOME/mp3_backup/ 以下にバックアップした上で Unicode に変換するようにスクリプトを書いてみた。
id3tagjconv.rb。前述の id3tag, id3iconv を使っている。引数で与えたディレクトリの下を再帰的に .mp3 ファイルを探して、'-n' を付けると dry run 。完璧ではないけどそれなりには動くな。しかし id3tag を直接ちゃんといじれる ruby library が無いと不便だなぁ。出来るものなら書きたいけど構造が面倒くさくて理解できん。