2008年11月22日土曜日

mp3のエンコードを繰り返し続けると…

音楽ファイルのフォーマットで、ネット上で恐らく一番普及していると思われるmp3。
サイズが小さく、それなりに高音質、再生できる機器が多いなどといった理由で使われているが、
保存や持ち運びの際に、どの位のビットレートで保存しておくかというのは、結構難しいところ。
不可逆圧縮なので、一度劣化してしまった音質は戻らない。
それぞれの用途に合った、最適なビットレートはどのくらいなのだろうか…?

…ということで、こんな実験をしてみた。

「lame 3.98.2を使って xbps で n回エンコードしたらどうなるのか?」

http://www.rarewares.org/mp3-lame-bundle.phpで公開されているmp3エンコーダ、lame 3.98.2を使用し、ある曲を一定のビットレートで、n回エンコードし続けるという、どう見てもムダな実験。だがやってみる価値はあると私は判断した。


まずは、エンコードを繰り返す処理をどうさせるか、という問題から解決する。
いちいちコマンドプロンプトで打ち込むなんてとんでもなく面倒なことはやりたくないので、batファイルを作成する。
…が、ビットレートや解エンコード回数を変更する度にbatファイルを作り直すのは面倒だ。
ということで、こんなのを作った。

"lameを使って指定されたオプションでエンコードをn回繰り返すbatファイルを作成するスクリプト"

#! /usr/bin/ruby

i = 1
STDERR.print"ソースwavもしくはmp3のファイル名:"
sorce = gets.chomp!.to_s

if sorce !~ /\S+.mp3$/ and sorce !~ /\S+.wav$/
STDERR.puts"*.mp3か*.wavでおk"
exit 1
end

print"繰り返す回数:"
n = gets.chomp!.to_i

if n < 0
puts"整数で入力してください。"
exit 0
end

print"lameスイッチを指定:"
s = gets.chomp!.to_s

open("lame.bat","w") do |write|
write.printf("lame.exe %s %s %d.mp3\n", s, sorce, i)
1.upto(n-1) do |x|
write.printf("lame.exe %s %d.mp3 %d.mp3\n", s, x, x+1)
end
STDERR.puts"lame.batに出力しました。"
end



これで、

lame.exe -v -q 2 miku.mp3 1.mp3
lame.exe -v -q 2 1.mp3 2.mp3
lame.exe -v -q 2 2.mp3 3.mp3

こんな感じで記述されているbatファイルを簡単に作れる。


次。
最大の難問。
エンコードする曲をどうにかする。

めんどいので、はつねさん(体験版)に歌っていただきました。
長いとエンコードに時間がかかるので、あっさり3秒
出来たファイルは miku.wav 96kHz 16bit PCM
…出来る限り高音質にしてみた。

というわけで準備完了。

今回エンコードする際に使う設定は、

VBR ビットレート音質0 エンコード速度2(-v -V 0 -q 2)
VBR ビットレート音質2 エンコード速度2(-v -V 2 -q 2)
VBR ビットレート音質4 エンコード速度2(-v -V 4 -q 2)
VBR ビットレート音質6 エンコード速度2(-v -V 6 -q 2)

VBR ビットレート音質4 エンコード速度0(-v -V 4 -q 0)
VBR ビットレート音質4 エンコード速度4(-v -V 4 -q 4)
VBR ビットレート音質4 エンコード速度8(-v -V 4 -q 8)

ABR 320kbps(--abr 320)
ABR 256kbps(--abr 256)
ABR 192kbps(--abr 192)
ABR 160kbps(--abr 160)
ABR 128kbps(--abr 128)
ABR 96kbps(--abr 96)
ABR 64kbps(--abr 64)

CBR 320kbps(-b 320)
CBR 256kbps(-b 256)
CBR 192kbps(-b 192)
CBR 160kbps(-b 160)
CBR 128kbps(-b 128)
CBR 96kbps(-b 96)
CBR 64kbps(-b 64)

・VBRは可変ビットレート、ABRは平均ビットレート、CBRは固定ビットレート。
※指定されていないものは全て自動設定。

こんな感じ。

ただ、このエンコードを2回や3回繰り返したところで、大して差は出ない(320kbpsと64kbpsでは流石に出るが)。
ということで、このエンコードを100回繰り返してみようと思う。

lame エンコード中

…予想以上にエンコードが早かった。
まぁ3秒のファイルだから早いわなぁ…


という訳でエンコードして出来上がったファイル。



※今回分かったこと
・エンコードする度に、曲の前後に無音部分が少しづつ追加されている。
・サンプリングレートは、ABR64kbpsだと24kHz、ABR96kbpsだと32kHz、ABR128kbps以上だと48kHzという感じに変更されていた。

・低ビットレートでエンコードし続けると、
  →CBRやABRの場合: 高音域と低音域が劣化し、音量がどんどん小さくなる。
  →VBRの場合: 高音域と低音域が劣化するが、音量は変わらない。
・高音域と低音域の劣化が特に進みやすい。特に高音域はシャカシャカになって酷い。
・逆に、それなりのビットレートがあれば、中間域の音はあまり劣化しない。
・高ビットレートだと、100回エンコードしてもそれ程劣化しない。
・'q 0'と'q 4'(qはエンコード速度のオプション)でエンコードした結果がなぜか同じだった(CRC32ハッシュが同じ)
・'q 0'と、'q 8'でエンコードした結果は、若干'q 8'の方が上な感じがする位で、そんなに変わらなかった。
・'CBR 320kbps'と'ABR320kbps'、'VBR V 0'では、VBR V 0が一番音質が悪く、CBR320kbpsとABR320kbpsが同等な感じ。
・CBR、ABRは、192kbps以下になると、一気に音質が悪くなった。
・64kbpsでは、2~3回エンコードしただけで劣化が目立つようになった。
・聴き比べる時にみっくみくにされる。
・低ビットレートだとはつねさんが涙目になる。
・VBR・低ビットレートでエンコードしたものを1/2倍速で再生すると思いっきり涙目になれる。



人によって妥協できる音質ってのは違うので、一概には言えないとは思うが…


まぁ私は、

・CDから取り込み、普段聞く為の保存用…VBR ビットレート音質0、エンコード速度2 (-v -V 0 -q 2)
・ポータブルオーディオ(wma非対応の時)…ABR 平均ビットレート128kbps、エンコード速度2 (--abr 128 -q 2)
・ポータブルオーディオ(wma対応の時)…WMA CBR 128kbps

という感じで使い分けてはいる。
AACを使っていた時期もあったが、再生機器(SV-SD370V)と合わないのか、途中で曲が切れたりしたので、仕方なくWMAを使用。


次は、mp3、WMA、AACの比較でもやってみようか…
…はつねさんが、物凄い目つきでこちらを睨んでいる気がするのは、気のせいだろうか…


…あれ?…レポート無くても週末ずっとPC弄ってるよ私は…'`,、('∀`) '`,、

4 件のコメント:

匿名 さんのコメント...

テイルズは全然分からないです(´・ω・`)
ググってみた結果です(ぁ

ところで100回エンコードする意味ってあるn(ry

Le Fay さんのコメント...

選曲については、過去に作ったMidiファイルを引っ張ってきて、全部はつねさんで出来そうな曲を探してきた結果がこれなだけなので、あまり意味は無いんだ…(´・ω・`)ショボーン

そういえば私が一番最後にやったRPGがこれでした。途中で積みゲーになってしま(ry
…今はもうRPGやる余裕が無い…(´;ω;`)ブワッ


100回エンコードする意味は、100回エンコードしたはつねさんの声でも愛することができるか、テストする為に(ry

.。.:*・゜+ d(*´∀`)b うそです +.:*・

…1回や2回だと、どれだけ劣化するのか、耳で聴き分けることは、高ビットレートだと難しいので、100回位繰り返せば差がはっきりするだろう、ということで。

「劣化していないように思えても劣化している、という事を確認するため」というのが一番の目的かと…。


しかし、全部声でって、とりあえずは意外と出来るモノなんですねぇ…
それ以上を求めると、どんどん難しくなるのは分かりましたが… (;´Д`)
パラメーター弄りながら何回も聴いていると、どれが一番良いのかなんて、全然分からなくなってくるんですよ…私は。

匿名 さんのコメント...

劣化ですか…

100で割るか何かすれば一回の平均が出たりするのかな(妄想
その前に劣化の度合いは数値で出ないですが。

家にミクはいないのですが。ぱらめーたーいじりは一番大事っぽいですからね…難しいのでしょうね……


家にミクさんよんだら片ボカ歌わせる羽目になりそうなんです(´;ω;`)

Le Fay さんのコメント...

体験版だとぱらめーたーを保存するのがめんどい(私がVSTに慣れていないのが原因)ので、尚更手抜きになってしまうんですよ…(´;ω;`)ブワッ

うちの場合歌うのは、
タイムリミット~さっさと買え~
…かとw

…あれは良い販促曲でした…(ヽ´ω`)