MP3 のタグを UTF16 に変換する Ruby スクリプト

Windows で管理していた mp3 を Mac に持ってきて
iTunes に読ませたら派手に化けたので
Ruby タグを Unicode(UTF16) に変換する方法を探していた。


ID3Tagの文字コード変換 - みずぴー日記
id:mzp が id3lib-ruby でやって失敗していたけど
id3lib-ruby は内部で Unicode かどうかのフラグを持っているので
できるはずと思ってやってみた。


[id3toutf16.rb]

#!ruby

# encode id3tag to utf16
#  support V2.3 or previous
# 
# license: Public Domain
# update: 2008/02/27
# author: mallowlabs
# blog: http://d.hatena.ne.jp/mallowlabs/

require 'rubygems'
require 'id3lib'
require 'kconv'

ARGV.each{|path|
  dirty = false
  puts path
  tag = ID3Lib::Tag.new(path, ID3Lib::V2)
  [:TIT2, :TPE1, :TALB, :COMM].each {|id|
    tmp = tag.frame_text id
    next if tmp == nil
    tag.delete_if{ |frame| frame[:id] == id }
    tag << {:text=>tmp.toutf16, :textenc=>1, :id=>id}
    dirty = true
  }
  tag.update! if dirty
}

使い方
id3lib-ruby が入ってない場合は gem でインストール

$ gem install id3lib-ruby

あとは変換したい mp3 があるディレクトリで

$ ruby id3toutf16.rb *.mp3

結果的にできたが、id3lib-ruby が V2.4 に対応してないっぽいため
タグが V2.4 で書かれたファイルはスキップする。


本家を読んでいたら

UTF-16 support (warning: id3lib writes broken UTF-16 frames)

http://id3lib-ruby.rubyforge.org/

とか書いてあったけど気にしない。
…ダメ?