<< >>

2008-10-21 [長年日記]

[Ruby] mp3 の ID3 タグを機械的につける

cddb からCD情報を取得していない殺風景な mp3 が目の前にある (※1)

grn1.jpg

(※1 ネットに繋がってないPCで慌ててリッピングした)

問1)これをどうにかせよ
(※ なお、CDはTSUTAYAに返却済みとする)

ID3タグ

そもそもなぜ mp3 が曲情報を知っているか不思議だったが、

ID3タグ(アイディースリータグ、ID3 tag)は、MP3ファイルの中に
「アーティスト、作成年、曲名」などの情報を書き込むための規格。
Wikipedia: ID3タグ

という付加情報があるらしい。てことは、ID3タグを自分で修正すればOK!で、GUI で設定するツールは色々あるのだが、これを1曲ずつやっていくのは何か違う(=面倒)。必然的に、それを扱うライブラリが欲しくなる。しかも Ruby が望ましい。なければ作るまでだ!

id3lib-ruby

あった川!川、あったよー!素晴らしい!しかも gem 一発!とは osx ではいかなかったので、port で id3lib を入れる。

# port install id3lib
# gem install id3lib-ruby

これで gem が入った。あとは、

% irb -r rubygems -r id3lib

tag = ID3Lib::Tag.new("foo.mp3")
tag.artist = '℃-ute'
tag.update!

のように ID3 タグを Ruby から簡単に操作できる!robinstocker ありがとう!

APIの詳細は、http://id3lib-ruby.rubyforge.org/

あっ、ども。おひさしぶりです。

%irb -r rubygems -r id3lib

# ファイルは0paddingでソートされているとする
> Dir["*.mp3"]
=> ["01 トラック 1.mp3", "02 トラック 2.mp3", "03 トラック 3.mp3", ...

# タイトルはネットから適当に探し出して titles 配列に入っているものとする
> titles
=> ["SUN SHINE!!!", "またね。", "キセキ", "君想い", ...

# 一気に変換
Dir["*.mp3"].sort.each_with_index do |mp3,i|
  tag = ID3Lib::Tag.new(mp3)
  tag.artist = 'GReeeeN'
  tag.album = 'あっ、ども。おひさしぶりです。'
  tag.title = titles[i]
  tag.update!
end

変換が一瞬で完了!

iTunes で読み込み直すと・・・

grn2.jpg

爽やかなGReeeeNが地獄のようになってしまった。

なんとなく

UTF8 でだめなら SJIS にしてみる。

Dir["*.mp3"].sort.each_with_index do |mp3,i|
  tag = ID3Lib::Tag.new(mp3)
  tag.artist = 'GReeeeN'
  tag.album = NKF.nkf('-s', 'あっ、ども。おひさしぶりです。')
  tag.title = NKF.nkf('-s', titles[i])
  tag.update!
end

grn3.jpg

クゥ〜ン♪

キセキは全てが最高だが、涙空も歌詞が深くてイイネ!

参考