◢Начало << | MP3-кодирование. Часть 1: Максимум качества и вся правда о Lame | |
Результаты Для удобства просмотра и дальнейшего обновления я сделал краткую flash-таблицу, отображающую только 2 наиболее важных параметра: ранжирование по качеству и ранжирование по размеру полученных файлов. Для сортировки по одному из столбцов просто щелкните мышкой по его заголовку. Для просмотра соответствующей спектрограммы щелкните по строке таблицы. В двух самых нижних строчках отображаются методы, лучшие по параметрам «Качество» и «Размер+Качество» соответственно. Далее для рассмотрения каждой колонки, я буду приводить полный вариант таблицы с сортировкой по убыванию ее значений, то есть на верхних позициях окажутся самые «лучшие» варианты. Пожалуй, начну с самого интересного — колонка ранжирования качества StdRange. Codec | AvgDev | StdDev | FileSizeRange | StdRange | Lame 3.93.1 [-b320 -q0 -k] | 0,110754115 | 0,044606696 | 0 | 1 | Lame 3.93.1 [-V 0 -q0 -k] | 0,132362035 | 0,051364303 | 0,963355136 | 0,999873982 | Lame 3.96.1 [-V 0 -q0 -k] | 1,056328173 | 7,036838851 | 0,743143445 | 0,869606845 | Lame 3.98.a3 [-V 0 -q0 -k] | 1,088548967 | 8,033110624 | 0,629823129 | 0,851028083 | Lame 3.97b3 [-V 0 -q0 -k] | 1,135114563 | 8,793704006 | 0,701218219 | 0,836844319 | Lame 3.96.1 [-b320 -q0 -k] | 1,605596895 | 18,52494139 | 0 | 0,655373407 | Lame 3.98.a3 [-b320 -q0 -k] | 1,788113784 | 22,00533421 | 0 | 0,590470042 | Lame 3.97b3 [-b320 -q0 -k] | 1,82542039 | 23,33319882 | 0 | 0,565707641 | Lame 3.98a3 [--preset insane] | 1,760369912 | 33,97774411 | 0 | 0,367205101 | Lame 3.931 [--preset insane] | 1,767480367 | 34,18538663 | 0 | 0,363332924 | Lame 3.97b3 [--preset insane] | 1,779203952 | 34,7341755 | 0 | 0,353098951 | Lame 3.96.1 [--preset insane] | 2,049475884 | 36,69199647 | 0 | 0,316588943 | Lame 3.931 [--preset extreme] | 2,364801514 | 44,28352389 | 1 | 0,175019958 | Lame 3.96.1 [--preset extreme] | 2,65607522 | 53,01423734 | 0,736043981 | 0,012207104 | Lame 3.98a3 [--preset extreme] | 2,639891606 | 53,44477672 | 0,683169997 | 0,004178282 | Lame 3.97b3 [--preset extreme] | 2,648850423 | 53,66883387 | 0,703914794 | 0 |
Напомню, что оценки распределены от 0 до 1, и чем больше значение, тем выше качество. Как видим, на двух первых строчках расположены CBR- и VBR- варианты предложенных мною параметров (Lame 3.93.1 [-b 320 -q0 -k] и [-V 0 -q0 -k]). Причем, даваемое качество VBR практически не уступает CBR (1 и 0.99987 практически равны — разница меньше 0.0001%!). При этом от следующих параметров, расположенных на третьем месте, у первых двух абсолютный отрыв — на 13%! Первая колонка четко разделена на 2 половины: верхние позиции занимают кодирования с параметрами [-q0 -k], а нижние — стандартные. Причем при использовании параметров [-q0 -k], кроме кодека версии 3.93.1, лучшие результаты дает VBR-метод, а уже за ними следуют CBR, что говорит о том, что действительно последние версии больше ориентированы на кодирование переменным битрейтом. При использовании стандартных установок (-b 320: insane; -V 0: extreme) лучшие результаты дает постоянный битрейт, однако даваемое качество отличается от максимального более чем на 63%. Если попытаться оценить качество самих кодеков, то очевидно наилучшие результаты (с громадным отрывом от остальных) дает версия Lame 3.93.1. Если попытаться дать абсолютную оценку, то по третьей колонке StdDev можно увидеть, что квадрат отличия от оригинала практически равен 0 (0.04 и 0.05), в то время как уже третья строчка дает квадрат разницы, равный 7.03, а последняя строчка вообще 53.669. Это позволяет говорить о том, что кодирование кодеком Lame 3.93.1 с параметрами [-q0 -k] дает практически оригинальный сигнал с ничтожно небольшой разницей. Значительно позади следуют кодеки Lame 3.96.1 и Lame 3.98a3, и уже совсем безобразно себя показал Lame 3.97b3. Теперь посмотрим на ранжирование по размерам полученных файлов. Codec | AvgDev | StdDev | FileSizeRange | StdRange | Lame 3.931 [--preset extreme] | 2,364801514 | 44,28352389 | 1 | 0,175019958 | Lame 3.93.1 [-V 0 -q0 -k] | 0,132362035 | 0,051364303 | 0,963355136 | 0,999873982 | Lame 3.96.1 [-V 0 -q0 -k] | 1,056328173 | 7,036838851 | 0,743143445 | 0,869606845 | Lame 3.96.1 [--preset extreme] | 2,65607522 | 53,01423734 | 0,736043981 | 0,012207104 | Lame 3.97b3 [--preset extreme] | 2,648850423 | 53,66883387 | 0,703914794 | 0 | Lame 3.97b3 [-V 0 -q0 -k] | 1,135114563 | 8,793704006 | 0,701218219 | 0,836844319 | Lame 3.98a3 [--preset extreme] | 2,639891606 | 53,44477672 | 0,683169997 | 0,004178282 | Lame 3.98.a3 [-V 0 -q0 -k] | 1,088548967 | 8,033110624 | 0,629823129 | 0,851028083 | Lame 3.93.1 [-b320 -q0 -k] | 0,110754115 | 0,044606696 | 0 | 1 | Lame 3.96.1 [-b320 -q0 -k] | 1,605596895 | 18,52494139 | 0 | 0,655373407 | Lame 3.98.a3 [-b320 -q0 -k] | 1,788113784 | 22,00533421 | 0 | 0,590470042 | Lame 3.97b3 [-b320 -q0 -k] | 1,82542039 | 23,33319882 | 0 | 0,565707641 | Lame 3.98a3 [--preset insane] | 1,760369912 | 33,97774411 | 0 | 0,367205101 | Lame 3.931 [--preset insane] | 1,767480367 | 34,18538663 | 0 | 0,363332924 | Lame 3.97b3 [--preset insane] | 1,779203952 | 34,7341755 | 0 | 0,353098951 | Lame 3.96.1 [--preset insane] | 2,049475884 | 36,69199647 | 0 | 0,316588943 |
Как не трудно догадаться, на последних местах оказались все кодирования с постоянным битрейтом. Все потому, что размеры фреймов в этих случаях одни и те же, продолжительность сигнала (а значит и количество фреймов) тоже одинаковое, отсюда и неизменный размер конечных файлов, причем максимально возможный (это, я надеюсь, уже ясно почему). Так что тут мы будем говорить исключительно о VBR-методах, потому и обсудим заодно их логику. При использовании переменных битрейтов, для кодирования каждого фрагмента звука каждый раз выбирается новый размер фрейма. То есть, при VBR-методах, алгоритм начинает по-настоящему думать, а точнее оценивать — какой минимально возможный размер фрейма нужно взять, чтоб разместить в нем данный фрагмент, обеспечив заданное качество (на которое и влияют параметры кодирования и непосредственно сам алгоритм) Чтоб было понятнее, приведу наглядный пример. Число 5 можно записать как 000005, и как 005. При кодировании постоянным битрейтом [-b 320] будет выбран первый вариант, и число будет записано как 000005. При кодировании переменным битрейтом [-V 0], будет выбрано число 005, а может даже и просто 5. Если необходимо записать целый ряд чисел 549854107654, то понятно, что при кодировании переменным битрейтом конечная строка символов будет короче, нежели при постоянном. |
К сожалению, стандартные настройки VBR- методов (--preset extreme) дают более низкие результаты, качества, нежели CBR (это к возвращению к предыдущей таблице). Но с параметрами [-q0 -k] все наоборот, кодек начинает повышать качество результата, стараясь не обгрызать частоты (хотя все последние версии кодеков все равно достаточно прожорливы). И так, вернемся к размерам файлов. Наименьший размер файла дал кодек Lame 3.93.1 со стандартными параметрами VBR-метода, однако получаемое качество оказалось аж на 13 месте (по предыдущей таблице), поэтому этот результат нам абсолютно неинтересен. На втором месте не с таким уж большим отрывом от первого оказывается Lame 3.93.1 с набором параметров [-q0 -k], а это, как мы помним, лидер по качеству. Таким образом, переменный битрейт с параметрами [-q0 -k] кодека Lame 3.93.1 дает не только максимальное качество, но и минимальный размер — согласитесь, это и есть то, ради чего производится кодирование в принципе. Для абсолютного сравнения скажу, что кодирование эталона (а его длительность составляет 1:37 минут) постоянным битрейтом дало размер файла 3.723 Мб, а кодированием Lame 3.93.1 [-V 0 -q0 -k] получили файл размером 2.835 Мб, то есть экономия составляет почти 1 Мб для каждых полутора минут! Это при том, что мы получаем минимальные искажения эталона! На третьем месте Lame 3.96.1 [-V 0 -q0 -k], который по качеству тоже на третьем месте. Остальные места можете посмотреть сами — тут описывать особо больше нечего. Выводы Первозданный спектр (без среза частот) удалось сберечь только кодеком Lame 3.93.1 CBR- и VBR-алгоритмами с параметрами [-q0 -k]. Минимальные искажения спектра оригинала дает кодек Lame 3.93.1 с параметрами кодирования [-b320 -q0 -k], однако в этом случае получается самый большой размер mp3-файла. Практически не уступает ему по качеству кодирование кодеком Lame 3.93.1 с параметрами [-V 0 -q0 -k] — разница качества от предыдущего меньше 0.0001%, зато размер получаемого файла наименьший (второе место по размеру). Именно поэтому этот метод кодирования я считаю наиболее лучшим и рекомендуемым, поскольку только он выполняет поставленную задачу: при минимальном размере mp3-файла вносятся наименьшие искажения. Разница в 0.0001% — это практически 0, а вот размер mp3-файла меньше на 24%. Игру «CBR против VBR» выигрывает VBR-метод. В случае кодека Lame 3.93.1 — как «умный» метод, идеально подбирающий наименьший размер фрейма для размещения всего спектра сигнала, внося пренебрежимо малые дополнительне искажения. В случае остальных кодеков — как метод, откровенно превосходящий CBR-метод по качеству (правда только с «насильственным» применением параметра [-k]), с помощью которого возможно получить наименьшие искажения в принципе, сохранив хоть что-то большее от оригинала по сравнению с CBR. И последнее, что можно сказать: наилучшим кодеком из семейства Lame является совершенно неновая версия 3.93.1. Да, в поздних версиях совершенствуется алгоритм работы VBR-метода, но сам алгоритм сжатия сигнала во фрейм фиксированного размера, что в конечном счете использует VBR-метод после определния размера фрейма, стал хуже, а поэтому по цепочке хуже стал и сам VBR-метод. Последний абзац Последний абзац посвящается приверженцам других кодеков, пресетов и т. п. В рамках рассмотренных мной методов кодирования максимальное качество обеспечивает кодек Lame 3.93.1. Однако существует множество других кодеков и не менее популярных lossy-форматов (ogg, mpc и др.), которые здесь (пока) не рассмотрены. Если вы считаете, что ваш метод кодирования (под методом я подразумеваю кодек, его версию и параметры кодирования) дает результаты, аналогичные максимально выявленным здесь или выше, то напишите об этом ниже в комментариях. Я добавлю в сводную flash-таблицу результатов ваш метод и возможно мы вместе найдем еще что-то лучшее (дающее еще меньший размер файла при обеспечении еще более высокого качества). А вообще подискутировать, думаю, тут есть о чем . ◢Начало << © Shonn, 10.2006 Использование материала возможно только с согласия автора. ◢Продолжение >> |