В природе существует два консольных кодера AAC под Windows, использующих алгоритмы от FhG — это FDK AAC Encoder (fdkaac) и FhG AAC Encoder (fhgaacenc). Первый основан на исходном коде, изначально открытом для Google Android, второй же представляет собой консольный враппер + библиотеку кодера и другие вспомогательные библиотеки из Winamp. Таким образом мы имеем два набора алгоритмов: некоммерческую и коммерческую, проплаченую версию соответственно. В лицензионном соглашении FDK AAC буквально указано следующее:
«Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, are also available from Fraunhofer»
(«Также Fraunhofer предоставляет лицензированные для коммерческого использования программные библиотеки, включающие обработку в режиме плавающей точки с продвинутым качеством»)
Таким образом в алгоритмах работы этих кодеров должны быть некие существенные различия, кроме всего прочего отражающиеся на качестве кодирования. Отличия эти определенно имеются — хотя бы уже потому, что кодеры имеют различные возможности конфигурации.
В этом обзоре мы рассмотрим различия между этими двумя кодерами в режиме переменного битрейта (VBR).
FhG AAC
FhG AAC имеет возможность выбора между шестью режимами целевого VBR качества. В среднем эти режимы соответствуют примерно следующим результирующим битрейтам: 1 - 32 кбит/с, 2 - 64 кбит/с, 3 - 96 кбит/с, 4 - 128 кбит/с, 5 - 192 кбит/с, 6 - 256 кбит/с.
Командная строка foobar2000 в нашем случае имеет следующий вид:
--quiet --vbr n --ignorelength - %d
На качество здесь влияет лишь параметр --vbr, значения которого (n) — от 1 до 6.
Проверку кодеров я производил на белом шуме (10 c) с уровнем -1 dBFS, треке Pink Floyd — Wish You Were Here и тестовом сигнале RMAA 24/44.1. Белый шум представляет собой совершенно случайный сигнал, имеющий мощность равномерно распределенную по всему диапазону частот. Таким образом этот сигнал является наиболее сложным для кодирования и выходной битрейт теоретически является максимально возможным результирующим битрейтом. Тестовый сигнал имеет довольно низкую сложность, поэтому может выступать практически как нижний предел битрейта. Музыкальный же трек будет чем-то средним, отражающим реальные условия кодирования.
Ниже привожу выбранный кодером режим, результирующий битрейт (FBR, белый шум / трек / сигнал RMAA) и граничную частоту ФНЧ.
1 - SBR+PS - 45 kbps / 34 / 15 kbps - 6.5 kHz (LC) + SBR = 16.5 kHz
2 - SBR - 88 / 63 / 16 kbps - 9.5 kHz (LC) + SBR = 20.5 kHz
3 - LC - 145 / 98 / 25 kbps - 16 kHz
4 - LC - 193 / 130 / 26 kbps - 16.5 kHz
5 - LC - 294 / 207 / 31 kbps - 19 kHz
6 - LC - 390 / 262 / 36 kbps - 22 kHz
FDK AAC
Данный кодер имеет несколько различных режимов кодирования, в том числе режимы Low Delay и Extra Low Delay, предназначенные для стриминга. Нас же интересует в основном режим Low Complexity (MPEG-4), который используется по умолчанию, а также режимы HE-AAC и HE-AACv2 для низких битрейтов.
Будем использовать следующую командную строку:
--silent -m --ignorelength - -o %d
Значения параметра m — от 1 до 5.
1 - LC - 144 / 86 / 16 kbps - 13 kHz
2 - LC - 155 / 92 / 17 kbps - 13 kHz
3 - LC - 181 / 109 / 18 kbps - 14 kHz
4 - LC - 221 / 136 / 19 kbps - 17 kHz
5 - LC - 400 / 234 / 23 kbps - 22 kHz
Итак, первое, что мы видим — различные диапазоны битрейтов. Похоже, по умолчанию VBR режим FDK AAC не рассчитан на кодирование с низким битрейтом. Также здесь нет автоматического включения HE-AAC/HE-AACv2. Что ж, давайте попробуем форсировать эти режимы ключами -p 5 и -p 29.
HE-AACv2:
1 - SBR+PS - 49 kbps / 32 / 12 kbps - 7 kHz (LC) + SBR = 18 kHz
2 - SBR+PS - 64 / 40 / 14 kbps - 8.5 kHz (LC) + SBR = 20.5 kHz
3 - SBR+PS - 67 / 43 / 14 kbps - 8.5 kHz (LC) + SBR = 20.5 kHz
4 - SBR+PS - 73 / 48 / 14 kbps - 8.5 kHz (LC) + SBR = 20.5 kHz
5 - SBR+PS - 89 / 61 / 15 kbps - 8.5 kHz (LC) + SBR = 20.5 kHz
HE-AAC:
1 - SBR+PS - 70 kbps / 44 / 11 kbps - 6.5 kHz (LC) + SBR = 17.5 kHz
2 - SBR+PS - 117 / 67 / 13 kbps - 9.5 kHz (LC) + SBR = 20.5 kHz
3 - SBR+PS - 130 / 74 / 13 kbps - 9.5 kHz (LC) + SBR = 20.5 kHz
4 - SBR+PS - 149 / 88 /13 kbps - 9.5 kHz (LC) + SBR = 20.5 kHz
5 - SBR+PS - 180 / 115 / 14 kbps - 9.5 kHz (LC) + SBR = 20.5 kHz
Как видим, режимы HE и HEv2 включают другую сетку битрейтов. Хотя скорей всего целевое качество остается таким же, а падение битрейта обусловлено сужением кодируемого диапазона. К сожалению, проверить это не представляется возможным, т.к. эти режимы не позволяют устанавливать частотный срез вручную.
Тем не менее, мы видим, что HE и HEv2 имеют достаточно широкий диапазон битрейтов, не выходя для реального материала за допустимые рамки. Тем не менее я советую использовать HE-AAC в диапазоне 40-80 kbps, а HEv2 для значений <40 kbps.
Также довольно спорным может быть, например, выбор между LC AAC m 1 и HE-AAC m 4 (86 и 88 кбит/с соответственно). С одной стороны, срез на 13 кГц у LC делает звучание заметно глуше, но с другой — SBR, работающая в диапазоне 9.5 - 20.5 кГц приводит к синтетическому, неестественному звучанию высоких. Хотя надо сказать, что субъективно (если не сравнивать с исходным треком), SBR даёт весьма приемлемое звучание.
Непосредственное сравнение
Попробуем подогнать настройки обоих кодеров таким образом, чтобы получить на выходе одинаковый битрейт и частотный срез. Это позволит проанализировать и сравнить качество алгоритмов кодирования в одинаковых условиях.
Так как настройки FhG AAC ограничены, подгонять будем параметры FDK AAC. Добиться одинакового результата мне удалось при следующих параметрах:
FhG AAC VBR 4 (130 kbps)
FDK AAC -m 3 -w 16500 (132 kbps)
Однако, на этом битрейте кодеры справлялись с выбранной композицией настолько хорошо, что выявить отличия мне не удалось даже при сравнении с оригиналом. Тем не менее я отметил для FDK AAC чуть более плотный спектр в области ВЧ.
Тестирование же на киллер семпле TyDi - Meet Me In Kyoto дало субъективно лучший результат для FhG, и это при том, что его битрейт на данном семпле оказался на 18 кбит/с ниже. Аналогичный результат я отметил и для семпла Tiesto - Do You Feel Me. У FhG AAC было заметно меньше артефактов, обусловленных транзиентами. Такие же результаты я получил и для режима FDK AAC -m 4, без ручной установки ФНЧ это повысило битрейт на несколько кбит/с, но FhG всё равно давал меньше искажений.
Выводы
По результатам моих опытов могу сделать вывод, что FDK по возможностям и гибкости конфигурации не уступает FhG AAC, и даже превосходит его. Но в то же время похоже, что утверждение разработчиков о продвинутом качестве платного кодера не беспочвенно, и коммерческий FhG AAC из Winamp действительно использует более совершенные алгоритмы, чем кодер на основе открытого исходного кода. Кроме того, FhG AAC заметно лучше и по показателям быстродействия: 37x для FDK AAC -m 4 против 60х для FhG AAC --vbr 4.
Информация от спонсора
WEB Evolution: веб-студия Батурина Андрея. Компания WEB Evolution занимается профессиональной разработкой и продвижением любых сайтов: корпоративных сайтов, сайтов фирм, представительств и т.д. Сервис компании отличает высокий профессионализм, индивидуальный подход и доступные цены. Свой заказ на сайт Вы можете на домашней странице компании webevolution.ru. WEB Evolution — лучшие сайты в СПб.