今回は,CDの枠内でよりよい音質になるよう,サンプルレート変換(SRC: sample rate conversion)に気を使ってみる.windows 前提だが,他の OS でも参考位にはなるかもしれない.
概略,次のような手順だ.
- ssrc でサンプルレート変換 (*->44.1kHz)
- ffmpeg でチャネルをミックスダウン(5.1ch->2ch)
- ssrc でビット数を変換(*->16bits)
- ステップ間で,waveshop で保存し直して次のステップで読み込み可能にすることあり.
オーディオデータを変換する際,特に音質に影響すると言われているのが,サンプルレート変換(SRC)の部分である.ここでは,ハイレゾデータのCD形式への変換なので,ダウンサンプリングの性能が問題だ.それは実質ローパスフィルタの性能と言ってもよい.
ありがたいことに,有名どころの SRC の実装を比較できるサイトがある.INFINITE WAVE の 'SRC Comparisons(96kHz to 44.1kHz)' だ.各実装について,Sweep, 1kHz Tone (-0.1dbfs & -60dbfs), Passband, Transition, Phase, Impulse の 6 つを確認できる.これらはつまりローパスフィルタの性能指標である.理想のフィルタの特性は白線,選んだ実装の特性は緑線で表示されて比較できる.
いくつかよさそうな実装をピックアップしてみると,
- r8brain の pro バージョンの Linear Phase (Ultra Steep) は無難かつ高性能に見える
- brick. これは Passband がかなり理想に近い.しかし linear phase でないのか?やや独特のようだ.
- eac3to. これは後述の SRCC を利用しているようだ.
- libfsrc. これはライブラリなので,いろいろほかのプログラムから利用されているはず.
- waveshop. フリーのオーディオエディタ.サンプルレート変換はそこそこ程度か.ソフト自体は何かと便利なので,今回の手順の中でも利用する.
- SSRC. 有名.今回はこれを使う.
- secret rabbit code. 略してSRCを狙ったっぽい?
有料であれば話は早く,その DAW ソフト一発でぱぱっと変換できるだろう.特に,adobe audition 5.5 and cs6 (今は creative cloud に含まれるはず)のグラフは最も美しいし,ableton live もなかなかの美しさだ.正直,買えるならこれらがよいと思う.
アドビシステムズ (2013-10-01)
売り上げランキング: 15
売り上げランキング: 15
*このソフトは,bit-perfect, つまりデータに不要な変更を加えないのをモットーにしているようだ.今回採用した理由は,その bit-perfect というモットーのほかに,出力する wav ファイルが SSRC で実際にうまく読み込めた,ということが大きい.とにかく ffmpeg の出力を ssrc が読んでくれないのよ.waveshop で一度 flac にして,再度 wav にすると読み込めるんだけどね.
waveshop に,5.1ch flac を読み込ませた. |
ここから,File -> Save As... で,ファイルの種類を Wave Files (*.wav) として保存する.
wav として保存 |
これで,5.1ch のハイレゾ wav ファイルが出来た.
次はこの音源データに対しサンプルレート変換を行う.この後の処理を考慮し,ビット数はまだ落とさない.コマンドラインから SSRC を実行するのだが,サンプルレートや入出力ファイル名の指定は
> ssrc.exe --rate 44100 input.wav output.wav
のようにする.実例を挙げると,
C:\work>ssrc.exe --rate 44100 surround88.wav surround441_from_surround88.wav
Shibatch sampling rate converter version 1.30
frequency : 88200 -> 44100
attenuation : 0dB
bits per sample : 24 -> 24
nchannels : 6
length : 89451558 bytes, 56.3439 secs
dither type : none
100% processed, ETA = 0sec
C:\work>
のようになる.
次に,マルチチャンネルサラウンド(5.1chサラウンド)から2chステレオにミックスダウンする.この処理には ffmpeg を使う.当方では zeranoe ビルドのバイナリを使った.
チャネル数を 5.1(=6) -> 2 に変更(ミックスダウン)し,ビット数は 24 ビットのままで保持する場合,
> ffmpeg.exe -i input.wav -ac 2 -acodec pcm_s24le output.wav
のように実行する.例を見てみよう.
C:\work>ffmpeg.exe -i surround441_from_surround88.wav -ac 2 -acodec pcm_s24le st
ereo441.wav
ffmpeg version N-69608-g9dc45d1 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.9.2 (GCC)
configuration: --enable-gpl (多分コンパイル時のオプションが大量に表示される)
libavutil 54. 18.100 / 54. 18.100
(lib** のバージョン表示が続く)
Guessed Channel Layout for Input Stream #0.0 : 5.1
Input #0, wav, from 'surround441_from_surround88.wav':
Duration: 00:00:56.34, bitrate: 6350 kb/s
Stream #0:0: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 44100 Hz, 6 channels,
s32 (24 bit), 6350 kb/s
Output #0, wav, to 'stereo441.wav':
Metadata:
ISFT : Lavf56.19.100
Stream #0:0: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s32
(24 bit), 2116 kb/s
Metadata:
encoder : Lavc56.21.102 pcm_s24le
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s24le (native) -> pcm_s24le (native))
Press [q] to stop, [?] for help
size= 14559kB time=00:00:56.34 bitrate=2116.8kbits/s
video:0kB audio:14559kB subtitle:0kB other streams:0kB global headers:0kB muxing
overhead: 0.000684%
これで 2ch / 24bits / 44.1kHz の wav ファイル stereo441.wav ができた.もう一歩だ.
88kHz->44.1kHz, 5.1ch->2ch とした wav ファイルを waveshop で読み込んで確認. |
ビット数の変換には,再び ssrc を使う.ffmpeg の出力ファイルがそのままでは読み込みできないので,面倒だが waveshop で保存し直す.上の例で言うと,
- stereo441.wav を waveshop で開く.
- save as で,stereo441re.flac として保存.
- waveshop を閉じる.
- stereo441re.flac を waveshop で開く.
- save as で,stereo441re.wav として保存.
さて,次にビット数を減らす.本来ここではディザリングを行うことで音質保持への寄与が見込めるのだが,今回はとりあえず省く(ちなみに,ssrc はディザリングのオプションも持っている).
c:\work>ssrc --bits 16 stereo441re.wav stereo441_16bits.wav
Shibatch sampling rate converter version 1.30
frequency : 44100 -> 44100
attenuation : 0dB
bits per sample : 24 -> 16
nchannels : 2
length : 14908602 bytes, 56.3439 secs
dither type : none
100% processed, ETA = 17sec
c:\work>
これで完成となる.再び waveshop で確認してみよう.
88kHz->44.1kHz, 5.1ch->2ch, 24bits->16bits とした wav ファイルを waveshop で読み込んで確認. |
手順をまとめると,
- ssrc でサンプルレート変換 (*->44.1kHz)
- ssrc.exe --rate 44100 88_24_51.wav 441_24_51.wav
- ffmpeg でチャネルをミックスダウン(5.1ch->2ch)
- ffmpeg.exe -i 441_24_51.wav -ac 2 -acodec pcm_s24le 441_24_2.wav
- waveshop で,wav ファイルを正規化(ssrc で読めるように保存し直す)
- 441_24_2.wav を waveshop で開く.
- save as で,441_24_2_re.flac として保存.
- waveshop を閉じる.
- 441_24_2_re.flac を waveshop で開く.
- save as で,441_24_2_re.wav として保存.
- ssrc でビット数を変換(*->16bits)
- ssrc --bits 16 441_24_2_re.wav 441_16_2.wav
- 完成.441_16_2.wav を CD に焼きましょう.
初めまして大変参考になりました。
返信削除今回、SSRCが1.30から大幅に1.31にアップデートされました
機会があればぜひ取り上げて検証して頂ければうれしいです。
1.31ver私の環境?ではなぜか変換ができませんでした(win7 32bit)
http://shibatch.sourceforge.net/
•Mar 14, 2016 : SSRC 1.31 is released.