ruby で mp3 のタグを書き換える方法

bashruby を使って mp3のタグを一括変換した際のメモ。

まずは、rubyスクリプト

#!/usr/bin/ruby

require 'mp3info'
require 'nkf'

mp3 = Mp3Info.open(ARGV[0])
mp3.tag2.options[:encoding] = 0

title=ARGV[1]
mp3.tag.title = NKF.nkf('--euc-input -w16B', title)

mp3.close

このスクリプトを title.rb という名前で保存。このスクリプトを使えば、たとえば hoge.mp3 というファイルのタイトルを"タイトル" に設定する場合は

$ ./title.rb  hoge.mp3  "タイトル"

と実行すれば良い。なお"タイトル"という文字列はEUC-JPとした。

次に、 bash 側。 web で検索して出てきた曲名の一覧は、

数字.  タイトル
数字.  タイトル
数字.  タイトル
数字.  タイトル

という形式だったので、この一覧を list.txt という名前のテキストファイルに保存し、以下のようなbashワンライナーを使って、一括設定。

nkf -e list.txt | while read num title; do
  num=`printf %02d ${num/./}`
  ./title.rb  $num.mp3  "$title"
done

これで、01.mp3 02.mp3 03.mp3 ... と続くmp3のファイル達に、対応するタイトルを設定することができた。