● Сравнительное тестирование современных lossy кодеров аудио на вносимые искажения
Вступление
Суть теста заключается в измерении искажений вносимых lossy кодированием. Искажения выделяются с помощью вычитания исходного сигнала из сигнала полученного после кодирования/декодирования. Измеряются искажения методом психоакустического анализа, утилитой ReplayGain Scanner.
Бесспорно, используемый метод далек от совершенства, хотя бы потому что не учитывает маскировку искажений полезным сигналом, к тому же используется всего один тестовый семпл. Но тем не менее, тест дает некоторое понятие о работе тестируемых кодеков.
Напомню, что единственным на 100 % правильным методом является ABX тестирование с использованием большого количества различных семплов и широким кругом людей, принимающих непосредственное участие в прослушивании. К сожалению, это очень трудоемкий процесс, он требует тщательной подготовки, подбора материалов и т.д.
Исходя из вышесказанного, подчеркну: дальнейшая информация предоставляется исключительно для ознакомления, а результат тестирования никоим образом не является окончательным и неопровержимым доказательством превосходства того или иного кодека над другим.
Файл является обработанным треком Tiesto - Athena из альбома Parade Of The Athletes (2004). Обработка заключается в понижении громкости всего трека на 1.6 дБ, что связано с некоторыми особенностями работы кодера QuickTime при высоких пиковых значениях входного сигнала. К тому же это позволит избежать внешнего и внутреннего клиппинга.
Именно этот трек выбран мной по причине его сложности, он неоднократно был весьма успешно использован мною для выявления звуковых артефактов компрессии.
Encoders:
CT AAC v1.3 (from Winamp 5.572, using AACPlus v2 Encoder Build Dec 30 2009)
FAAC (Freeware Advanced Audio Coder) 1.28
LAME 3.99.5 (64-bit, RareWares)
Musepack Encoder v1.30
Nero AAC Encoder 1.5.4.0
OggEnc 2.87 libvorbis 1.3.2 (P4 compile)
OggEnc 2.87 LancerMod based on aoTuV b6.03 (x64 SSE3)
QAAC 1.35 (CoreAudioToolbox 7.9.7.9)
Windows Media Audio 9.2 (dBroweramp 13.3 CoreConverter)
Windows Media Audio 10 Professional (dBpoweramp 13.4 CoreConverter + WMA Pro 10 Release 6)
Тестирование
1. Подбор параметров и кодирование
Кодирование тестового семпла поочередно каждым кодером. Главной целью при подборе параметров было достижение максимального качества для каждого конкретного кодера, по возможности - в режиме неограниченного переменного битрейта (т.н. True VBR). Второй целью было достижение результирующего битрейта в районе 340-360 кбит/с. На мой взгляд, использование режима True VBR на указанных битрейтах - наиболее разумно, при правильном кодировании оно способно обеспечить как высокое качество звучания, так и высокий коэффициент сжатия.
Для кодеров WMA, битрейт которых превысил 360 кбит/с, пришлось сделать исключение.
Для кодера AAC от Coding Technologies установлен максимальный допустимый целевой битрейт - 320 кбит/с. Режим Independent Stereo выключен, так как никаких проблем с использованием Joint Stereo у этого кодера не выявлено, а режим независимого кодирования каналов в то же время дает значительное ухудшение в качестве звучания.
Надо отметить очень высокую скорость кодирования для этого кодера (почти в два раза больше чем у остальных AAC кодеров).
Для популярного кодера LAME установлены максимальные параметры качества - постоянный битрейт 320 и максимальное качество алгоритмов (ключ -q со значением 0).
Для кодера OGG Vorbis установлен режим качества Q9, который широко используется как альтернатива MP3 320 кбит/с. Более высокие значения параметра обычно не дают значительного улучшения качества, но при этом размер получаемых файлов заметно больше.
Данный кодер известен очень гибким (более гибким чем у остальных популярных AAC кодеров) режимом переменного битрейта - True VBR. Потому установлено максимальное для этого режима качество - 127, а также наивысшее качество алгоритмов (-q 2).
Параметры: -infile=%s -outfile=%d -convert_to="Windows Media Audio 10" -codec="Windows Media Audio 9.2" -settings="VBR Quality 98, 44 kHz, stereo VBR" -vbr
Для этого кодера выбор параметров оказался пожалуй самым сложным. У WMA 10 Pro существует два режима переменного битрейта: однопроходный (с целевым качеством) и двухпроходный (с целевым битрейтом). При максимальных установках для режима целевого качества (Q98) результирующий битрейт получился менее 300 кбит/с (кроме того, в однопроходном режиме у кодера большие проблемы с клиппингом), при двухпроходном режиме наиболее близкими оказались только битрейты 256 и 384 кбит/с. Выбор был сделан в пользу большего битрейта. По предварительным тестам WMA 10 показал не очень хорошие результаты, так что "фора" ему не помешает.
2. Декодирование
Декодирование производилось с помощью того же foobar2000 в формат WAVE (IEEE Float 32-bit). Для всех кодеров, кроме CT AAC и WMA 9.2, на выходе был получен звуковой файл с продолжительностью идентичной исходному (16653924 семплов).
Для кодера CT AAC на выходе я получил 16652736 семплов, т.е. 1188 семплов было потеряно. Проведя небольшое "расследование", я выяснил:
- семплы пропадают в конце файла
- проблема заключается не в самом кодере, а в утилите AACPlus v2 CLI Encoder.
К сожалению, новой версии утилиты пока нет, а единственная альтернатива - использование кодировщика в Winamp. Закодировав файл с его помощью и декодировав его в foobar2000, я получил таки исходное количество семплов, но по непонятным причинам весь полученный поток совершенно отличался по уровню (был намного громче) от того что я получил используя AACPlus v2 CLI Encoder (при этом обе программы использовали одни и те же DLL библиотеки), возможно был использован какой-то алгоритм выравнивания/повышения громкости. Времени и желания (я не сторонник Winamp'а) разбираться в этом у меня нет, так что придется довольствоваться тем что есть.
После декодирования файла WMA 9.2 я получил 16654848 семплов, что на 924 семпла больше, чем в исходном WAV. Дополнительные семплы были обнаружены в конце файла и представляли собой небольшой шум, впоследствии они были удалены.
Проблема вполне известная: кодер WMA не способен давать sample accurate поток в однопроходном режиме. Это относится и к другим последним версиям WMA (включая WMA 10 Pro и 9.2 Lossless), более того, проблема наблюдается при использовании различных кодеров/декодеров.
3. Вычитание сигналов
Следующим этапом является суммирование инвертированного исходного WAV отдельно с каждым полученным после кодирования/декодирования соответствующим кодером WAV. Результат представляет собой разницу между исходным и полученным после кодирования/декодирования сигналом - так называемый разностный сигнал, с помощью которого можно оценить степень искажения закодированного сигнала. Результат для каждого кодера сохраняется в отдельный WAV файл.
Для кодера CT AAC пришлось удалить последние 1189 семплов, так как они содержали полезный сигнал (ввиду отсутствия у закодированного/декодированного потока этих самых семплов). Данный факт не должен значительно повлиять на конечный результат.
Заключительный этап - анализ искажений с помощью ReplayGain сканера. Сканер производит психоакустический анализ полученных треков и определяет воспринимаемую громкость. Результатом являются два параметра - пиковое значение и рассчитанное усиление (сканер рассчитывает усиление для приведения усредненной громкости каждого трека к одному значению - 89 дБ). Значение Track Gain в данном случае положительное, потому большее значение усиления означает меньшую громкость искажений и большее приближение прошедшего кодирование сигнала к исходному.
Таблица результатов
Кодеры расположены в порядке убывания громкости разностных сигналов.
Codec
Bitrate, kbps
TrackPeak
TrackGain, dB
Dif.SignalPeak
Dif.SignalGain, dB
Original WAV
2822
0.831764
-4.52
–
–
QAAC 1.35 (CoreAudioToolbox 7.9.7.9)
341
0.859100
-4.50
0.087783
+24.05
Nero AAC 1.5.4.0
349
0.864854
-4.48
0.078164
+23.47
OGG Vorbis
aoTuVb6.03
360
0.889321
-4.55
0.119377
+23.38
OGG Vorbis
1.3.2
351
0.876216
-4.55
0.103137
+23.12
WMA 10 Pro
385
0.893798
-4.52
0.062035
+22.96
Musepack 1.30 (SV8)
355
0.885218
-4.51
0.100994
+21.43
CT AAC 1.3
320
0.885722
-4.49
0.170747
+21.39
LAME 3.99.5
320
0.900963
-4.52
0.166792
+20.64
FAAC 1.28
319
0.907773
-4.56
0.097942
+19.25
WMA 9.2
362
0.888275
-4.53
0.119179
+17.92
Таблица обновляется по мере выхода новых версий кодеров. Обновление остальных скриншотов и отчетов не гарантируется.
А зачем тестировать и делать какие-то выводы, взяв за исходный не самый качественный материал? Ну, взяли бы, хотя бы 48000 Гц....
Ответ: Вы так часто имеете дело с материалом, у которого частота дискретизации 48 кГц? А какая частота дискретизации у Audio CD - не напомните? Может вы еще и ультразвук (>22 кГц) слышите?
eaqual подходит только для глубоко синтетических тестов в пределах одного семейства.
Пример:
lame 3.98.4 (дефолтовые 128kbps) - ODG: -0.80 (искажения якобы за пределами различимого) qt (-tvbr 127 -q 2) - ODG: -3.10 (искажения слышны всем и каждому, да так, что только мозги не кипят)