Copyright (C) 2014, Taras Kovrijenko
Полное или частичное копирование текста допускается только с письменного разрешения автора.
Вступление
Суть теста заключается в измерении искажений вносимых lossy кодированием. Искажения выделяются с помощью вычитания исходного сигнала из сигнала полученного после кодирования/декодирования. Измеряются искажения методом психоакустического анализа, утилитой ReplayGain Scanner.
Бесспорно, используемый метод далек от совершенства, хотя бы потому что не учитывает маскировку искажений полезным сигналом, к тому же используется всего один тестовый семпл. Но тем не менее, тест дает некоторое понятие о работе тестируемых кодеков.
Напомню, что единственным на 100% правильным методом является ABX тестирование с использованием большого количества различных семплов и широким кругом людей, принимающих непосредственное участие в прослушивании. К сожалению, это очень трудоемкий процесс, он требует тщательной подготовки, подбора материалов и т. д.
Исходя из вышесказанного, подчеркну: дальнейшая информация предоставляется исключительно для ознакомления, а результат тестирования никоим образом не является окончательным и неопровержимым доказательством превосходства того или иного кодека над другим.
Материал для теста
File Size : 127MB (133 231 436 bytes)
Duration : 6:17.640 (16653924 samples)
Sample Rate : 44100 Hz
Channels : 2
Bits Per Sample : 32
Bitrate : 2822 kbps
Codec : PCM (floating-point)
Encoding : lossless
Track Gain : -6.21 dB
Track Peak : 0.831764
Файл является обработанным треком Tiesto – Athena из альбома Parade Of The Athletes (2004). Обработка заключается в понижении громкости всего трека на 1.6 дБ, что связано с некоторыми особенностями работы кодера QuickTime при высоких пиковых значениях входного сигнала. К тому же это позволит избежать внешнего и внутреннего клиппинга.
Именно этот трек выбран мной по причине его сложности, он неоднократно был весьма успешно использован мною для выявления звуковых артефактов компрессии.
Используемое ПО
Core (2014-04-11 09:51:08 UTC)
foobar2000 core 1.3.2
foo_converter.dll (2014-04-11 09:49:20 UTC)
Converter 1.5
foo_dsp_std.dll (2014-04-11 09:49:24 UTC)
Standard DSP Array 1.3
foo_input_std.dll (2014-04-11 09:51:10 UTC)
Standard Input Array 1.0
foo_rgscan.dll (2014-04-11 09:49:26 UTC)
ReplayGain Scanner 2.2.1
foo_ui_std.dll (2014-04-11 09:51:08 UTC) Default User Interface 0.9.5
foobar2000 1.0.2.1 — сканирование ReplayGain (ReplayGain Sanner 2.0.9)
Sony Sound Forge 10c — вычитание сигналов.
Encoders:
CT AAC v1.31 (AACPlus v2 Encoder Build Jul 17 2011)
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.4 x64
OggEnc 2.87 LancerMod based on aoTuV b6.03 x64
Opus Encoder 1.1 x64
QAAC 2.40 (CoreAudioToolbox 7.9.8.5)
WMAEncode64 0.2.9b (x64)
Тестирование
1. Подбор параметров и кодирование
Кодирование тестового семпла поочередно каждым кодером. Главной целью при подборе параметров было достижение максимального качества для каждого конкретного кодера, по возможности — в режиме неограниченного переменного битрейта (т. н. True VBR). Второй целью было достижение результирующего битрейта в районе 340-360 кбит/с. На мой взгляд, использование режима True VBR на указанных битрейтах — наиболее разумно, при правильном кодировании оно способно обеспечить как высокое качество звучания, так и высокий коэффициент сжатия.
Также обратите внимание: в таблице результатов указывается не битрейт, сообщаемый foobar2000 (который обычно берется из заголовка и вполне может не соответствовать действительности), а реальный file-based bitrate (FBR), равный размеру файла в килобитах деленному на продолжительность в секундах.
Кодеры:
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 файл.
4. Анализ искажений
Заключительный этап — анализ искажений с помощью сканеров. Сканер производит психоакустический анализ полученных треков и определяет воспринимаемую громкость. Результатом являются два параметра — пиковое значение и рассчитанное усиление (сканер рассчитывает усиление для приведения усредненной громкости каждого трека к одному значению — 89 дБ). Значение Track Gain в данном случае положительное, потому большее значение усиления означает меньшую громкость искажений и большее приближение прошедшего кодирование сигнала к исходному. Сканирование выполнялось с использованием двух алгоритмов — R128 (foobar2000 1.3.2) и ReplayGain (foobar2000 1.0.2.1).
Таблица результатов
Кодеры расположены в порядке убывания громкости разностных сигналов по результатам ReplayGain сканирования. Анализ результатов приведен в соответствующей новости.
Codec |
FBR, kbps |
Track peak |
Track gain, dB |
Dif. signal peak |
Dif. signal gain, dB (R128) |
Dif. signal gain, dB (ReplayGain) |
Original WAV |
2822 |
0.831764 |
-6.21 |
– |
– |
– |
lossyWAV 1.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 |
WavPack 4.70 hybrid |
344 |
0.854635 |
-6.21 |
0.036866 |
+21.65 |
+24.61 |
QAAC 2.40 (CoreAudioToolbox 7.9.8.5) |
341 |
0.871634 |
-6.18 |
0.258639 |
+19.79 |
+24.37 |
Nero AAC 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 |
Opus 1.1 |
365 |
0.965121 |
-6.20 |
0.089538 |
+17.88 |
+23.29 |
FhG AAC 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 |
Musepack 1.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 |
FhG AAC 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 |
Таблица обновляется по мере выхода новых версий кодеров. Обновление остальных скриншотов и отчетов не гарантируется.
Смотрите также:
Сравнительное тестирование различных версий LAME @ 320 kbpsИнформация от спонсора
APPERTURE.RU: футболки и майки с надписями. Низкие цены, доставка по России.