AACで10回再圧縮するとどうなるか

謝花ミカ
5 min readJul 27, 2020

上にあげた、以前書いた記事で、私は

また、驚くことに256kbpsのAACを10回再圧縮したものと原音の区別すらABXテストでつけられない。それは大半の人にとって同じ結果だろう。

と書いた。実際に10回の再圧縮(cascading; カスケーディング)を行ったので、音声を聴いてテストしてみよう。XとZ、どちらがオリジナルで、どちらが10回圧縮したAACだろうか。

違いがわかるだろうか?

答えはSoundCloudに行き、ブラウザのどこかを見ることで得られるはずだ。答えを出す前に見ては無意味だ。

SoundCloudはWebでは配信用に圧縮された音源が再生されるので、正確を期すならば、ダウンロードすると良い。SoundCloudからfloating-point 32bitの非圧縮WAVがダウンロードできる。

これのうち、どちらかはApple製エンコーダのQuickTime AAC (256kbps CVBR: 制約付きVBR)によるエンコードが10回行われた音声となっているが、聴き分けができたならば、あなたは相当優秀な耳の持ち主だ。

テストは何度か行う

なお、一度だけ正解しても統計学的に意味はない。件の記事で触れたように、16回の試行なら12回、10回ならば9回も当てなければ95%信頼区間における「有意差あり」と認められない。以下の記事で触れたように、foobar2000の“ABX Comparator”でテストを行うと良い。

上段: 試行回数 に対し、下段: 有意差ありと認められる回数 (Wikipedia)

失われた成分を求めて…

本来は圧縮音源のテストの際には使われないテクニックではあるが、オリジナルと10回圧縮した音源の差(逆位相による)を取ってみたので、Googleドライブからダウンロードして聴いてみてほしい。

https://drive.google.com/file/d/1gM7yqwXd13Wbp8hDTZbjCU4yu06jYPzp/view?usp=sharing

僅かながらノイズが聞こえると思われるが、これが差分だ。

繰り返すが、これはほんの参考にすぎない。差分なんて取らずに、ABXにより、自分の耳でオリジナルと10回再エンコード後の違いを聞くのが、音声圧縮技術を開発する上でのスタンダードなやり方だ。

逆位相をぶつけて差分を取っている様子

結論

今回のように高ビットレート(AAC CVBR 256kbps)における圧縮音源の性能は凄まじく、10回もの再エンコードを行っても聴感できる違いはないことがわかるだろう。

そのため、例えばApple Music (AAC 256kbps)をAirPods (A2DP により AAC 256kbps で伝送される)で聴いても、オリジナルと比較して2度しかエンコードがされていないため、オリジナルと比べても違いが聴覚できる可能性は低いと言える。

安心してBluetoothイヤホンで圧縮音源を聴こう。[終]

(注)もちろん、番組制作などのプロの世界では、このような再圧縮(多段圧縮、カスケーディング)は避けている。下にあげる記事では、プロのように再圧縮を避けつつYouTubeに高画質・高音質な動画をあげる方法を書いた。

おまけ: 10回圧縮するスクリプト

読者の皆さんがお手元で実行できるように、スクリプトも置いておく

スクリプトの実行にはmacOS、ffmpeg、CLI版のXLDが必要である。

なお、左のように、XLDのGUI版で予めプロファイルを作っておくこと。

出力フォーマット: MPEG-4 AAC、モード: VBR (制約付き)、目標ビットレート: 256kbpsとし、“aac cvbr256”という名前で保存する。

あとはスクリプトを適当にいじり、自身の好みの音源でテストしてほしい。ディレクトリなどは予め作っておくこと。

説明しておくと、このスクリプトはXLDを使って、高性能なエンコーダと言われているApple製QuickTime AAC (Apple Music のエンコードでも使われるもの) でエンコードし、それをffmpegでWAVにデコードする。量子化誤差による損失を最小限に抑えるために、ffmpegの内部フォーマットである32bit floating-pointのWAVを出力している。そのWAVを再びAACにエンコードし、WAVにデコードし、以後これを繰り返す。

10回の再エンコードで生成されたファイル

--

--

謝花ミカ

理系と文系の学際的領域から社会学、自然科学、工学分野について記事を書く。