Рекомендации по использованию стандарта сжатия mp3 на практике


 

О чем эта статья

Как следует из названия, эта статья посвящена описанию некоторых тонкостей, которые возникают при использовании стандарта сжатия аудиоданных MPEG I/II Layer 3 (mp3). Здесь нет описания какой-то законченной работы вроде тестирования кодеров или проигрывателей mp3, тут я попытался структурировать и изложить свои знания, отразить свой опыт в работе с вышеупомянутым стандартом сжатия.

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

Стратегические вопросы

В этом разделе я рассмотрю вопросы общего плана, не касающиеся непосредственно процесса сжатия.

Имеет ли смысл вообще использовать сжатие с потерями?

Я уверен, что не имеет смысла делать архивы звуковых данных (библиотеки сэмплов, фонотеки и т.п.) в mp3 (это касается и MiniDisk, так как там тоже используется кодирование с потерями, и других форматов). После этого звук нельзя обработать: при использовании многих способов цифровой обработки появляются слышимые искажения, из-за этого нельзя хранить, скажем, сэмплы в mp3. Нельзя никак восстановить утраченные на этапе кодирования части, улучшить звук. То есть это дорога в одну сторону.

Для себя я выбрал хранение фонотеки в wav-файлах. Можно также использовать CD-DA: больше совместимость, но меньше надежность, что меня не устраивает. Еще одна альтернатива — сжатие без потерь, например обычное архивирование (ZIP, RAR) или специальные программы типа RKA, Monkey's Audio. Этот способ порождает множество проблем при работе с этими файлами: wav играют подавляющее большинство проигрывателей, а вот экзотику типа RKA… Я знаю о существовании плагина для RKA под WinAmp, но на WinAmp свет клином не сошелся. В любом случае, один только WinAmp — это не есть совместимость в моем представлении. А другие программы-проигрыватели? А аппаратные плееры? А mp3-CD плееры? Не знаю, как для вас, а для меня совместимость, именно в смысле, указанном выше, очень важна. Я не согласен использовать только одну пару кодер/проигрыватель — это существенно ограничивает мою свободу. Например, для того, чтобы поделиться каким-то файлом со своими знакомыми (оставим пока в стороне вопросы авторских прав) нужно еще убеждать их в необходимости использовать новый проигрыватель.

Хранение wav-файлов позволит мне в случае изобретения некоего принципиально нового и лучшего алгоритма, условно назовем его mp6, быстренько перегнать все свои записи в новый, более качественный формат из точных копий оригиналов, в то время как самих оригиналов может уже и не быть под рукой… Вспомните, аналогичная ситуация возникла, когда начал свое победное шествие формат видеосжатия MPEG4, в этом случае архаизмом считался MPEG 1/2.

Еще аргумент: вы знаете, как аудио-диск, перегнанный в mp3, записать обратно на аудио компакт диск, да так, чтобы между треками не было ни пауз лишних, ни щелчков? Не знаете? Почитайте, скажем, www.r3mix.net. В общем, та еще морока… (Если вы хотите сказать — "а я вот делал — все ОК!" — конкретизирую задачу: музыка без пауз переходит из трека в трек, как на концертах, или у Enigma. Паузой считается не только промежуток в 1-2 секунды, а и маленькие отрезки тишины в единицы-десятки миллисекунд. Знаю, теоретически и в этом случаем можно все сделать идеально слитно, но объемы затрат времени и труда в случаях исходного материала в wav и mp3 просто несоизмеримы.)

Какой формат сжатия с потерями лучше использовать: mp3, LQT, WMA, MP+ или какой-то ещё?

До сих пор я для себя использую простой принцип: никаких экспериментов с форматами. Пока ни одна из альтернатив mp3 даже близко не лежала по качеству и совместимости одновременно. Есть такие, которые имеют приемлемое качество, ну а совместимость? (Про совместимость еще много сказано в ответе на предыдущий вопрос.)

Я знаю, что есть такие форматы, которые уже сегодня обеспечивают качество, сравнимое или даже лучшее, чем у mp3, например LQT AAC, который часто называют mp4. Правда, у него битрейт ограничен до 192 кб/с, за что его не любят ценители mp3 @ 256/320 kbps. И запросы к аппаратуре у него куда как серьезнее, в сравнении с mp3. Последнее, правда, в свете бурного развития вычислительной техники является проблемой временной. Тем не менее, думаю, вы согласитесь, что с совместимостью mp3 пока никому не сравниться.

Мое мнение: вытеснять mp3 будут долго. Вы посмотрите на CD-DA, которому пророчили скорую смерть по появлении mp3, MiniDisk и прочее. Вот что значит — объем уже накопленной информации в старом формате.

У mp3 есть своя область применения. Ведь неудобно каждый час вставлять новый музыкальный диск в дисковод, когда объем винчестера составляет десятки гигабайт. Куда как удобнее записать музыку в mp3 на винчестер или CD-ROM и слушать оттуда. Тут же можно вспомнить о плеерах mp3, mp3-CD, автомагнитолах с поддержкой mp3. Вспомните про выкачивание mp3 из Интернета. Я, например, держу дома около 5 ГБ mp3, в основном 128 кб/с, не потому, что я такой глупый, а потому, что 90% из этих файлов делал не я. Пока эти записи не появились в моей фонотеке в wav — пусть лежат.

Из каких соображений нужно исходить при выборе параметров сжатия?

По моему мнению, можно выделить два режима сжатия: "сохранение приемлемого уровня качества при достижении максимального сжатия" и "полное сохранение качества исходного материала при хоть каком-то сжатии". Правда, стоит заметить, что и тот, и другой пороговые битрейты (и для того, и для другого режимов) сугубо индивидуальны. Так, для меня они составляют 128 и 256 кб/с соответственно.

Я считаю, что неразумно беспокоить себя вопросами в духе "а какого битрейта достаточно, чтобы никто не услышал разницу по сравнению с CD?" Делайте для себя. Особенно если есть склад точных копий, из которых при необходимости можно сделать mp3 с любыми необходимыми параметрами, или даже гипотетические mp6.

Дело в том, что психоакустическая модель, основная часть сжатия mp3, разрабатывается под среднестатистического человека с его среднестатистическими ушами. Достаточно часто можно встретить отклонения как в одну сторону ("А зачем весь сыр-бор городить? Для меня качество mp3@128 kbps, сделанного Xing'ом, ничуть не хуже Audio CD. Я даже на отличной аппаратуре не слышу разницы".), так и в другую ("А вот моя жена/друг/кум/сват/брат запросто отличает mp3@320 kbps от Audio CD. Я даже слепое тестирование провел с записью сэмплов на CD-R, набором из десятков композиций самых разных стилей — оказалось вероятность ошибки практически 0%"). В первом случае вам не нужно тратить много денег на качественную аудиотехнику, а во втором можете порадоваться за ее/его тонкий слух. Так бывает. Чувствительность слухового аппарата индивидуальна.

Таким образом, самым простым и надежным вариантом я считаю делать все для себя. Один раз придется поэкспериментировать, определить, каких параметров вам достаточно, а потом просто механически их придерживаться.

Какой проигрыватель mp3 лучше?

Я сам не занимался сравнением и прослушиванием, тем не менее, попробую ответить, исходя из услышанного от других. Среди программных проигрывателей лучшими традиционно считаются все, сделанные на коде Fraunhofer: некоторые версии WinAmp'а, WinPlay, AudioActive, Microsoft Windows Media Player,… (Код от Фраунгофера используется в WinAmp версий 1.6, 2.20, 2.21, 2.22, 2.666, 2.7, остальные версии используют собственный декодер от NullSoft, называемый Nitrane). Также заслуживает упоминания X-Audio и все, что сделано на этом коде (C4, CoolPlay). Еще есть множество проигрывателей, сделанных на коде ISO, среди самых удачных можно выделить MPG123 и мой любимый Apollo (он хоть и не столь идеален при воспроизведении, зато очень удобен). Все, что сделано на коде Xing (Xing player, FreeAmp) считается самым худшим вариантом — эти проигрыватели задирают высокие частоты, что сделано, по-видимому, для компенсации завала высоких всеми кодерами Xing.

В области аппаратных проигрывателей mp3 я знаю совсем мало, но в любом случае, различная аппаратура использует, как правило, те же алгоритмы, что и программные проигрыватели. Я читал об аппаратной реализации алгоритма Fraunhofer в какой-то микросхеме. Некоторые проигрыватели даже содержат flash-микросхемы для того, чтобы иметь возможность обновлять декодер mp3. В любом случае, советую обращать внимание как минимум на то, на основе какого кода построен алгоритм декодирования. Считается, что все на основе Fraunhofer — хорошо, ISO и X-Audio — зависит от реализации, Xing — однозначно плохо.

Лейм — это ISO код или нет?

Изначально лейм делался как патч (исправление или замена нескольких файлов) для оригинального кода ISO, при этом упор делался на исправление ошибок и совершенствование алгоритма (например, использование коротких блоков). Но уже где-то с полгода назад на версии около 3.6 было замечено, что весь код ISO изменен, и лейм свободно компилируется без оригинальных исходников ISO — все, что нужно для компиляции вошло в патч. Так что на сегодня лейм можно называть ISO кодером только в историческом плане, с точки зрения алгоритма там столько изменено, что проще считать лейм самостоятельной разработкой. Причем разработкой достаточно качественной и перспективной — сейчас лейм уверенно конкурирует с кодерами на основе кода от Fraunhofer как по скорости, так и по качеству.

Что лучше, LAME или Fraunhofer-based кодеры?

Ну… Одним нравится арбуз, другим — свиной хрящик. Единственное, что могу сказать наверняка, что все ISO-based кодеры, а тем более на базе Xing, сегодня использовать смысла не имеет. Лейм впитал в себя все лучшее от ISO и двинулся догонять Fraunhofer, быстро двинулся. Кто-то считает, что уже догнал. Кто-то считает, что лучше не рисковать, а использовать старый добрый Fraunhofer. За ним опыт такой серьезной организации! Ведь у лейма версии появляются каждый день, постоянно в старых версиях ошибки находят. Да, все так. У Фраунгофера тоже находят, но не исправляют годами — разве это лучше? К тому же координатор проекта лейм принял решение с какой-то регулярностью делать stable версии, то есть такие, в которые не вносится никаких новшеств (которые могут содержать ошибки), а только исправляются старые огрехи. Текущая stable — 3.70. Ради большей уверенности в качестве получаемых мп3, имеет смысл использовать именно её. Хотя, мне очень не советовали это делать. Мол, в 3.8х добавили новые возможности, в частности ABR, и улучшили качество.. Но я обычно боюсь непроверенных временем решений.

Замечу, однако, что последняя бета версия — 3.87 — продержалась уже 2,5 месяца. Это наталкивает на мысли о том, что в ней за такой срок не замечено сколько нибудь серьезных огрехов. Для меня этих аргументов достаточно, чтобы сделать свой выбор в пользу 3.87.

По крайней мере, VBR в лейме — точно лучше Fraunhofer'а, хотя и тут он далек от идеала.

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

В этот раздел вошли советы по подготовке аудиоматериала в цифровом виде к процессу сжатия. Как вы получите этот материал — в этой статье я рассматривать не буду.

Надо ли понижать уровень файла?

Да, если пиковый уровень исходного сигнала около 0 дБ, иначе при кодировании имеете шанс получить искажения сигнала. Из-за того, что будет использовано сжатие с потерями, исходный сигнал будет восстановлен не точно, а приблизительно. Таким образом, на участке с пиковой амплитудой вы имеете шанс получить превышение пикового уровня сигнала, что и повлечет за собой искажения. Количество искажений будет зависеть от кодера и битрейта (чем выше битрейт, тем меньше искажений). Естественно, чтобы быть гарантированно защищенным, уровень исходного сигнала лучше занизить перед сжатием.

На сколько понижать? Вопрос спорный. Нужно также считаться с тем, что при понижении уровня и передискретизации также будут возникать искажения исходного сигнала. Естественно, что куда как меньше искажений передискретизации будет внесено при понижении в 2 раза, но это достаточно большое понижение громкости. Другие предпочитают целые числа децибелам, указывая, скажем, -3 дБ.

Поскольку наличие искажений от превышения пикового уровня сигнала зависит от битрейта и кодера, приведу здесь наблюдения одного из моих знакомых: "при 320 + лейм нормально — 98%, а при 128 — 85-88% от максимального уровня (100% = 0dB) ." Я сам с такими файлами не экспериментировал.

Надо ли использовать нормализацию?

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

Тем более неразумно в свете предыдущего вопроса выглядит нормализация под очень высокий уровень (часто 98% или даже 100%).

Таким образом, нормализация при работе с материалом, полученным с аудио компакт-дисков практически никогда неприменима, а при работе с другими записями — только в случае очень уж низкого уровня сигнала и только для альбома целиком (а не для каждой песни). Ведь, часто, отдельные, более лирические композиции, выделяются пониженной громкостью.

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

Тонкости процесса сжатия

В этом разделе отражены тонкости собственно процесса сжатия, как то выбор параметров кодера, битрейта и прочего.

Надо ли в Лейме выключать психоакустику (-f)?

Думаю, нет. Обратите внимание на то, что лейм очень быстро развивается. Год назад я тестировал версию 3.24. Сейчас актуальная версия 3.87. В той старой версии, я действительно слышал разницу между файлом, сделанным со включенной психоакустикой и с выключенной. Последний вариант мне нравился больше. Но идеологически это неверно, с точки зрения теории кодирования mp3. Психоакустика составляет неотъемлемую и достаточно важную часть алгоритма сжатия. Так что это была скорее ошибка тех версий лейма — плохо реализованные алгоритмы психоакустики. Ошибку исправили. Тут же могу повторить — кодируйте для себя. Возьмите и послушайте, сравните.

Таким образом, теоретически это неверно, отключать полметода — психоакустику. Практически — попробуйте проверить сами.

Какой режим кодирования стерео сигнала лучше: stereo или joint stereo?

По-разному бывает. Если вы понимаете, в чем разница, то сможете сами придумать пример, когда лучше одно, а когда — другое. Следует учесть, что некоторые записи содержат сдвиг фаз между каналами, что практически исключает возможность использование joint stereo. Правда, есть специальное ПО, которое находит и корректирует такой сдвиг, однако использование еще одной программы в процессе сжатия не делает этот самый процесс проще. Где взять такую программу — сказано в разделе ссылок.

Отметьте, что последние версии лейма умеют автоматически выбирать для каждого фрейма, что лучше: stereo или joint stereo. Именно такой режим я и использую.

Использовать ли переменный битрейт (VBR)?

Проблема в том, что под VBR (Variable BitRate — переменный битрейт) нужна своя психоакустическая модель, которая и будет управлять изменением битрейта. Раньше кодеры использовали CBR (Constant BitRate — постоянный битрейт) и пользовались принципом "обеспечить максимальное качество, упаковывая данные в поток заранее заданной ширины". Переменный битрейт требует совершенно другого подхода — "обеспечить заданный уровень качества, использую поток минимальной ширины", поэтому алгоритмы сжатия для VBR нужно создавать заново, практически с нуля. Из-за этого пока достаточно развитым прообразом такого алгоритма обладает только лейм, как самый быстро развивающийся кодер. Ни Ксинг, ни Фраунгофер качественного результата в области VBR не добились — их алгоритмы варьируют средний битрейт в пределах 10-15% от основного, что нельзя считать удовлетворительным результатом. Все это, очевидно, есть результаты попыток адаптировать алгоритмы CBR для использования с VBR, забывая, что старые алгоритмы вообще не имели возможность изменения битрейта.

Проблема также состоит в том, что до сих пор не существует сколько-нибудь точной математической модели человеческого слуха. Поэтому разработка психоакустических алгоритмов ведется в основном опытным путем, методом проб и ошибок, постоянных прослушиваний и других тестов. Поэтому тем сложнее построить алгоритм, получающий на вход некий "уровень качества", так как не до конца ясно, как этот уровень качества связан с прочими параметрами алгоритма, в частности с битрейтом. Хотя бесспорно, что человеку, далекому от этой технологии, куда как проще оперировать с параметром, непосредственно задающим уровень качества сжатия, чем с некими внутренними параметрами алгоритма.

На этом фоне вполне логичным выглядит появление компромиссного варианта — ABR (Average BitRate — средний битрейт) — реализованного в LAME. По сути, это тот же VBR, но с использованием несколько доработанного старого алгоритма кодирования CBR. В случаях, когда качество падает ниже некоторого порога — битрейт увеличивается. Если кодируемый сигнал достаточно прост, то битрейт занижается, чем и обеспечивается получение в среднем по файлу приблизительно заданного битрейта. В результате мы получаем обычный файл с VBR потоком. В качестве параметра мы указываем не некий абстрактный уровень качества, а средний битрейт, который мы хотим получить — много людей, давно работающих с mp3 CBR, найдут такой способ более удобным просто в силу своих привычек.

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

Тем не менее, понятно, что принцип, заложенный в основу VBR, куда удобнее использовать на практике. Таким образом, за VBR — будущее. Осталось только дождаться достойной программной реализации алгоритмов, создающих VBR файлы.

На сегодня вопрос практического использования VBR я считаю следствием личных пристрастий и экспериментов.

Где взять откомпилированный под Windows LAME?

См. раздел "Полезные ссылки".

Есть ли для LAME оконные оболочки?

Есть, самые популярные — LameBatch и RazorLame, первую я сам использовал раньше, пока не увидел вторую :)

Чем и как ты сам кодируешь музыку?

Леймом, 3.87. На 128 CBR, психоакустика включена. Для того, чтобы показать друзьям-товарищам — хватает. У самого уши не вянут, да и вслушиваться, дабы найти отличия от оригинала, не хочу. То есть это режим "сохранения приемлемого уровня качества при достижении максимального сжатия". Опять же, весь материал, достойный хранения в моей фонотеке, записывается в формате wav.

Полезные ссылки

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

Ставший уже классикой и использующийся как ФАК в ФИДО эхоконференции RU.MPEG "Обзор MP3" (в двух частях: часть 1, часть 2). В обзоре есть также много ссылок на различные связанные с mp3 сайты. Очень советую новичкам в mp3.

Сайт by Mitiok. Тут содержится много полезных программ для работы с mp3, тут же есть много ссылок на другие ресурсы Интернет по теме. Автор выкладывает здесь откомпилированный для Windows лейм, причем как в варианте exe-файла, так и dll-библиотеки. Тут же ссылки на другие сайты с откомпилированными LAME — выберите себе наиболее подходящий вариант. Здесь есть и программа для выравнивания фаз в каналах wav-файла, и архиватор RKA, и плагин под WinAmp от версии 2.22 (декодер с кодом Фраунгофера).

Сайт проекта Apollo (проигрыватель mp3, mp2, wav).

Программы сжатия аудио без потерь: RKA, Monkey's Audio.

Оконные оболочки для кодера LAME: LameBatch и RazorLame.

Что нового появилось за год в Сети почитать по теме?

Много интересных материалов на русском языке по данной тематике появляется в разделе Мультимедиа на сайте iXBT, например:

Об авторе

Я — студент Киевского политехнического, теперь уже 5-го курса, специальность — информатика. Не являюсь специалистом в области цифрового звука и звукотехнике вообще, но в узкой области около mp3 знаю достаточно много. В свое время учился 5 лет в музыкальной школе по классу фортепиано. Слух музыкальный — со слов моего бывшего учителя музыке — у меня есть. Слушать музыку люблю. Стили-направления не различаю: слушаю, что нравится. Mp3 заинтересовался пару лет назад, около года назад даже провел тестирование программ MPEG Layer 3 (MP3) кодеров. Постоянно интересуюсь новинками в данной области, являюсь участником эхоконференции ФИДО RU.MPEG.

Подытожу. Сам я не музыкант, музыка — это не мой профиль, обработка сигналов — тоже. Но что такое Фурье-преобразование я знаю, как и принципы работы стандарта сжатия mp3. Плюс постоянный интерес в данной области, достаточно большой опыт работы с mp3 и желание анализировать, структурировать свои знания и делиться ими.

Эта статья изначально задумывалась лишь как дополнение к моей статье о тестировании программ MPEG Layer 3 (MP3) кодеров, и лишь позже переработана, а материал структурирован и дополнен. В новой статье я старался дать ответы на большинство вопросов, которые задавали читатели моего первого творения. Ниже я отвечу еще на несколько вопросов, которые мне задавали.

Почему вдруг я взялся за тест кодеров?

Была у меня пару лет назад идея начать собирать свою фонотеку на CD-R в mp3. Тут-то я и заинтересовался технологией кодирования. После проработки сотен килобайт информации из Сети, чтения статей, общения е-мейлом с некоторыми такими же, как я, энтузиастами, мне показалось, что информации для выбора кодера и битрейта для себя, для своей коллекции, мало. Вот тут созрело решение попробовать разобраться самому. Вообще-то, как для себя, можно было бы вполне ограничится несколькими кодерами на основе кода Fraunhofer'а, несколькими — от ISO. Про Ксинг меня убедили очень быстро, стоило мне только раз послушать, что он делает на 320 кб/с. Я честно хотел найти хороший кодер на основе кода от Ксинга. Не получилось :)

Встал вопрос: как тестировать? Была мысль вычесть из одного wav'а другой (wav, полученный из mp3 и wav, "сграбленный" с эталонного CD), но побоялся проблем с offset. Остановился на сравнении АЧХ. С усреднением по 30 секундам, что должно смазать разницу от разных offset'ов. 30 секунд из начала композиций, что должно показать работу кодера на большом динамическом диапазоне. Как я выбирал композиции — написано в моей статье. Метод тот еще, конечно :) Не нужно мне рассказывать про то, что лучше использовать сонограмму, про то, что усреднение не есть правомерно в таком тонком вопросе, как психоакустика. Знаю. Согласен на такое: считайте, что методом усреднения мы не можем точно сравнить кодеры, а только выявить некоторые тенденции. То есть на качественном, а не на количественном уровне.

Следующий вопрос — АЧХ какого стерео канала? Решил делать все: и правый, и левый и их среднее. Дальше — технология.

Чем снимать АЧХ? Под рукой был CoolEdit. Пойдет? Вполне!

А что делать с тысячей графических файлов с нарисованными АЧХ? Поскольку есть неплохие навыки в программировании, написал программу, которая эти картинки сама обрабатывала. Тоже, кстати, интересная задачка: примитивное распознавание образов. По крайней мере, границы графика с точностью до пиксела неизвестны, цвет линии — тоже. Но ничего, программу написал, после этого обработкой графики занимался компьютер, а не я. Такой объем работы жалко было так просто бросать у себя на винчестере — хотелось показать людям.

Таким образом, единственная цель, которую я ставил перед собой — разобраться. В результате мне показалось: кому-то еще это будет интересно. Так и родился мой отчет о тестировании программных mp3 кодеров.

А когда ты сделаешь новое тестирование?

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

Благодарности

Хочу поблагодарить всех, кто присылал критику, предложения, пожелания и благодарности. Особо хочу выделить постоянных участников MP3 Forum и лично автора этого проекта Михаила Федотова. Отдельной благодарности заслуживают сотрудники сайта iXBT за помощь в подготовке материала.

 

Дополнительно

Рекомендации по использованию стандарта сжатия mp3 на практике

Рекомендации по использованию стандарта сжатия mp3 на практике

 

О чем эта статья

Как следует из названия, эта статья посвящена описанию некоторых тонкостей, которые возникают при использовании стандарта сжатия аудиоданных MPEG I/II Layer 3 (mp3). Здесь нет описания какой-то законченной работы вроде тестирования кодеров или проигрывателей mp3, тут я попытался структурировать и изложить свои знания, отразить свой опыт в работе с вышеупомянутым стандартом сжатия.

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

Стратегические вопросы

В этом разделе я рассмотрю вопросы общего плана, не касающиеся непосредственно процесса сжатия.

Имеет ли смысл вообще использовать сжатие с потерями?

Я уверен, что не имеет смысла делать архивы звуковых данных (библиотеки сэмплов, фонотеки и т.п.) в mp3 (это касается и MiniDisk, так как там тоже используется кодирование с потерями, и других форматов). После этого звук нельзя обработать: при использовании многих способов цифровой обработки появляются слышимые искажения, из-за этого нельзя хранить, скажем, сэмплы в mp3. Нельзя никак восстановить утраченные на этапе кодирования части, улучшить звук. То есть это дорога в одну сторону.

Для себя я выбрал хранение фонотеки в wav-файлах. Можно также использовать CD-DA: больше совместимость, но меньше надежность, что меня не устраивает. Еще одна альтернатива — сжатие без потерь, например обычное архивирование (ZIP, RAR) или специальные программы типа RKA, Monkey's Audio. Этот способ порождает множество проблем при работе с этими файлами: wav играют подавляющее большинство проигрывателей, а вот экзотику типа RKA… Я знаю о существовании плагина для RKA под WinAmp, но на WinAmp свет клином не сошелся. В любом случае, один только WinAmp — это не есть совместимость в моем представлении. А другие программы-проигрыватели? А аппаратные плееры? А mp3-CD плееры? Не знаю, как для вас, а для меня совместимость, именно в смысле, указанном выше, очень важна. Я не согласен использовать только одну пару кодер/проигрыватель — это существенно ограничивает мою свободу. Например, для того, чтобы поделиться каким-то файлом со своими знакомыми (оставим пока в стороне вопросы авторских прав) нужно еще убеждать их в необходимости использовать новый проигрыватель.

Хранение wav-файлов позволит мне в случае изобретения некоего принципиально нового и лучшего алгоритма, условно назовем его mp6, быстренько перегнать все свои записи в новый, более качественный формат из точных копий оригиналов, в то время как самих оригиналов может уже и не быть под рукой… Вспомните, аналогичная ситуация возникла, когда начал свое победное шествие формат видеосжатия MPEG4, в этом случае архаизмом считался MPEG 1/2.

Еще аргумент: вы знаете, как аудио-диск, перегнанный в mp3, записать обратно на аудио компакт диск, да так, чтобы между треками не было ни пауз лишних, ни щелчков? Не знаете? Почитайте, скажем, www.r3mix.net. В общем, та еще морока… (Если вы хотите сказать — "а я вот делал — все ОК!" — конкретизирую задачу: музыка без пауз переходит из трека в трек, как на концертах, или у Enigma. Паузой считается не только промежуток в 1-2 секунды, а и маленькие отрезки тишины в единицы-десятки миллисекунд. Знаю, теоретически и в этом случаем можно все сделать идеально слитно, но объемы затрат времени и труда в случаях исходного материала в wav и mp3 просто несоизмеримы.)

Какой формат сжатия с потерями лучше использовать: mp3, LQT, WMA, MP+ или какой-то ещё?

До сих пор я для себя использую простой принцип: никаких экспериментов с форматами. Пока ни одна из альтернатив mp3 даже близко не лежала по качеству и совместимости одновременно. Есть такие, которые имеют приемлемое качество, ну а совместимость? (Про совместимость еще много сказано в ответе на предыдущий вопрос.)

Я знаю, что есть такие форматы, которые уже сегодня обеспечивают качество, сравнимое или даже лучшее, чем у mp3, например LQT AAC, который часто называют mp4. Правда, у него битрейт ограничен до 192 кб/с, за что его не любят ценители mp3 @ 256/320 kbps. И запросы к аппаратуре у него куда как серьезнее, в сравнении с mp3. Последнее, правда, в свете бурного развития вычислительной техники является проблемой временной. Тем не менее, думаю, вы согласитесь, что с совместимостью mp3 пока никому не сравниться.

Мое мнение: вытеснять mp3 будут долго. Вы посмотрите на CD-DA, которому пророчили скорую смерть по появлении mp3, MiniDisk и прочее. Вот что значит — объем уже накопленной информации в старом формате.

У mp3 есть своя область применения. Ведь неудобно каждый час вставлять новый музыкальный диск в дисковод, когда объем винчестера составляет десятки гигабайт. Куда как удобнее записать музыку в mp3 на винчестер или CD-ROM и слушать оттуда. Тут же можно вспомнить о плеерах mp3, mp3-CD, автомагнитолах с поддержкой mp3. Вспомните про выкачивание mp3 из Интернета. Я, например, держу дома около 5 ГБ mp3, в основном 128 кб/с, не потому, что я такой глупый, а потому, что 90% из этих файлов делал не я. Пока эти записи не появились в моей фонотеке в wav — пусть лежат.

Из каких соображений нужно исходить при выборе параметров сжатия?

По моему мнению, можно выделить два режима сжатия: "сохранение приемлемого уровня качества при достижении максимального сжатия" и "полное сохранение качества исходного материала при хоть каком-то сжатии". Правда, стоит заметить, что и тот, и другой пороговые битрейты (и для того, и для другого режимов) сугубо индивидуальны. Так, для меня они составляют 128 и 256 кб/с соответственно.

Я считаю, что неразумно беспокоить себя вопросами в духе "а какого битрейта достаточно, чтобы никто не услышал разницу по сравнению с CD?" Делайте для себя. Особенно если есть склад точных копий, из которых при необходимости можно сделать mp3 с любыми необходимыми параметрами, или даже гипотетические mp6.

Дело в том, что психоакустическая модель, основная часть сжатия mp3, разрабатывается под среднестатистического человека с его среднестатистическими ушами. Достаточно часто можно встретить отклонения как в одну сторону ("А зачем весь сыр-бор городить? Для меня качество mp3@128 kbps, сделанного Xing'ом, ничуть не хуже Audio CD. Я даже на отличной аппаратуре не слышу разницы".), так и в другую ("А вот моя жена/друг/кум/сват/брат запросто отличает mp3@320 kbps от Audio CD. Я даже слепое тестирование провел с записью сэмплов на CD-R, набором из десятков композиций самых разных стилей — оказалось вероятность ошибки практически 0%"). В первом случае вам не нужно тратить много денег на качественную аудиотехнику, а во втором можете порадоваться за ее/его тонкий слух. Так бывает. Чувствительность слухового аппарата индивидуальна.

Таким образом, самым простым и надежным вариантом я считаю делать все для себя. Один раз придется поэкспериментировать, определить, каких параметров вам достаточно, а потом просто механически их придерживаться.

Какой проигрыватель mp3 лучше?

Я сам не занимался сравнением и прослушиванием, тем не менее, попробую ответить, исходя из услышанного от других. Среди программных проигрывателей лучшими традиционно считаются все, сделанные на коде Fraunhofer: некоторые версии WinAmp'а, WinPlay, AudioActive, Microsoft Windows Media Player,… (Код от Фраунгофера используется в WinAmp версий 1.6, 2.20, 2.21, 2.22, 2.666, 2.7, остальные версии используют собственный декодер от NullSoft, называемый Nitrane). Также заслуживает упоминания X-Audio и все, что сделано на этом коде (C4, CoolPlay). Еще есть множество проигрывателей, сделанных на коде ISO, среди самых удачных можно выделить MPG123 и мой любимый Apollo (он хоть и не столь идеален при воспроизведении, зато очень удобен). Все, что сделано на коде Xing (Xing player, FreeAmp) считается самым худшим вариантом — эти проигрыватели задирают высокие частоты, что сделано, по-видимому, для компенсации завала высоких всеми кодерами Xing.

В области аппаратных проигрывателей mp3 я знаю совсем мало, но в любом случае, различная аппаратура использует, как правило, те же алгоритмы, что и программные проигрыватели. Я читал об аппаратной реализации алгоритма Fraunhofer в какой-то микросхеме. Некоторые проигрыватели даже содержат flash-микросхемы для того, чтобы иметь возможность обновлять декодер mp3. В любом случае, советую обращать внимание как минимум на то, на основе какого кода построен алгоритм декодирования. Считается, что все на основе Fraunhofer — хорошо, ISO и X-Audio — зависит от реализации, Xing — однозначно плохо.

Лейм — это ISO код или нет?

Изначально лейм делался как патч (исправление или замена нескольких файлов) для оригинального кода ISO, при этом упор делался на исправление ошибок и совершенствование алгоритма (например, использование коротких блоков). Но уже где-то с полгода назад на версии около 3.6 было замечено, что весь код ISO изменен, и лейм свободно компилируется без оригинальных исходников ISO — все, что нужно для компиляции вошло в патч. Так что на сегодня лейм можно называть ISO кодером только в историческом плане, с точки зрения алгоритма там столько изменено, что проще считать лейм самостоятельной разработкой. Причем разработкой достаточно качественной и перспективной — сейчас лейм уверенно конкурирует с кодерами на основе кода от Fraunhofer как по скорости, так и по качеству.

Что лучше, LAME или Fraunhofer-based кодеры?

Ну… Одним нравится арбуз, другим — свиной хрящик. Единственное, что могу сказать наверняка, что все ISO-based кодеры, а тем более на базе Xing, сегодня использовать смысла не имеет. Лейм впитал в себя все лучшее от ISO и двинулся догонять Fraunhofer, быстро двинулся. Кто-то считает, что уже догнал. Кто-то считает, что лучше не рисковать, а использовать старый добрый Fraunhofer. За ним опыт такой серьезной организации! Ведь у лейма версии появляются каждый день, постоянно в старых версиях ошибки находят. Да, все так. У Фраунгофера тоже находят, но не исправляют годами — разве это лучше? К тому же координатор проекта лейм принял решение с какой-то регулярностью делать stable версии, то есть такие, в которые не вносится никаких новшеств (которые могут содержать ошибки), а только исправляются старые огрехи. Текущая stable — 3.70. Ради большей уверенности в качестве получаемых мп3, имеет смысл использовать именно её. Хотя, мне очень не советовали это делать. Мол, в 3.8х добавили новые возможности, в частности ABR, и улучшили качество.. Но я обычно боюсь непроверенных временем решений.

Замечу, однако, что последняя бета версия — 3.87 — продержалась уже 2,5 месяца. Это наталкивает на мысли о том, что в ней за такой срок не замечено сколько нибудь серьезных огрехов. Для меня этих аргументов достаточно, чтобы сделать свой выбор в пользу 3.87.

По крайней мере, VBR в лейме — точно лучше Fraunhofer'а, хотя и тут он далек от идеала.

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

В этот раздел вошли советы по подготовке аудиоматериала в цифровом виде к процессу сжатия. Как вы получите этот материал — в этой статье я рассматривать не буду.

Надо ли понижать уровень файла?

Да, если пиковый уровень исходного сигнала около 0 дБ, иначе при кодировании имеете шанс получить искажения сигнала. Из-за того, что будет использовано сжатие с потерями, исходный сигнал будет восстановлен не точно, а приблизительно. Таким образом, на участке с пиковой амплитудой вы имеете шанс получить превышение пикового уровня сигнала, что и повлечет за собой искажения. Количество искажений будет зависеть от кодера и битрейта (чем выше битрейт, тем меньше искажений). Естественно, чтобы быть гарантированно защищенным, уровень исходного сигнала лучше занизить перед сжатием.

На сколько понижать? Вопрос спорный. Нужно также считаться с тем, что при понижении уровня и передискретизации также будут возникать искажения исходного сигнала. Естественно, что куда как меньше искажений передискретизации будет внесено при понижении в 2 раза, но это достаточно большое понижение громкости. Другие предпочитают целые числа децибелам, указывая, скажем, -3 дБ.

Поскольку наличие искажений от превышения пикового уровня сигнала зависит от битрейта и кодера, приведу здесь наблюдения одного из моих знакомых: "при 320 + лейм нормально — 98%, а при 128 — 85-88% от максимального уровня (100% = 0dB) ." Я сам с такими файлами не экспериментировал.

Надо ли использовать нормализацию?

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

Тем более неразумно в свете предыдущего вопроса выглядит нормализация под очень высокий уровень (часто 98% или даже 100%).

Таким образом, нормализация при работе с материалом, полученным с аудио компакт-дисков практически никогда неприменима, а при работе с другими записями — только в случае очень уж низкого уровня сигнала и только для альбома целиком (а не для каждой песни). Ведь, часто, отдельные, более лирические композиции, выделяются пониженной громкостью.

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

Тонкости процесса сжатия

В этом разделе отражены тонкости собственно процесса сжатия, как то выбор параметров кодера, битрейта и прочего.

Надо ли в Лейме выключать психоакустику (-f)?

Думаю, нет. Обратите внимание на то, что лейм очень быстро развивается. Год назад я тестировал версию 3.24. Сейчас актуальная версия 3.87. В той старой версии, я действительно слышал разницу между файлом, сделанным со включенной психоакустикой и с выключенной. Последний вариант мне нравился больше. Но идеологически это неверно, с точки зрения теории кодирования mp3. Психоакустика составляет неотъемлемую и достаточно важную часть алгоритма сжатия. Так что это была скорее ошибка тех версий лейма — плохо реализованные алгоритмы психоакустики. Ошибку исправили. Тут же могу повторить — кодируйте для себя. Возьмите и послушайте, сравните.

Таким образом, теоретически это неверно, отключать полметода — психоакустику. Практически — попробуйте проверить сами.

Какой режим кодирования стерео сигнала лучше: stereo или joint stereo?

По-разному бывает. Если вы понимаете, в чем разница, то сможете сами придумать пример, когда лучше одно, а когда — другое. Следует учесть, что некоторые записи содержат сдвиг фаз между каналами, что практически исключает возможность использование joint stereo. Правда, есть специальное ПО, которое находит и корректирует такой сдвиг, однако использование еще одной программы в процессе сжатия не делает этот самый процесс проще. Где взять такую программу — сказано в разделе ссылок.

Отметьте, что последние версии лейма умеют автоматически выбирать для каждого фрейма, что лучше: stereo или joint stereo. Именно такой режим я и использую.

Использовать ли переменный битрейт (VBR)?

Проблема в том, что под VBR (Variable BitRate — переменный битрейт) нужна своя психоакустическая модель, которая и будет управлять изменением битрейта. Раньше кодеры использовали CBR (Constant BitRate — постоянный битрейт) и пользовались принципом "обеспечить максимальное качество, упаковывая данные в поток заранее заданной ширины". Переменный битрейт требует совершенно другого подхода — "обеспечить заданный уровень качества, использую поток минимальной ширины", поэтому алгоритмы сжатия для VBR нужно создавать заново, практически с нуля. Из-за этого пока достаточно развитым прообразом такого алгоритма обладает только лейм, как самый быстро развивающийся кодер. Ни Ксинг, ни Фраунгофер качественного результата в области VBR не добились — их алгоритмы варьируют средний битрейт в пределах 10-15% от основного, что нельзя считать удовлетворительным результатом. Все это, очевидно, есть результаты попыток адаптировать алгоритмы CBR для использования с VBR, забывая, что старые алгоритмы вообще не имели возможность изменения битрейта.

Проблема также состоит в том, что до сих пор не существует сколько-нибудь точной математической модели человеческого слуха. Поэтому разработка психоакустических алгоритмов ведется в основном опытным путем, методом проб и ошибок, постоянных прослушиваний и других тестов. Поэтому тем сложнее построить алгоритм, получающий на вход некий "уровень качества", так как не до конца ясно, как этот уровень качества связан с прочими параметрами алгоритма, в частности с битрейтом. Хотя бесспорно, что человеку, далекому от этой технологии, куда как проще оперировать с параметром, непосредственно задающим уровень качества сжатия, чем с некими внутренними параметрами алгоритма.

На этом фоне вполне логичным выглядит появление компромиссного варианта — ABR (Average BitRate — средний битрейт) — реализованного в LAME. По сути, это тот же VBR, но с использованием несколько доработанного старого алгоритма кодирования CBR. В случаях, когда качество падает ниже некоторого порога — битрейт увеличивается. Если кодируемый сигнал достаточно прост, то битрейт занижается, чем и обеспечивается получение в среднем по файлу приблизительно заданного битрейта. В результате мы получаем обычный файл с VBR потоком. В качестве параметра мы указываем не некий абстрактный уровень качества, а средний битрейт, который мы хотим получить — много людей, давно работающих с mp3 CBR, найдут такой способ более удобным просто в силу своих привычек.

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

Тем не менее, понятно, что принцип, заложенный в основу VBR, куда удобнее использовать на практике. Таким образом, за VBR — будущее. Осталось только дождаться достойной программной реализации алгоритмов, создающих VBR файлы.

На сегодня вопрос практического использования VBR я считаю следствием личных пристрастий и экспериментов.

Где взять откомпилированный под Windows LAME?

См. раздел "Полезные ссылки".

Есть ли для LAME оконные оболочки?

Есть, самые популярные — LameBatch и RazorLame, первую я сам использовал раньше, пока не увидел вторую :)

Чем и как ты сам кодируешь музыку?

Леймом, 3.87. На 128 CBR, психоакустика включена. Для того, чтобы показать друзьям-товарищам — хватает. У самого уши не вянут, да и вслушиваться, дабы найти отличия от оригинала, не хочу. То есть это режим "сохранения приемлемого уровня качества при достижении максимального сжатия". Опять же, весь материал, достойный хранения в моей фонотеке, записывается в формате wav.

Полезные ссылки

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

Ставший уже классикой и использующийся как ФАК в ФИДО эхоконференции RU.MPEG "Обзор MP3" (в двух частях: часть 1, часть 2). В обзоре есть также много ссылок на различные связанные с mp3 сайты. Очень советую новичкам в mp3.

Сайт by Mitiok. Тут содержится много полезных программ для работы с mp3, тут же есть много ссылок на другие ресурсы Интернет по теме. Автор выкладывает здесь откомпилированный для Windows лейм, причем как в варианте exe-файла, так и dll-библиотеки. Тут же ссылки на другие сайты с откомпилированными LAME — выберите себе наиболее подходящий вариант. Здесь есть и программа для выравнивания фаз в каналах wav-файла, и архиватор RKA, и плагин под WinAmp от версии 2.22 (декодер с кодом Фраунгофера).

Сайт проекта Apollo (проигрыватель mp3, mp2, wav).

Программы сжатия аудио без потерь: RKA, Monkey's Audio.

Оконные оболочки для кодера LAME: LameBatch и RazorLame.

Что нового появилось за год в Сети почитать по теме?

Много интересных материалов на русском языке по данной тематике появляется в разделе Мультимедиа на сайте iXBT, например:

Об авторе

Я — студент Киевского политехнического, теперь уже 5-го курса, специальность — информатика. Не являюсь специалистом в области цифрового звука и звукотехнике вообще, но в узкой области около mp3 знаю достаточно много. В свое время учился 5 лет в музыкальной школе по классу фортепиано. Слух музыкальный — со слов моего бывшего учителя музыке — у меня есть. Слушать музыку люблю. Стили-направления не различаю: слушаю, что нравится. Mp3 заинтересовался пару лет назад, около года назад даже провел тестирование программ MPEG Layer 3 (MP3) кодеров. Постоянно интересуюсь новинками в данной области, являюсь участником эхоконференции ФИДО RU.MPEG.

Подытожу. Сам я не музыкант, музыка — это не мой профиль, обработка сигналов — тоже. Но что такое Фурье-преобразование я знаю, как и принципы работы стандарта сжатия mp3. Плюс постоянный интерес в данной области, достаточно большой опыт работы с mp3 и желание анализировать, структурировать свои знания и делиться ими.

Эта статья изначально задумывалась лишь как дополнение к моей статье о тестировании программ MPEG Layer 3 (MP3) кодеров, и лишь позже переработана, а материал структурирован и дополнен. В новой статье я старался дать ответы на большинство вопросов, которые задавали читатели моего первого творения. Ниже я отвечу еще на несколько вопросов, которые мне задавали.

Почему вдруг я взялся за тест кодеров?

Была у меня пару лет назад идея начать собирать свою фонотеку на CD-R в mp3. Тут-то я и заинтересовался технологией кодирования. После проработки сотен килобайт информации из Сети, чтения статей, общения е-мейлом с некоторыми такими же, как я, энтузиастами, мне показалось, что информации для выбора кодера и битрейта для себя, для своей коллекции, мало. Вот тут созрело решение попробовать разобраться самому. Вообще-то, как для себя, можно было бы вполне ограничится несколькими кодерами на основе кода Fraunhofer'а, несколькими — от ISO. Про Ксинг меня убедили очень быстро, стоило мне только раз послушать, что он делает на 320 кб/с. Я честно хотел найти хороший кодер на основе кода от Ксинга. Не получилось :)

Встал вопрос: как тестировать? Была мысль вычесть из одного wav'а другой (wav, полученный из mp3 и wav, "сграбленный" с эталонного CD), но побоялся проблем с offset. Остановился на сравнении АЧХ. С усреднением по 30 секундам, что должно смазать разницу от разных offset'ов. 30 секунд из начала композиций, что должно показать работу кодера на большом динамическом диапазоне. Как я выбирал композиции — написано в моей статье. Метод тот еще, конечно :) Не нужно мне рассказывать про то, что лучше использовать сонограмму, про то, что усреднение не есть правомерно в таком тонком вопросе, как психоакустика. Знаю. Согласен на такое: считайте, что методом усреднения мы не можем точно сравнить кодеры, а только выявить некоторые тенденции. То есть на качественном, а не на количественном уровне.

Следующий вопрос — АЧХ какого стерео канала? Решил делать все: и правый, и левый и их среднее. Дальше — технология.

Чем снимать АЧХ? Под рукой был CoolEdit. Пойдет? Вполне!

А что делать с тысячей графических файлов с нарисованными АЧХ? Поскольку есть неплохие навыки в программировании, написал программу, которая эти картинки сама обрабатывала. Тоже, кстати, интересная задачка: примитивное распознавание образов. По крайней мере, границы графика с точностью до пиксела неизвестны, цвет линии — тоже. Но ничего, программу написал, после этого обработкой графики занимался компьютер, а не я. Такой объем работы жалко было так просто бросать у себя на винчестере — хотелось показать людям.

Таким образом, единственная цель, которую я ставил перед собой — разобраться. В результате мне показалось: кому-то еще это будет интересно. Так и родился мой отчет о тестировании программных mp3 кодеров.

А когда ты сделаешь новое тестирование?

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

Благодарности

Хочу поблагодарить всех, кто присылал критику, предложения, пожелания и благодарности. Особо хочу выделить постоянных участников MP3 Forum и лично автора этого проекта Михаила Федотова. Отдельной благодарности заслуживают сотрудники сайта iXBT за помощь в подготовке материала.