Сравнительное тестирование lossy кодеров на вносимые искажения @350 kbps (2014)
03 Июня 2014, 10:02
Copyright (C) 2014, Taras Kovrijenko
Полное или частичное копирование текста допускается только с письменного разрешения автора.
Вступление
Суть теста заключается в измерении искажений вносимых lossy кодированием. Искажения выделяются с помощью вычитания исходного сигнала из сигнала полученного после кодирования/декодирования. Измеряются искажения методом психоакустического анализа, утилитой ReplayGain Scanner.
Бесспорно, используемый метод далек от совершенства, хотя бы потому что не учитывает маскировку искажений полезным сигналом, к тому же используется всего один тестовый семпл. Но тем не менее, тест дает некоторое понятие о работе тестируемых кодеков.
Напомню, что единственным на 100% правильным методом является ABX тестирование с использованием большого количества различных семплов и широким кругом людей, принимающих непосредственное участие в прослушивании. К сожалению, это очень трудоемкий процесс, он требует тщательной подготовки, подбора материалов и т. д.
Исходя из вышесказанного, подчеркну: дальнейшая информация предоставляется исключительно для ознакомления, а результат тестирования никоим образом не является окончательным и неопровержимым доказательством превосходства того или иного кодека над другим.
Файл является обработанным треком Tiesto – Athena из альбома Parade Of The Athletes (2004). Обработка заключается в понижении громкости всего трека на 1.6 дБ, что связано с некоторыми особенностями работы кодера QuickTime при высоких пиковых значениях входного сигнала. К тому же это позволит избежать внешнего и внутреннего клиппинга.
Именно этот трек выбран мной по причине его сложности, он неоднократно был весьма успешно использован мною для выявления звуковых артефактов компрессии.
Кодирование тестового семпла поочередно каждым кодером. Главной целью при подборе параметров было достижение максимального качества для каждого конкретного кодера, по возможности — в режиме неограниченного переменного битрейта (т. н. True VBR). Второй целью было достижение результирующего битрейта в районе 340-360 кбит/с. На мой взгляд, использование режима True VBR на указанных битрейтах — наиболее разумно, при правильном кодировании оно способно обеспечить как высокое качество звучания, так и высокий коэффициент сжатия.
Также обратите внимание: в таблице результатов указывается не битрейт, сообщаемый foobar2000 (который обычно берется из заголовка и вполне может не соответствовать действительности), а реальный file-based bitrate (FBR), равный размеру файла в килобитах деленному на продолжительность в секундах.
Для кодера AAC от Coding Technologies установлен максимальный допустимый целевой битрейт — 320 кбит/с. Надо отметить очень высокую скорость кодирования 55x для этого кодера (почти в два раза больше чем у остальных AAC кодеров).
Для популярного кодера LAME установлены максимальные параметры качества — постоянный битрейт 320 и максимальное качество алгоритмов (ключ -q со значением 0).
Для кодера OGG Vorbis установлен режим качества Q9, который широко используется как альтернатива MP3 320 кбит/с. Более высокие значения параметра обычно не дают значительного улучшения качества, но при этом размер получаемых файлов заметно больше.
Для данного кодера пришлось выполнить предварительную передискретизацию исходного тестового файла до частоты 48000 Гц (т. к. кодер работает исключительно на ней). Использовался SoX Resampler 0.8.3.
Данный кодер известен очень гибким (более гибким чем у остальных популярных AAC кодеров) режимом переменного битрейта — True VBR. Потому установлено максимальное для этого режима качество — 127.
Для этого кодера выбор параметров оказался пожалуй самым сложным. У WMA 10 Pro существует два режима переменного битрейта: однопроходный (с целевым качеством) и двухпроходный (с целевым битрейтом). При максимальных установках для режима целевого качества (Q98) результирующий битрейт получился менее 300 кбит/с (кроме того, в однопроходном режиме у кодера большие проблемы с клиппингом), при двухпроходном режиме наиболее близкими оказались только битрейты 256 и 384 кбит/с. Выбор был сделан в пользу большего битрейта. К счастью, результирующий FBR не превысил 360 кбит/с.
Это максимальное качество для режима VBR данного кодера. К сожалению битрейт получился довольно низкий, однако интересно будет сравнить результаты этого VBR и CBR с более высоким битрейтом.
Максимальное сжатие в гибридном (lossy) режиме с целевым битрейтом 320 кбит/с.
2. Декодирование
Декодирование производилось с помощью того же foobar2000 в формат WAVE (IEEE Float 32-bit). Для всех кодеров, кроме FAAC и WMA 9.2, на выходе был получен звуковой файл с продолжительностью идентичной исходному (16653924 семплов).
Для кодера FAAC на выходе декодера продолжительность файла оказалась на 612 семплов меньше. Как показал визуальный анализ, значительная часть семплов пропала в начале файла, причем в конец добавилось некоторое количество нулевых семплов. Для правильного вычитания я предварительно обрезал несовпадающие участки исходного и полученного WAV файлов.
После декодирования файла WMA 9.2 я получил 16654848 семплов, что на 924 семпла больше, чем в исходном WAV. Дополнительные семплы были обнаружены в конце файла и представляли собой небольшой шум, впоследствии они были удалены.
Проблема вполне известная: кодер WMA не способен давать sample accurate поток в однопроходном режиме. Это относится и к другим последним версиям WMA (включая WMA 10 Pro и 9.2 Lossless), более того, проблема наблюдается при использовании различных кодеров/декодеров.
3. Вычитание сигналов
Следующим этапом является суммирование инвертированного исходного WAV отдельно с каждым полученным после кодирования/декодирования соответствующим кодером WAV. Результат представляет собой разницу между исходным и полученным после кодирования/декодирования сигналом — так называемый разностный сигнал, с помощью которого можно оценить степень искажения закодированного сигнала. Результат для каждого кодера сохраняется в отдельный WAV файл.
Заключительный этап — анализ искажений с помощью сканеров. Сканер производит психоакустический анализ полученных треков и определяет воспринимаемую громкость. Результатом являются два параметра — пиковое значение и рассчитанное усиление (сканер рассчитывает усиление для приведения усредненной громкости каждого трека к одному значению — 89 дБ). Значение Track Gain в данном случае положительное, потому большее значение усиления означает меньшую громкость искажений и большее приближение прошедшего кодирование сигнала к исходному. Сканирование выполнялось с использованием двух алгоритмов — R128 (foobar2000 1.3.2) и ReplayGain (foobar2000 1.0.2.1).
Таблица результатов
Кодеры расположены в порядке убывания громкости разностных сигналов по результатам ReplayGain сканирования. Анализ результатов приведен в соответствующей новости.
Codec
FBR, kbps
Trackpeak
Trackgain, dB
Dif.signalpeak
Dif.signalgain, dB(R128)
Dif.signalgain, dB(ReplayGain)
Original WAV
2822
0.831764
-6.21
–
–
–
lossyWAV1.3.0 / FLACCL 2.1.5
370
0.843750
-6.21
0.034957
+24.17
+27.14
FDK AAC 0.5.3 (libfdk-aac 3.4.12)
351
0.916585
-6.15
0.150573
+14.13
+26.09
WavPack4.70 hybrid
344
0.854635
-6.21
0.036866
+21.65
+24.61
QAAC2.40 (CoreAudioToolbox 7.9.8.5)
341
0.871634
-6.18
0.258639
+19.79
+24.37
NeroAAC 1.5.4.0
349
0.864854
-6.17
0.078164
+20.43
+23.47
OGG Vorbis aoTuVb6.03
359
0.889321
-6.21
0.119377
+18.56
+23.38
Opus1.1
365
0.965121
-6.20
0.089538
+17.88
+23.29
FhGAAC v03.02.16 (fhgaacenc.exe v20120624)CBR
351
0.853525
-6.18
0.069904
+20.50
+23.23
OGG Vorbis 1.3.4
350
0.876215
-6.21
0.103137
+18.13
+23.12
WMA 10 Pro
358
0.893798
-6.21
0.062035
+21.93
+22.97
Musepack1.30 (SV8)
354
0.885218
-6.21
0.100994
+17.77
+21.43
CT AAC 1.3
321
0.885722
-6.17
0.170748
+19.43
+21.39
FhGAAC v03.02.16 (fhgaacenc.exe v20120624) VBR
275
0.866260
-6.17
0.091649
+18.30
+20.98
LAME 3.99.5
319
0.900963
-6.21
0.166792
+15.49
+20.64
FAAC 1.28
319
0.907773
-6.23
0.097942
+16.75
+19.24
WMA 9.2
339
0.888275
-6.22
0.119179
+16.50
+17.93
Таблица обновляется по мере выхода новых версий кодеров. Обновление остальных скриншотов и отчетов не гарантируется.