Windowsがメインだった頃から、ずっと音楽ファイルはmp3 or flacとcuesheetを混ぜたmkaで管理してました。
10年分ぐらいファイル損失無く蓄積できてるので、分量が半端ないことになっていて、ずっとそのままだったんですが、MacがメインになってiPhoneも使ってるので、iTunesでも音楽ファイルちゃんと読めるようにしておかないと、色々面倒な状態でした。
というわけで、年末休みの2日ぐらいを使って、大掃除というか大変換祭りをやってました。
ストレージ容量は昔よりも豊富になったので、mkaはmkaで残しつつ、新しくm4a(aac)に変換したものを別ディレクトリに一括作成することにしました。
まずは、mkaからflacとcuesheetの抽出。
input_dir = ARGV[0] Dir.chdir(input_dir) mka_files = Dir.glob("*.mka") mka_files.each do |filename| basename = File.basename(filename, ".*") unless File.exist?(basename) Dir.mkdir(basename) system("mkvextract", "tracks", filename, "--cuesheet", "1:#{basename}/#{basename}.flac") system("mkvextract", "attachments", filename, "1:#{basename}/cover.jpg") system("gsed", "-i", "-e", "s/FILE \"\"/FILE \"#{basename.force_encoding("UTF-8-MAC").encode("UTF-8").gsub(/&/, "\\\\&")}.flac\"/g", "#{basename}/#{basename}.cue") cuesheet = File.open("#{basename}/#{basename}.cue") genre = cuesheet.grep(/REM GENRE/).first if genre system("gsed", "-i", "-e", "/REM GENRE/d", "#{basename}/#{basename}.cue") system("gsed", "-i", "-e", "2i #{genre.strip}", "#{basename}/#{basename}.cue") end cuesheet.rewind date = cuesheet.grep(/REM DATE/).first if date system("gsed", "-i", "-e", "/REM DATE/d", "#{basename}/#{basename}.cue") system("gsed", "-i", "-e", "2i #{date.strip}", "#{basename}/#{basename}.cue") end cuesheet.close end end
mkvtoolnixのmkvextractコマンドで、trackと添付ファイルを吸い出す。
出力したcuesheetをsedで置換して、ある程度整形。
GENREとDATEをディスク単位にしておかないと、この後使うXLDでタグが読めなかったので、その辺りもsedで調整。
ちなみに上のコードはMacで実行したのでgsedになってる。
後は出力したflacに対してXLDで一括変換をかけるだけ。
なんだかんだで、Mac側からflac+cueを変換するなら、XLDが一番便利だった。
AACへの変換はGUIでしか使えないのが、ちょっと難点なんだが。
X Lossless Decoder: Lossless audio decoder for Mac OS X
http://tmkk.undo.jp/xld/index.html