Информационные технологииStfw.Ru 🔍

MP3 - сокращение от MPEG Layer3

🕛 25.04.2007, 17:51
Это один из потоковых форматов хранения и передачи аудиосигнала в цифровой форме, разработанный fraunhofer iis и thomson, позднее утвержденный как часть стандартов сжатого видео и аудио mpeg1 и mpeg2. Данная схема является наиболее сложной схемой семейства mpeg layer 1/2/3. Она требует наибольших затрат машинного времени для кодирования по сравнению с двумя другими и обеспечивает более высокое качество кодирования. Используется главным образом для передачи аудио в реальном времени по сетевым каналам и для кодирования cd audio. Полные спецификации формата доступны на сайте www.mp3tech.org.

Детали
mp3 - потоковый формат. Это означает, что передача данных происходит потоком независимых отдельных блоков данных - фреймов. Для этого исходный сигнал при кодировании разбивается на равные по продолжительности участки, именуемые фреймами и кодируемые отдельно. При декодировании сигнал формируется из последовательности декодированных фреймов. Высокая степень компактности mp3 по сравнению с pcm 16bit stereo 44.1khz (cd audio) и ему подобными форматами при сохранении аналогичного качества звучания достигается с помощью дополнительного квантования по установленной схеме, позволяющей минимизировать потери качества. Последнее, в свою очередь, достигается учетом особенностей человеческого слуха, в том числе эффекта маскирования слабого сигнала одного диапазона частот более мощным сигналом соседнего диапазона, когда он имеет место, или мощным сигналом предыдущего фрейма, вызывающего временное понижение чувствительности уха к сигналу текущего фрейма. Также учитывается неспособность большинства людей различать сигналы, по мощности лежащие ниже определенного уровня, разного для разных частотных диапазонов. Подобные техники называются адаптивным кодированием и позволяют экономить на наименее значимых с точки зрения восприятия человеком деталях звучания. Степень сжатия, и, соответственно, объем дополнительного квантования, определяются не форматом, а самим пользователем в момент задания параметров кодирования. Ширина потока (bitrate) про кодировании сигнала, аналогичного cd audio (44.1khz 16bit stereo) варьируется от наибольшего, 320kbs (320 килобит в секунду, также пишут kbs, kbps или kb/s), до 96kbs и ниже. Термин битрейт в общем случае обозначает общую величину потока, количество передаваемой за единицу времени информации, и поэтому не связан с внутренними тонкостями строения потока, его смысл не зависит от того, содержит ли поток моно или стерео, или пятиканальное аудио с текстом на разных языках, или что-либо еще. Кстати, несмотря на то, что в формате mp3 действительно при определенных условиях может кодироваться и пятиканальное аудио, рассмотрение всех случаев, кроме стерео, по понятным причинам не включено в данный обзор. Весь обзор построен вокруг и около процесса кодирования cd audio. Продолжаем про битрейты. На проведенных тестах специальноприглашенные опытные эксперты, специализирующиеся на субъективной оценке качественности звучания, не смогли различить звучание оригинального трека на cd и закодированного в mp3 с коэффициентом сжатия 6:1, то есть с битрейтом в 256kbs. Правда, тесты были проведены на небольшом количестве материала, и на самом деле не все столь хорошо, нередко бывает действительно нужно пользоваться 320kbs. Для себя я счел это достаточным основанием для полного перехода на кодирование с битрейтом 320kbs. Более низкие битрейты, несмотря на их популярность, не дают возможности обеспечить надлежащее качество кодирования, что незаслуженно обеспечило mp3 дурную славу любительского формата. На самом деле, хотя и 256kbs, и даже 320kbs тоже не дают возможности осуществить полностью прозрачное кодирование, но отличия от cd audio, по которому кодируется тестовый mp3, сравнимы с отличиями самого cd audio от исходного аналогового сигнала, из которого он был получен путем оцифровки. То есть потери, конечно, есть, но несущественны с точки зрения того, кому качество cd audio представляется достаточным. Фактически, их обнаружение обычно является задачей нетривиальной на аппаратуре класса hi-fi.

Описание процесса кодирования
Подготовка к кодированию. Фреймовая структураПеред кодированием исходный сигнал разбивается на участки, называемые фреймами, каждый из которых кодируется отдельно и помещается к конечном файле независимо от других. Последовательность воспроизведения определяется порядком расположения фреймов. Каждый фрейм может кодироваться с разными параметрами. Информация о них содержится в заголовке фрейма. Начало кодированияКодирование начинается с того, что исходный сигнал с помощью фильтров разделяется на несколько, представляющих отдельные частотные диапазоны, сумма которых эквивалентна исходному сигналу. Работа психоакустической моделиДля каждого диапазона определяется величина маскирующего эффекта, создаваемого сигналом соседних диапазонов и сигналом предыдущего фрейма. Если она превышает мощность сигнала интересующего диапазона или мощность сигнала в нем оказывается ниже определенного опытным путем порога слышимости, то для данного фрейма данный диапазон сигнала не кодируется. Для оставшихся данных для каждого диапазона определяется, сколькими битами на сэмпл мы можем пожертвовать, чтобы потери от дополнительного квантования были ниже величины маскирующего эффекта. При этом учитывается, что потеря одного бита ведет к внесению шума квантования величиной порядка 6 db. Завершение кодированияПосле завершения работы психоакустической модели формируется итоговый поток, который дополнительно кодируется по Хаффману, на этом кодирование завершается. ЗамечаниеНа практике схема несколько сложнее. Например, необходимо согласовываться с требованиями битрейта. В зависимости от кодера это приводит при повышении битрейта к разного рода релаксациям при отборе сохраняемой части исходного сигнала, а при понижении - наоборот, к ужесточению критериев. Способы кодирования стерео сигналаВ рамках mp3 кодирование стереосигнала допустимо четырьмя различными методами: dual channel - Каждый канал получает ровно половину потока и кодируется отдельно как моно сигнал. Рекомендуется главным образом в случаях, когда разные каналы содержат принципиально разный сигнал - скажем, текст на разных языках. Выставляется в некоторых кодерах по требованию. stereo - Каждый канал кодируется отдельно, но кодер может принять решение отдать одному каналу больше места, чем другому. Это может быть полезно в том случае, когда после отброса части сигнала, лежащей ниже порога слышимости или полностью маскируемой, оказалось, что код не полностью заполняет выделенный для данного канала объем, и кодер имеет возможность использовать это место для кодирования другого канала. В документации к mp3enc замечено, что этим, например, избегается кодирование "тишины" в одном канале, когда в другом есть сигнал. Данный режим выставлен по умолчанию в большинстве iso-based кодеров, а также используется продукцией fhg iis на битрейтах выше 192kbs. Применим и на более низких битрейтах порядка 128kbs... 160kbs. joint stereo (ms stereo) - Стереосигнал раскладывается на средний между каналами и разностный. При этом второй кодируется с меньшим битрейтом. Это позволяет несколько увеличить качество кодирования в обычной ситуации, когда каналы по фазе совпадают. Но приводит и к резкому его ухудшению, если кодируются сигналы, по фазе не совпадающие. В частности, фазовый сдвиг практически всегда присутствует в записях, оцифрованных с аудиокассет, но встречается и на cd, особенно если cd сам был записан в свое время с аудиоленты. С другой стороны, уже совершена (первая ?) попытка написать программу для автоматической коррекции фазового сдвига, адрес страницы автора - http://www.chat.ru/~lrsp. Возможно, она немного поможет любителям кодировать оцифровки с аудиокассет с битрейтом порядка 128kbs. Режим выставлен по умолчанию продукцией fhg iis, а также кодером lame, для битрейтов от 112kbs до 192kbs. joint stereo (ms/is stereo) - Вводит еще один метод упрощения стереосигнала, повышающий качество кодирования на особо низких битрейтах. Состоит в том, что для некоторых частотных диапазонов оставляется уже даже не разностный сигнал, а только отношение мощностей сигнала в разных каналах. Понятно, для кодирования этой информации употребляется еще меньший битрейт. В отличие от всех предыдущих, этот метод приводит к потере фазовой информации, но выгоды от экономии места в пользу среднего сигнала оказываются выше, если речь идет о очень низких битрейтах. Этот режим по умолчанию используется продукцией fhg iis для высоких частот на битрейтах от 96kbs и ниже (другими качественными кодерами этот режим практически не используется). Но, как уже говорилось, при применении данного режима происходит потеря фазовой информации, также теряется любой противофазный сигнал.. . .

Плюсы и минусы mp3 256 kbps

Если стоит задача сохранить музыку без потери качества, при этом всё таки уменьшив её размер, уверенный выход на сегодняшний день один - сжать её в mp3 с потоком 256 kbit/s и более. Много копий сломано по поводу того, что за качество получается в результате и какой кодек для этого лучше использовать - оригинальный iso или от института fraunhofer. Есть, однако, некоторые аспекты, которые раньше не поднимались, да и сейчас их обсуждение можно редко где встретить... Каюсь, я раньше любил iso. Вообще, не знаю как сейчас, а в 98-99 годах настрой был вполне определенный: iso - для 256, fraunhofer - для того, что ниже. Но теперь я изменил своё мнение. В этом виновато отчасти то, что с заменой некоторой звуковой аппаратуры я получил возможность слышать то, что раньше не слышал. Проводились какие-то тесты, слушали, и так совпало, что всё, на чем я лично пытался убедиться, маскировалио недостатки iso. Время изменилось, аппаратура тоже... И главное - появился кодек .mp3 producer v2 (opticom), который всё таки неплохо сохраняет частоты выше 16 кГц. Поэтому теперь я для разнообразия объясню, почему на 256 надо использовать именно fraunhofer. Раньше всё упиралось в довольно примитивный вопрос: нужно ли сохранять частоты выше 16 кГц или нет. iso сохранял их, fraunhofer, даже самый последний - якобы нет. На самом деле это уже заблуждение. Мы брали усредненный график распределения мощностей по частотам, смотрели на ступеньку на 16 кГц, радовались и решали, что так есть всегда. Реальная, а не усредненная картина выглядит намного интереснее. В файле присутствуют моменты где этих частот нет вообще, и моменты, где они сохранены в полном объеме. Что в усреднении дает как раз якобы спад. А на самом деле это не пренебрежение к этим частотам, это просто работа их психо-акустической модели. Лучше всего это дело смотреть вообще сонограммой (почему раньше никто не догадался?). По горизонтали - время, по вертикали - частоты. Довольно хорошо видно, что частоты выше 16 кГц еще как сохраняются. Сильные высокочастотные звуки вполне продолжаются без каких-либо спадов до 20 кГц. А то, что иногда они не сохраняются - это и к лучшему, остается больше потока для кодирования более важных частот. Небольшое отступление.. Частоты выше 16 кГц в общем то нужны. Это факт. Но я никак не пойму, для чего они нужны. С одной стороны, делаем синусоиду -6 дБ частоты 16 кГц, слушаем. Одно условие - тут нужна всё таки аппаратура хотя бы >$400, чтобы она физически могла работать с такими частотами. Слышим! Не то чтобы это звук, но ощущаем отчетливо. Но стоит вспомнить, что мощность по частотам в реальных звуках уменьшается с увеличением частоты. И вообще, ставим более логичный эксперимент. Берем реальную музыку с хорошим содержанием высоких, вырезаем под ноль всё меньше 16 кГц, используя fft фильтр. Это честная процедура, в плане частот она делает именно то, что нам нужно, без всяких переходных процессов на границе и т.д. Слушаем. И лично я ничего не слышу. На разумной громкости... Если поднимать громкость выше всяких разумных пределов, лично на меня эффект только один - если это дело на сильной громкости послушать хотя бы 40 секунд, 30 минут головной боли обеспечено. Они однозначно воспринимаются, хотя бы в качестве раздражителя, а не звука, и следовательно - желательно их сохранять. Для полноты картины, так сказать. :) В общем, вывод: не знаю, как товарищи из fraunhofer составляли свою акустическую модель, не иначе как доводя своих сотрудников - подопытных до крутой мигрени, но что-то такое они составили и для частот выше 16 кГц. На этом вопрос лично для меня закрылся. А теперь собственно о том, в чем iso гораздо хуже fraunhofer-а. Сжатие в layer3 происходит по блокам. Примитивно говоря: для каждого блока происходит сначала разложение сигнала на составляющие частоты, затем применяется акустическая модель, выбрасывая ненужные компоненты отдельных блоков, а при воспроизведении все частоты снова складываются. Однако тут встает вечная проблема частотного анализа: чем больше разрешение по частоте, тем меньше разрешение во времени. Поэтому в layer3 есть два типа блоков - обычный и уменьшенный. Обычное сжатие идет обычными блоками довольно большого размера, за счет чего с одной стороны достигается хорошее частотное разрешение и соответственно хорошее сжатие. Мы выбрасываем значительную часть информации о расположении частот во времени. Но когда в источнике наблюдается какой-то эффект, например удар тарелок, который было бы нежелательно размазывать во времени, кодер переходит на короткие блоки и кодирует этот момент более тщательно. Локальное сжатие при этом сильно падает, но закодировать резкий звук резко - гораздо важнее. И это первая вещь, которая к чертям сломана в iso кодеке. Вернее сказать, недоделана. Он почти не переключается на маленькие блоки тогда, когда это нужно, и часто делает это там, где не нужно. Иллюстрация - берем резкий звук и смотрим, что с ним приключается. iso кодек сильно размазал удар во времени. Он просто не переключился на короткий блок, хотя следовало бы. Появляются довольно интересные искажения, с которыми нам теперь предстоит бороться, в связи с переходом на цифровые алгоритмы сжатия - например, пре-эхо. Отзвук начинается раньше самого звука. На самом деле это всё не так страшно, как может показаться по картинкам. Даже в самом плохом варианте это всё не настолько плохо чтобы было слышно отчетливо. В музыке это расслышать трудно. Но общая картина звука, тем не менее, иногда становится менее четкой в iso кодеке. Есть конечно примеры, которые показывают разницу сразу. Например - хорошо записанные звуки кастаньет. Вот два файла по 210 кб, десяток секунд, закодированные iso (256_castanets_iso.mp3, 210Кб) и fraunhofer (256_castanets_iis.mp3, 211 Кб). Разницу очень хорошо слышно в наушниках, но и без них тоже вполне можно различить. Тут я немножко продублировал сайт "lame ain't an mp3 encoder". Товарищи занимаются доводом iso кода до ума. В том числе, пытаются починить переключение на мелкие блоки, пре-эхо, да и вообще всё то, что плохо работало или было недоделано в оригинальном варианте. На самом деле в iso коде очень много ошибок и недоделок. Что, впрочем, не мешает ему работать достаточно хорошо на больших битрейтах, они же хотят доделать его так, чтобы он смог нормально закодировать в 128 кбит/с.. В принципе, то, что у них получилось, уже вполне способно конкурировать и с fraunhofer, но пока fraunhofer всё же лучше, причем на любых потоках. Хотелось бы развеять еще один миф, о том, что layer3 - 256 оставляет почти строго оригинальный звук. Нет, это настолько далеко не так, что можно удивится, впервые ощутив разницу. У нас почему-то принято измерять качество форматов сжатия, строя графики усредненной частотной передачи. Это позволяет конечно судить, не отрезал ли кодек чего лишнего, но не более, ведь сама суть всех современных алгоритмов сжатия звука дает отличные усредненные частотные параметры, так что как гарантия качества эти замеры совершенно бесполезны. Всё нужно смотреть в динамике. Оценивать временные параметры, а не частотные. Мы гораздо менее к ним чувствительны, и на этом тоже основано сжатие. Разницу можно видеть даже не особо утруждаясь. Даже профессиональный кодек от fraunhofer настолько размазал частоты по времени по сравнению с оригинальным звуком, что точной копией оригинала это может считаться с большой натяжкой. А уж частоты выше 16 кГц у обоих кодеков закодированы настолько непохоже на оригинал... Искажения любого частотно-акустического кодирования будут преследовать и mpeg layer3 на высоких потоках. В данный момент есть всего два фактора, которые стоит принимать в расчет при кодировании с потоками 256 или 320 кбит/ с: 1. Трудности с передачей резких звуков. Сигнал получается слегка размазанным во времени в пределах блока частотного разложения. Сейчас (в mp3) для этого существуют короткие блоки, на которые, при необходимости, переключается кодировщик. Это, однако, лишь уменьшение значимости проблемы, а не её полное устранение. На сонограммах выше видно, что в любом случае присутствует размытость всех резких явлений во времени - хоть размытость в пределах короткого блока - лучше, чем в пределах длинного, обычного, позволяющего добиться лучшего сжатия. 2. Слабая, не совсем точная передача моментов, перегруженных мощными звуками. На данный момент алгоритм коррекции такой: в потоке данных mp3 имеется буфер, который позволяет экономить некоторую часть потока, чтобы в нужный момент воспользоваться накопленным резервом и затратить гораздо больше данных на кодирование узкого участка. К сожалению, буфер этот невелик, а дальнейшее развитие этой идеи - переменный поток - vbr - пока не имеет разумной и качественной реализации. На больших потоках, однако, способность layer3 передавать перегруженные моменты далеко превосходит нашу собственную способность их слышать и способность аппаратуры их воспроизводить, так что ничего страшного и здесь нет. Любой из представленных алгоритмов кодирования, да и любой из тех, которые будут созданы позднее, будут так или иначе вносить искажения даже на больших потоках - более 256 кбит/с. И очень важно отличать объективные критерии оценки искажений от субъективных. Распространенные в конструировании звуковой аппаратуры тесты синтетическими сигналами - отдельными импульсами, к примеру - почти не дадут никаких результатов, по которым можно было бы судить о качестве кодирования реальных звуков. Человек слишком непривередливое существо, чтобы чувствовать все эти нюансы на слух. Проводились профессиональные тесты на прослушивание сжатых материалов, и волноваться всё же не стоит - layer3 на 256 не теряет ни временных, ни частотных параметров хоть сколь заметным человеку образом. Мы никогда не услышим этой разницы, как не услышали её профессиональные слушатели, задействованные в тестах iso (международной организации по стандартизации, в том числе оговаривающей формат mpeg1 layer3), хотя можем ясно видеть её на экране. Но одну вещь надо обязательно учитывать: если вы хотите оставить за собой возможность обрабатывать каким-либо образом звук, его нельзя сжимать в layer3. Например, даже довольно малое изменение тональной окраски звука приведет к тому, что все частотные изъяны вылезут и тут же слышны как звон/ бульканье, неравномерность звука, а любая реверберация или эффекты задержек наряду с предполагаемым эффектом дадут еще целую кучу дополнительных, неожиданных артефактов

Программное обеспечение   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉