http://ixbt.stack.nethttp://ixbt.stack.nethttp://ixbt.stack.net

Процессоры | Системные платы | Видеосистема | Носители информации | Мультимедиа | Периферия | Коммуникации | Поиск по сайту

Тестирование MPEG Layer 3 (MP3) кодеров

iXBT Banner Network

Предисловие

Пару слов о стиле изложения. Я хотел сделать материал, изложенный здесь, доступным для максимально большого круга читателей. Поэтому информации очень много, и, почти наверняка, ее больше, чем кому-либо нужно. Так, например, человеку не искушенному в технологиях звукозаписи не будет интересно смотреть на графики с чисто техническими характеристиками звука; а специалисту нет нужды читать, что такое децибелл. Таким образом, прошу вас, если вам какой-то раздел вам не интересен, просто пропустите его. Возможно, он будет интересен кому-то другому.

Прежде всего я хочу очертить круг вопросов, которые я хотел выяснить для себя, проведя это тестирование. Я решил собрать себе фонотеку и сохранить записи в формате MP3. В связи с этим у меня возникло 2 вопроса:

  1. Какой степени сжатия файлов достаточно для сохранения приемлемого уровня качества звука?
  2. Возможно ли сжать хоть чуть-чуть аудио-информацию при полном сохранении качества или с незначительным ухудшением качества?

То есть изначально я планировал сохранять аудио-информацию в двух копиях: одна со сжатием побольше (п. 1) - для ежедневного использования, другая с претензией на максимальное сохранение качества (п. 2) - для использования в будещем, скажем, для записи избранных песен на CD или для переведения фонотеки на новый, более прогрессивный и качественный формат.

Таким образом сразу можно выделить мои предпочтения к кодерам: скорость работы меня не интересовала вообще, степень сжатия (а, значит, и размер результирующего файла) меня интересовали по стольку по скольку. Главным критерием было качество.

Прошу вас, еще раз внимательно перечитайте предисловие и не задавайте мне вопросы типа "А почему ты не любишь Xing (как вариант: формат vqf, или еще что-нибудь)? Он ведь быстрый, и качество сносное." Меня не устраивает сносное качество при высокой скорости, компактности и прочем. Мне нужно максимально возможное качество передачи звука, даже ценой размера и скорости кодирования.

Описание метода тестирования

При помощи программы Digital Audio Copy for Win32 (WinDAC) 1.49 были созданы копии 2-х записей с CD в WAV-файлах. Записи были выбраны по следующим критериям: различимое на слух наличие высокочастотной составляющей, наличие нетривиальных стереоэффектов, наличие песен в моей небогатой фонотеке на CD. В итоге я выбрал Dog New Tricks от Garbage (из альбома Garbage) и Gone Away от Offpring (из альбома Americana).

Я отлично знаю, что куда как больший динамическией диапазон звука не у рок-музыки, а у, скажем, симфонической музыки. К сожалению, ее нет на CD у меня дома. Как только у меня появится возможность взять где-то CD с классикой в исполнении органа или симфонического оркестра, я проведу новый этап тестов.

Потом я создавал файлы формата MP3 при помощи нескольких кодеров. С помощью каждого кодера было создано несколько файлов - со всеми степенями сжатия меньше, чем 11:1 (128 kbps) включительно, которые поддерживает данный кодер.

После этого файлы формата MP3 были декодированы в файлы формата WAV и дальнейшая работа велась уже с этими WAV-файлами. Это сделано для того, чтоб ликвидировать искажения, вносимые проигрывателями MP3-файлов. Для декодирования MP3 использовался декодер l3dec V2.71 ISO/MPEG Audio Layer III Software Only Decoder от Fraunhofer-IIS - организации, которая первая разработала и начала распространять коммерческий программный кодер и декодер MP3. Популярность, которую приобрел данный кодер, а также то, что Fraunhofer-IIS продает свои продукты для самых серьезных приложений, оставляет надежду, что декодирование файлов происходит в строгом соответствии со стандартом ISO MPEG (многие проигрыватели MP3 пытаются как-то улучшить качество звучания и единственное что у них получается наверняка - это внести дополнительные искажения). В случае, если файл невозможно декодировать при помощи l3dec (некоторые файлы со сжатием 4:1, 320 kbps), использовался WinAmp 2.24, декодер которого построен также на основе кода от Fraunhofer-IIS.

Далее при помощи программы CoolEdit Pro 1.1 (в последнее время - версии 1.2) анализировались первые 30.000 секунд каждого файла и строилсиь амплитудно-частотные характеристики (АЧХ) отдельно для левого, правого каналов и условного центра (смесь левого и правого каналов в пропорции 1:1). Так уж этот CoolEdit устроен, но нормально эти АЧХ выглядят только в диапазоне от 350 Гц до 21.7 кГц. Для дальнейшего анализа АЧХ я написал программу на языке Object Pascal в среде Borland Delphi 3 - программа очень сильно привязана к локальной структуре каталогов и именам файлов у меня на винчестере, поэтому вам наверняка не удастся запустить ее сразу. Тем не менее - вот ее исходные тексты (20.5 Kb). Программа имеет на входе набор копий экрана (screenshot'ов) из CoolEdit'а с АЧХ, а на выходе создает набор более-менее оформленных рисунков с этими АЧХ и графики сравнения АЧХ оригинальной записи с CD с АЧХ файла MP3. Именно эти графики наиболее наглядно представляют информацию о качестве кодирования, именно они и представлены на этой странице. Впрочем, при помощи ссылок вы сможете получить доступ ко всем графикам и АЧХ.

Программа использует несложные формулы, которые описаны в соответствующем разделе.

Описание терминов



Термин Описание
Кодер (англ. coder, encoder) Программа и/или устройство, используемые для преобразования информации из одного вида в другой (кодирование). Мы рассматриваем программы, которые преобразуют аудио-данные из формата PCM WAV в ISO MPEG Audio Layer III (MP3).
Декодер (англ. decoder) По сути то же, что и кодер, но осуществляет преобразование в обратном направлении.
Кодек (англ. codec) Кодер и декодер в одном блоке.
Степень сжатия Отношение размера входного (некодированного) файла к размеру выходного (кодированного) файла. Например, степень сжатия 11:1 означает, что закодированный файл в 12 раз меньше оригинала.
Битрейт (англ. bitrate) Количество бит, отведенное для записи еденицы времени аудио-информации. Измеряют обычно в кб/с, то есть килобит в секунду (англ. kb/s или kbps).
Децибелл (англ. decibell, обознач. дБ, dB) Еденица измерения каких-либо величин. Очень часто используется в звукотехнике из-за особенностей восприятия звуков человеком. По опрелению значение величины в децибеллах равно десяти логарифмам отношения величины в обычных единицах к некоей опорной величине в обычных единицах. В звукотехнике часто в качестве опроной величины берется максимальный уровень звука, таким образом если обозначить нашу величину как Ux, формула для определения этой же величины в децибеллах запишется как Значение величины в децибеллах получается отрицательным. Особенность человеческого слуха в том, что звук в -40 дБ кажется в 2 раза тише, чем звук в -20 дБ, хотя очевидно (см. формулу), что величина U40, описывающая этот звук (напр. мощность звукового потока), в 100 раз меньше величины U20. Получается что "ухо слышит в децибеллах".
Логарифмическая шкала Шкала, в которой величины, соответствующие соседним отметкам, различаются не на одинаковую величину (как это делается обычно - линейная шкала), а в одинаковое число раз. Понятно, что при этом логарифмы эти величин будут отличаться на одинаковые величины - откуда и пошло название. Особенность человеческого слуха хорошо демонстрируется музыкальным рядом: частота зауков, соответствующих одной и той же ноте из двух соседних октав, различаются в 2 раза. Таким образом для того, чтоб отметки, соответствующие октавам, отстояли на одном и том же расстоянии друг от друга на графике, шкала по частоте должна быть логарифмической и частоты, соответствующие отметкам, должны различаться в 2 раза. Если нанести еще отметки - посредине между уже имеющимися - то частота, соответствующая двум соседним отметкам будет отличаться в раз - именно так и сделано на приведенных ниже на этой странице графиках с логарифмической шкалой. (В графиках, добавленных при обновлении страницы, используется шкала вдвое мельче - значения соседних отметок различаются в 21/4 раза.)
АЧХ (амплитудно-частотная характеристика, англ. AFG, amptitude to frequency graph) Зависимость уровня сигнала от частоты сигнала. Из-за того, что уровень может измеряться и в единицах мощности звукового потока, и в еденицах электрического напряжения (по отношению к электрическому представлению этого же сигнала в схемах, скажем, усилителя), и много чего еще; а также учитывая особенности человеческого слуха (см. Децибелл), уровень сигнала часто измеряют в дБ и не конкретизируют, об уровне чего (громкости, напряжения) идет речь. АЧХ можно построить в виде графика.

Напомню, что стандарт ISO MPEG Audio Layer III предусматривает сжатие с потерями качества, причем потери тем больше, чем больше степень сжатия. Между степенями сжатия и битрейтами существует регламентируемая стандартом однозначная зависимость:

Степень сжатия Битрейт
11:1 128 кб/с
8:1 160 кб/с
7:1 192 кб/с
6:1 224 кб/с
5:1 256 кб/с
4:1 320 кб/с

(Таблица не полная, тут перечисленны только битрейты, которые я использовал в тестировании. Таблица составлена в предположении, что на вход подаются аудиоданные в формате PCM 16 бит, стерео, с частотой дискретизации 44 кГц.)

Использовавшиеся формулы

Как уже упоминалось, наиболее наглядно информация о качестве кодирования показана на графиках, где сравниваются АЧХ оригинального и закодированного файлов. Учитывая то, что CoolEdit строит АЧХ в дБ, нетривиально как сравнивать величины с АЧХ. Тем более, что результирующие графики я хотел тоже построить в дБ: отношение уровня сигнала закодированного файла к уровню сигнала оригинала.

Обозначим уровень сигнала как Ux. Нас интерисует величина

(1)

Эта же величина в дБ равна

(2)

Выполним простые математические преобразования в (2):





(3)


Считая что

(4)

получим

(5)

Строго говоря, у нас нет никаких оснований считать, что (4) верно. Но, учитывая то, что в обе части равенства относятся к одной и той же записи (оригинальный вариант и закодированный), будем считать что при кодировании максимальный уровень сигнала не изменяется или почти не изменяется.

Таким образом мы получили удобную формулу (5) для анализа АЧХ и построения интересующих нас зависимостей. Формула (5) используется в программе для анализа АЧХ, которая упомянута выше.

Использовавшиеся кодеры

На сегодняшний день существует 3 основных источника, создавшие программы для кодирования музыки в MP3. Это уже упоминавшийся Fraunhofer-IIS, Xing Technologies и собственно ISO, которая приложила к стандарту ISO MPEG демонстрационный свободно распространяемый (но весьма медленный) код. Львиная доля созданных на сегодня кодеров использует код одной из этих организаций. Кодеры на основе кода от Fraunhofer-IIS работают достаточно быстро, весьма качественно, но не обеспечивают степень сжатия 4:1 (320 кб/с). Кодеры на основе кода от Xing быстры но некачственны. Кодеры на основе кода от ISO очень медленны (демонстрационный код совсем не оптимизирован), обеспечивают высокое качество и степени сжатия вплоть до 4:1. Итак:

AudioCatalyst by Xing Technology Corporation - version 2.1

Коммерческий кодер от Xing Technology Corp. Весьма оригинальная программа: представляет собой оригинальный код от Xing Tech в режиме "без высоких частот" и код от Fraunhofer'а оптимизированный по скорости (качество, соответственно упало, но все же лучше чистого Xing'а) в режиме "сохранения высоких частот". Все это - в одном блоке с программой для копирования музыки с CD - AudioGrabber. Работает очень быстро, но качество оставляет желать лучшего, хотя опять же: при "сохранении высоких частот" качество лучше оригинального Xing'а, хотя и до Fraunhofer'а не дотягивает. Домашняя страница - http://www.xingtech.com. Интерфейс программы полностью позаимствован у AudioGrabber'а.

BladeEnc : Blade's MP3 Encoder - version 0.82

Свободно распространяемый кодер, написанный Тордом Янсоном (Tord Jansson). Представляет собой оптимизированный код от ISO. Работает быстрее, чем "чистый" ISO-код, но в интернете есть сообщения о некорректной работе на степени сжатия 11:1 (128 кб/с). Домашняя страница - http://bladeenc.cjb.net. Интерфейс программы только из командной строки, но в интернете есть полно программ-оболочек к Blade. Я использовал Bladebatch 2.97 SE Евгения Логинова, тоже свободно-распространяемая программа, домашняя страница на eal.da.ru.

LAME : LAME Ain't an Mp3 Encoder, version 3.24

Свободно распространяемый патч для исходного кода ISO, разрабатываемый группой энтузиастов. Представляет собой оптимизированный код от ISO. Распространяется в виде набора исходных файлов, которые являются дополнениями и исправлениями исходного кода ISO (Это сделано для обхода законов про лицензирование программ кодирования MP3 фирмой Fraunhofer. Ведь LAME это не программа, это набор исходников, значит ее нельзя запретить к свободному распространению :) Тем не менее в интернете легко найти уже компилированые варианты LAME под любую ОС.). Работает быстрее и качественее, чем "чистый" ISO-код. Домашняя страница - http://www.sulaco.org/mp3. Интерфейс программы только из командной строки.

Примечание: этот кодер тестировался в двух режимах: со включенной и с выключенной психоаккустической моделью (LAME -f). Это не 2 разных кодера, а всего лишь 2 режима работы одного кодера, хотя они и отличаются по результату.

MP3 Compressor v. 0.9f by MP3hC

Свободно распространяемый кодер на основе кода от Fraunhofer IIS, написанный неким MP3hC. Является дальнейшем развитием l3enc - а именно переписанная версия того же алгоритма. За счет оптимизации программа работает в 3 раза быстрее (со слов автора). Поддерживает только степень сжатия 11:1 (128 кб/с). Веб страница - http://www.chez.com/mp3hc/. Интерфейс программы очень удобный и имеет уникальную в своем роде возможность изменения приоритета выполнения программы кодирования непосредственно во время кодирования файлов.

MP3 Encoder : MPEG Layer-3 Encoder V3.1 Demo by Fraunhofer IIS-A

Свободно распространяемая демо-версия коммерческого кодера от Fraunhofer IIS. Является дальнейшем развитием l3enc, который упоминался выше. Не поддерживает степень сжатия 4:1 (320 кб/с). Веб страница - http://www.iis.fhg.de/audio/. Интерфейс программы только из командной строки, но в интернете есть полно программ-оболочек. Я создавал обычные пакетные (batch, *.bat) файлы. Эта демо-версия кодирует только первые 30 секунд файла.

MP3 Producer : .mp3 Producer v. 2.1 (Build 47) by Fraunhofer-Gesellschaft - IIS

Коммерческий кодер от Fraunhofer IIS. Является дальнейшем развитием l3enc, который упоминался выше, но ушел от него очень и очень далеко. Не поддерживает степень сжатия 4:1 (320 кб/с). Веб страница - http://www.iis.fhg.de/audio/. Интерфейс программы не самый лучший, но все же лучше, чем командная строка.

mpegEnc : mpeg Encoder v. 0.07 by SoloH

Свободно распространяемый кодер, написанный неким SoloH. Представляет собой оригинальный код от ISO. Работает медленно, но точно качественно. Домашняя страница - http://www.isafeelin.org/soloh/mpegEnc.html. Интерфейс программы весьма и весьма хорош.

Xing : XingMP3 Encoder 1.02 by Xing Technology Corporation

Коммерческий кодер от Xing Technology Corp. Представляет собой оригинальный код от Xing Tech. Работает очень быстро, но качество оставляет желать лучшего. Домашняя страница - http://www.xingtech.com. Интерфейс программы весьма оригинален но не очень удобен.

Xing : XingMP3 Encoder 1.5 by Xing Technology Corporation

Новая версия коммерческого кодера от Xing Technology Corp. Оригинальный код от Xing Tech. Работает очень быстро, но качество оставляет желать лучшего - за время с выхода предыдушей версии был введен режим "сохранения высоких частот", но и он не спасает положения, хоть все-таки высоких частот чуть-чуть добавляет. Домашняя страница - http://www.xingtech.com. Интерфейс программы совсем не измеился.

Результаты тестирования

Поддержка битрейтов

Степень сжатия и битрейт
11:1 8:1 7:1 6:1 5:1 4:1
128 кб/с 160 кб/с 192 кб/с 224 кб/с 256 кб/с 320 кб/с
AudioCatalyst да да да да да да
Blade Enc. да да да да да да
LAME да да да да да да
MP3 Compr. да нет нет нет нет нет
MP3 Enc. да да да да да нет
MP3 Producer да да да нет да нет
mpeg Enc. да да да да да да
XingMP3 Enc. 1.02 да нет да нет нет да
XingMP3 Enc. 1.5 да да да да да да


Поддержка стерео режимов

По стандарту ISO MPEG существует несколько способов кодирования стерео сигналов:

Dual chanel или
dual mono или
dual stereo
Левый и правый каналы кодируются раздельно как 2 разных записи, на каждый из каналов отводится ровно половина места в результирующем файле.
Stereo Левый и правый каналы кодируются раздельно как 2 разных записи, но кодер может выделить одному из каналов в данный момент времени больше места - это делается для того, чтоб избежать кодирования тишины в одном канале, если во втором есть сигнал. Оптимальный вариант.
Joint stereo Левый и правый каналы кодируются вместе, а в результирующий файл записывается информация о двух каналах в нетривиальной форме, например: левый канал и отличие правого канала от левого (на 2-ю часть отдается меньше места). Есть несколько стандартов представления информации joint stereo, но всех их объединяет существенный недостаток: плохая передача стерео эффектов, в частности портится фазовая информация.

Некоторые кодеры позволяют в явном виде выбирать режим кодирования стерео сигнала, другие выбирают автоматически. Следуюшая таблица иллюстрирует это:

Степень сжатия и битрейт
11:1 8:1 7:1 6:1 5:1 4:1
128 кб/с 160 кб/с 192 кб/с 224 кб/с 256 кб/с 320 кб/с
AudioCatalyst JS S JS S JS S JS S JS S JS
Blade Enc. S S S S S S
LAME S JS S JS S JS S JS S JS S JS
MP3 Compr. JS - - - - -
MP3 Enc. JS S S S S -
MP3 Producer JS JS JS - S -
mpeg Enc. S DC S DC S DC S DC S DC S DC
XingMP3 Enc. 1.02 S - S - - S
XingMP3 Enc. 1.5 S JS S JS S JS S JS S JS S JS

Обозначения: JS - joint stereo, S - stereo, DC - dual chanel; если указано несколько значений, значит программа допускает выбор режима. Первым указан режим использовавшийся при тестировании.

Скорость кодирования

Как я уже говорил, для меня этот параметр не критичен: если программа работает качественно, то я согласен подождать. Тем не менее, для того, чтоб тестирование было более полным, я протестировал и производительность кодеров.

Для тестирования скорости кодирования я отрезал по 30.000 секунд от WAV-файлов с записью песен с CD. В таблице приведено время кодирования 30 секунд песни Garbage, ниже - Offspring'а. Все тесты проведены на моем домашнем компьютере (Pentium 60 МГц, ОЗУ 24 МБ, ОС Windows 98). Во время тестирования запущены только 2 программы - "Свойства: Дата и время" из "Панели управления" (там часы с секундомером) и кодер (на переднем плане). Если программа поддержавает выбор приоритета выполнения операции кодирования, то выбирался приоритет Normal.

Степень сжатия и битрейт
11:1 8:1 7:1 6:1 5:1 4:1
128 кб/с 160 кб/с 192 кб/с 224 кб/с 256 кб/с 320 кб/с
AudioCatalyst 0:36
0:36
0:37
0:37
0:37
0:37
0:37
0:37
0:39
0:38
0:40
0:38
Blade Enc. 4:35
4:35
4:04
4:12
3:59
4:01
3:53
3:56
3:49
3:51
3:49
3:54
LAME 3:21
3:21
2:58
3:01
2:41
2:48
2:32
2:32
2:29
2:27
2:28
2:26
LAME -f 1:22
1:20