2007/05/15(火)mp3エンコードあれこれ
2007/05/14 27:18
CD->mp3 : Exact Audio Copy
CD->cue+wav, cue+ape : Exact Audio Copy
cue+wav, cue+ape->mp3 : acdir
エンコードエンジン : lame
でとりあえず良し。ただし、EACは時間がかかる(高速読みも出来るがそちらを基本設定とすべきでない)ので単にぱっとmp3にしたいだけならCDex+午後とか。
[EAC設定]
EACはV0.95b2を使う。現在入手可能な最新版V0.95b4は日本語入力すると二重化する問題有り。
とりあえずBenq DW1640を所有しているのでこれを読みドライブにする(CD-R実験室を信じるなら超優秀)。
http://homepage2.nifty.com/yss/eac/eac3.htm
http://musicpc.fc2web.com/eacoption.htm
を参考に、
・Error Recovery Quality : High
・Read sample offset correction : +588
・Write samples offset : +96
・Overread into Lead-In and Lead-Outのチェックを外す
くらいで調整すれば良し。あとはオプション項目でだいたい分かる。
APEにするときはMonkey's Audioをあらかじめインストールしておく。
cue+wav化はIMGアイコンを。
mp3化はMP3アイコンを。
cue+ape化はアクション -> イメージをコピーしCUEシートを作成 -> 圧縮。
[ACDIR]
cue+wav, cue+apeをmp3化するときはACDIRを使う。EACでも何でも手順を踏めば出来るのだが、ACDIRを使うのが一番簡単(?)。
http://nyaochi.sakura.ne.jp/xoops/modules/mysoftwares/tc_2.html
上記サイトからダウンロード。簡易チュートリアルしかないが、コマンドラインヘルプでだいたいわかる。acdir自身にcue+ape, cue+wavを読む力があるので、あとは出力の設定とlameに渡すオプションをbatなんかに書いてやるだけ。
自分の腕ではbatだけでやるのが苦しかったので今回はRubyを使った。エクスプローラ+D&Dでやらせたかったので、まずはRuby Script FileがD&Dを受け付けられるようにする。
http://homepage3.nifty.com/yamakox/DropOnScript/index.html
上記サイトのDrop on Scriptを使えば良し。何をやっているかは、
http://devadjust.exblog.jp/4673772/
に書いてある。
で、Rubyで以下のように書いた。
ENV['PATH'] = 'c:\online\lame;c:\online\acdir;' + ENV['PATH'] dir_name = File.dirname(ARGV[0]) + "\" + File.basename(ARGV[0], ".*") `acdir.exe --output "#{dir_name}\$n.$t.mp3" --pipe "lame -b 256 --replaygain-accurate --clipdetect -T --tt $#t --ta $#a --tl $#T --tn $#n --tg $#r{GENRE} --ty $#r{DATE} $x - $#o" "#{ARGV}" print "\a\a"Rubyを使ってる理由はファイル名から書き出しディレクトリを作りたかったから。
lameとacdirにPATHを通す必要がある。Ruby上で環境変数をいじるなら、ENVオブジェクトを使えば良し。
最後のダブルBEEPはおまけ。なんか怪しいけどとりあえずこれでいいや。
最後にcueをD&Dしてmp3化することを確認。なおACDIRはcue+apeから直接wavの単曲切りも出来る。eacで解体した物と当然バイナリは一緒。やりたいことに合わせてbatなりrbなり作っておくも良し、簡易GUIを作るも良し。
[lameオプション]
オプションの機能は、
http://www001.upp.so-net.ne.jp/yama-k/codec/lame3.95option.html
ここら辺を参照。
3.97でいくつかオプションの挙動を知りたく調べてみた。
某所の推奨設定が、
--clipdetect : LAMEタグに音量ピーク値を保存する。メッセージ表示。をつけることになっている。
--replaygain-accurate : より正確にリプレイゲイン情報を計算する
-T : lameタグを強制的に書き込む。
さて調査結果。
CBR(-b 256)とVBR(-V 2)どちらでも結果が同じで、
・--clipdetectだけの場合
・--replaygain-accurateだけの場合
・--clipdetect, --replaygain-accurate両方つけた場合
の3パターンではバイナリが同一。
どちらもつけない場合のみ、lameタグと思われる部分に5バイト分相違あり
(最大音量が記録されてない?)。
--clipdetect をつけると、このソースではエンコード後にこんな感じのメッセージが出た。
WARNING: clipping occurs at the current gain. Set your decoder to decrease the gain by at least 0.8dB or encode again using --scale 0.91 or less (the value under --scale is approximate).-T の有無にかかわらず常にlameタグは書き込まれた。
ということで結論としては、ここら辺のオプションは全てlameタグにのみ影響を与えるような物であり、あってもなくても大して変わらないらしい。とりあえずつけておいて損はないし大きな問題もないようだが、調べている途中でこんなのを見つけた。
http://www.faireal.net/articles/9/18/#d51109
mp3作って動画と合成する場合は、-tをつけてlameタグを付加しないようにしないと音ズレが拡大する可能性があるという話。うわ知らなかった。
ところで個人的にはだが、lameはCBRのほうが間違いがないと思っている。自分で使うなら当面CBR 192kかCBR 256kの2択?
最近のlameは高めのbitrateだとpsytuneとかsafejointをデフォルトで入れてくるようだ(K5 MP3 lametag viewerで確認)。いちいちキラーソースを探すのも面倒だし、ここら辺はもうオフィシャル設定を信用するしかない。