Обновлено: 01.02.2005

 

 

СЖАТИЕ АУДИОДАННЫХ

 

 

Сжимать или нет?

 

            На данной странице по этому поводу никаких споров и рассуждений не будет. И советов я давать не стану. Сжимать или нет – пусть каждый самостоятельно решает. Но сжатие существует независимо от того, нравится оно Вам или нет. И все равно возникают ситуации, когда без него никак не обойтись. Поэтому просто переходим к технологиям сжатия.

 

Сжатие без потерь

 

Задача: уменьшить размер аудиофайла без потери качества. Не «слышимой» или «заметной» потери качества, а вообще без какой-либо потери. То есть с возможностью получения исходного файла «один в один» после обратного преобразования. Для решения этой задачи можно воспользоваться обычным архиватором. Однако логичнее использовать специализированную программу, учитывающую особенности звуковых файлов и потому более эффективно сжимающую их. Помимо большей степени сжатия, полученные файлы имеют еще одно преимущество – более широкий спектр возможностей использования сжатых файлов без распаковки.

 

Существует целый ряд программ для сжатия аудиоданных без потерь. Мне больше всего понравился кодировщик Windows Media (я использовал 9-ю версию). Дело в том, что на выходе мы получаем файл достаточно распространенного формата – wma, с которым может работать большое количество популярных программ. При этом степень сжатия, обеспечиваемая кодировщиком Windows Media, находится на уровне лучших представителей конкурирующих форматов. Речь о кодировщике Windows Media версии 9 еще пойдет в главе «Сжатие с потерями», поэтому здесь я не буду подробно останавливаться на нем. Для тех же, кому не терпится (или кто достаточно хорошо знаком с этим кодировщиком) скажу лишь, что сжатие без потерь осуществляется в режиме «качество с переменной скоростью» (VBR) при выборе кодека «Windows Media Audio 9 Lossless».

 

Также достойна внимания программа «Monkey's Audio», позволяющая создавать файлы как собственного формата (расширение «ape»), так и файлы других форматов: WavPack (расширение «wv») и Shorten (расширение «shn»), а также декодировать их обратно в wav. Если Вы решите воспользоваться этой программой, то рекомендую Вам именно «родной» формат – ape.

 

Для себя я взял эту программу на заметку лишь для того, чтобы иметь возможность с ее помощью декодировать файлы поддерживаемых ею форматов. Ну, вдруг такие попадутся. Сам же я кодировать без потерь буду исключительно в wma – проигрыш по степени сжатия по сравнению с ape просто копеечный, зато открыть файл можно почти везде.

К плюсам программы «Monkey's Audio» можно отнести ее простоту и удобство использования, бесплатность, возможность интеграции с другими программами, а также возможность сжатия с потерями в различные форматы, в том числе в mp3 с использованием лучшего кодера «Lame» (для этого нужно поместить файл lame.exe в каталог External).

 

Свежую версию программы «Monkey's Audio» Вы можете скачать по этой ссылке (плагин для плеера WinAmp версий 2.х входит в дистрибутив).

Для проигрывания ape-файлов можно использовать плеер foobar2000 (это далеко не единственная возможность плеера foobar2000, но этот раздел все-таки не про плееры).  

Плагин для Nero Burning ROM (для версии 5.5.9.0 или новее) можно взять здесь.

 

Для 5-ой версии Nero плагин нужно распаковать в каталог "...\Ahead\Shared\AudioPlugins", для 6-ой версии – в каталог "\Program Files\Common Files\Ahead\AudioPlugins". После установки плагина Nero сможет воспроизводить ape-файлы, записывать их на аудиодиски, а также кодировать wav-файлы в формат «Monkey's Audio».

 

Кстати, я упоминал об архиваторах. Так вот, популярный WinRAR при упаковке wav-файлов понимает, что ему «подсунули» аудиоданные и использует соответствующий алгоритм для сжатия. В новых версиях от пользователя даже не требуется никаких действий, в более старых необходимо установить галочку «мультимедиа сжатие». (Вот только сжимает он в большинстве случаев ощутимо хуже, чем специализированные программы типа «Monkey's Audio» и кодировщика Windows Media). Также полезно будет знать, что архивы тоже можно прослушивать без распаковки, например уже упоминавшимся плеером foobar2000.

 

Сжатие без потерь имеет недостаток – невысокий уровень компрессии. Конечно, он зависит от сложности информации, содержащейся в исходном файле (тишина, например, замечательно сжимается). Однако, применительно к большинству музыкальных композиций, можно сказать, что если исходный файл удалось сжать в два раза, то это уже отличный результат. А если этого недостаточно и Вам необходимо получить еще меньший размер файла? Здесь на выручку приходит сжатие с потерями.

 

 

Сжатие с потерями

 

Сразу хочу всех предостеречь от повального кодирования с потерями всего, что только под руку попадется. Помните, что кодирование с потерями означает невозможность получения оригинала из сжатого файла. Вы, конечно, без труда преобразуете mp3 или wma в несжатый wav-файл, однако то, что было потеряно при кодировании, потеряно навсегда и не может быть восстановлено. Кроме того, помните, что степень сжатия не всегда является показателем качества. Более сильно сжатый файл может звучать лучше, чем файл с меньшей степенью сжатия. Поэтому, если Вы не сторонник подхода «какая разница, играет и играет», то советую отнестись к вопросу сжатия с потерями со всей серьезностью.

И еще одно небольшое отступление. Рассматривая сжатие с потерями я буду оперировать только двумя показателями – качеством и размером получаемого файла. Скорость кодирования в расчет браться не будет, я надеюсь, Вы не планируете кодировать сидя в горящей комнате. Поэтому, если в некотором режиме кодирования качество получается выше в ущерб скорости кодирования, я даже не буду это отдельно оговаривать. 

 

Начнем с форматов. Их, естественно, достаточно много, есть из чего выбирать. Однако, пока мы остановимся лишь на двух, наиболее популярных – mp3 и wma.

 

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

 

Итак, безжалостно отбросив всех остальных претендентов, мы оставили лишь два формата. Следующий шаг – необходимо вооружиться кодерами, т.е. тем, чем мы собственно и будем сжимать. Начнем с wma, так как с ним все просто – кодер существует только от разработчика формата, т.е. от Microsoft (кто не знает, wma – это Windows Media Audio). Чем новее кодер, тем лучше, поэтому качаем прямо с сайта Microsoft. Для mp3 существует несколько кодеров, но в кругу людей, продвинутых в вопросах кодирования в mp3, самым популярным является Lame (пока поверим им на слово, но со временем я возможно проведу беспристрастное тестирование mp3-кодеров и выскажу свое мнение по этому поводу). Скачать свежую версию кодера можно отсюда.

 

Небольшое отступление по поводу версий Lame. Они бывают трех видов – alpha, beta и stable. С понятием «бета» почти все знакомы – так обозначают версии, которые недостаточно «обкатаны», чтобы быть нормальными. В них могут быть некоторые баги, о которых разработчик и предупреждает пользователя словом beta (иногда просто буквой b, например 1.5b). «Альфа» - это совсем сырые версии, от их использования лучше воздержаться, если Вашим хобби не является отлавливание чужих глюков. Stable-версия – это та самая нормальная версия, с которой по идее не должно быть проблем. Так какую же версию использовать? Если нужна максимальная надежность, то, конечно, stable. Но кодер развивается, и зачастую более свежая бета оказывается предпочтительнее весьма устаревшей stable-версии. Так что решайте сами. Могу лишь добавить, что с бета-версиями Lame у меня проблем не возникало. Пока :)

 

Lame является консольной утилитой, работа с ней осуществляется из командной строки. Однако существуют специальные оболочки, облегчающие работу с Lame, например RazorLame. Русифицированную версию оболочки можно скачать отсюда. Хочу предупредить, что оболочки могут не поддерживать некоторые возможности кодера (я столкнулся с ситуацией, когда самая свежая версия RazorLame не поддерживала некоторые функции самой свежей версии Lame), так что будьте внимательны.

 

Также Lame можно использовать в других программах, например в Nero (при помощи плагина lame_enc.dll), в Exact Audio Copy, в Monkeys Audio (поместив lame.exe в каталог External) и в WinAmp (при помощи плагина out_lame).

 

Итак, скачали все необходимое. Установить, думаю, сможете и без моей помощи. Теперь – настройки. Для того чтобы получить желаемый результат, необходимо кодеру указать, что же именно Вы желаете. Рассмотрим основные параметры, присутствующие во всех рассмотренных выше кодерах.

1. Битрейт (в кодировщике Windows Media этот параметр называется «скорость»). Измеряется в килобитах в секунду (кбит/с, kbps) и устанавливает, какой объем понадобится для хранения 1 секунды исходной аудиоинформации. При неизменных остальных параметрах кодирования, установка большего битрейта приводит к меньшей потере качества, но и к меньшей степени сжатия. Меньший битрейт, наоборот, позволит сжать файл сильнее, однако качество сжатого файла будет ниже. Для сравнения скажу, что битрейт несжатого wav-файла со стандартными характеристиками (16 бит, 44.1 кГц, стерео) приблизительно равен 1400 кбит/с.

 

Я специально сказал «при неизменных остальных параметрах», т.к. не только битрейт влияет на качество и размер получаемого файла. Но, как правило, именно этим параметром в обиходе характеризуют качество сжатого с потерями файла.

 

2. CBR, VBR, ABR (постоянная скорость, качество с переменной скоростью, переменная скорость). Это режим кодирования с точки зрения изменения битрейта на протяжении кодирования одного файла. При использовании постоянного битрейта (constant bitrate, CBR, в кодировщике Windows Media – постоянная скорость) заданный битрейт не изменяется в течение кодирования. В режиме переменного битрейта (variable bitrate, VBR, в кодировщике Windows Media – качество с переменной скоростью) в процессе кодирования битрейт изменяется в зависимости от сложности участка сигнала, кодируемого в данный момент. В результате кодер экономит размер результирующего файла за счет участков, в которых достаточно более низкого битрейта, а за счет этого может увеличить битрейт там, где это необходимо.

 

Согласитесь, VBR выглядит более логичным, чем CBR. Рассудите сами – в случае с CBR при постоянном битрейте меняется именно качество, а в VBR качество остается неизменным во всем файле, а меняется битрейт. Ну и пусть себе меняется. Нас же интересует баланс между качеством и размером файла, и какая разница, какой при этом будет битрейт.

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

 

Еще существует режим среднего битрейта (average bitrate, ABR, в кодировщике Windows Media – переменная скорость). В этом режиме битрейт изменяется, однако усредненный по всему файлу битрейт приблизительно соответствует заданному пользователем. Т.е. размер результирующего файла получается примерно таким же, как и при кодировании в режиме постоянного битрейта, однако опять-таки, как и в VBR, имеет место экономия битрейта на простых участках и повышение битрейта там, где это необходимо.

 

Теперь как это настроить. В кодировщике Windows Media в режиме «переменная скорость» указывается средний битрейт, а в режиме «качество с переменной скоростью» выбирается уровень качества в диапазоне от 10 (наихудшее) до 98 (наилучшее) (значение уровня качества при кодировании без потерь равно 100). В Lame для VBR указывается диапазон изменения битрейта, а также уровень качества от 0 (наилучшее) до 9 (наихудшее); для ABR также указывается диапазон изменения битрейта, однако вместо уровня качества указывается средний битрейт. При этом в VBR и ABR не рекомендуется ограничивать максимальное значение битрейта, регулировать размер получаемого файла лучше параметром «уровень качества» (для VBR) и величиной среднего битрейта (для ABR). Ну а с CBR (постоянная скорость) все просто – указываем желаемый битрейт и все дела. В WME еще существует режим «переменная скорость (пик)». Это аналог режима «переменная скорость», но с возможностью ограничить максимальный битрейт.

 

Как понимать параметр «уровень качества»? Дело в том, что в режимах CBR и ABR размер получаемого при кодировании файла определяется битрейтом. В режиме VBR битрейт изменяется «по ситуации». Для того, чтобы у пользователя была возможность балансировки между качеством и размером получаемого файла и используется параметр «уровень качества». Его значения являются условными, т.к. само понятие качества при кодировании с потерями является сугубо субъективным. Отсюда мы видим неудобство режима VBR – невозможно заранее точно определить размер закодированного файла. Но поскольку мы решили обращать внимание только на качество и размер файла, это неудобство не должно нас пугать.

Почему при выборе режима VBR и ABR не рекомендуется ограничивать максимальное значение битрейта? Дело в том, что в саму идею этих режимов заложена регулировка соотношения качество/размер файла другими параметрами (уровень качества и средний битрейт). Лишая кодер возможности использовать максимальный битрейт там, где ему это необходимо, мы нарушаем работу алгоритма кодирования. В результате потери качества могут быть значительнее, чем выигрыш в объеме получаемого файла. Поэтому, чтобы добиться максимального качества при требуемом объеме файла, грамотнее пользоваться параметрами, специально предназначенными для регулировки соотношения качество/размер файла. Тогда для чего предусмотрена возможность ограничения максимального битрейта? Ограничение может быть полезно (а иногда и просто необходимо) в тех случаях, когда существует некоторый предел скорости чтения данных. Например, в некоторых аппаратных проигрывателях или при потоковой передаче данных посредством Интернет (при прослушивании без предварительного скачивания).

 

3. Стерео-режим. Этот режим устанавливает, как кодер будет обращаться с двумя каналами стереосигнала. В Lame существуют следующие режимы: стерео, joint стерео, принудительное joint стерео, двухканальный, моно. В режиме «стерео» каналы кодируются раздельно, однако имеет место «обмен» битрейтом между каналами. Т.е., когда сигнал в одном канале проще, чем в другом, в этом канале используется более низкий битрейт, чтобы в другом канале можно было использовать более высокий. В режиме «joint стерео» кодируется сумма двух каналов и разница между ними. В случае, когда сигналы в двух каналах различаются между собой незначительно, информация о разнице каналов будет не очень содержательной и поэтому хорошо сожмется. Но это еще не все. Используя некоторый алгоритм, Lame переходит в режим «стерео», когда считает, что это необходимо. Этого не происходит в режиме «принудительное joint стерео», и это единственное отличие этого режима от «joint стерео». В двухканальном режиме каналы кодируются совершенно независимо друг от друга. Ну а в режиме «моно» из исходного стереофайла получается монофайл. Наилучший результат обеспечивается в режимах «стерео» и «joint стерео». А вот какой из них лучше – зависит от конкретной ситуации. Приведу лишь значения «по умолчанию» для Lame – возможно это Вам поможет сделать свой выбор. В режиме VBR при значении уровня качества большем, чем 4 (т.е. при более низком качестве), а также при фиксированном битрейте в 160 кбит/с или ниже по умолчанию используется режим «joint стерео». При фиксированном битрейте более 160 кбит/с, а также в режиме VBR со значением уровня качества 4 и менее (т.е. при более высоком качестве), по умолчанию используется режим «стерео». Так что, делайте выводы. В Windows Media ломать голову не придется, там всего два режима: стерео и моно.

 

Теперь дополнительные параметры. В кодировщике Windows Media есть такой флажок «Двухпроходное кодирование». При двухпроходном кодировании во время первого прохода содержимое анализируется, а во время второго прохода выполняется кодирование на основе данных, собранных при первом проходе, поэтому качество двухпроходного кодирования обычно лучше, чем однопроходного.

 

Я думаю, не нужно говорить, что флажок лучше установить. Правда, решать самостоятельно кодировщик позволит Вам лишь в режиме «постоянная скорость». Во всех остальных режимах флажок он сам установит или снимет, запретив Вам всякую самодеятельность.

 

В Lame есть возможность дополнительного повышения качества. В оболочке RazorLame эта функция управляется параметром «Оптимизация» - необходимо выбрать «Качество». Разработчики заверяют, что в режиме VBR повышение качества всегда включено. Есть еще возможность задать качество алгоритма сжатия. В RazorLame задается параметром «q уровень» в диапазоне от 0 (наивысшее качество) до 9 (боже упаси). Разработчики рекомендуют уровень 2. Кстати, он эквивалентен оптимизации в режиме «Качество». Наивысший уровень 0 не всегда приводит к улучшению качества, но хуже не будет – это точно (просто кодироваться будет дольше). Ну и еще один параметр Lame – частота дискретизации результирующего (сжатого) файла. На невысоком уровне компрессии частота дискретизации будет равна частоте дискретизации исходного файла, однако при сильной компрессии кодер понизит частоту дискретизации. Естественно, при этом мы неминуемо потеряем высокие частоты, но иначе кодер просто не сможет обеспечить требуемую степень сжатия.

Есть еще ряд параметров, но они не столь существенны и не сильно повлияют на результат, поэтому с настройками пока закончим.

 

 

P.S.   В ближайшее время я планирую выложить на всеобщее обозрение результаты тестов качества кодирования в wma и mp3. Пока могу сказать, что если вы хотите получить качество, сопоставимое с CDDA, кодируйте в wma CBR 320, 256 или VBR 98.

 

На этом пока все. Успехов Вам!

 

 

dj dimix

 



Hosted by uCoz