История семейства форматов MPEG, к которому собственно
и принадлежит стремительно набирающий в последнее
время популярность формат MPEG-4, началась в далеком
1988 году. Именно в этом году был основан комитет
Moving Pictures Expert Group, что на русский переводится
примерно как экспертная группы кинематографии (движущихся
изображений), аббревиатура которого - MPEG известна
теперь любому, кто имел дело с мультимедиа - компьютерами
или с цифровым телевидением. В этом же году была
начата разработка формата MPEG-1, который в окончательном
виде был выпущен в 1993 году. Несмотря на все очевидные
недостатки этого формата, MPEG-1 по-прежнему является
одним из наиболее массовых форматов видеосжатия,
лишь в последнее время, начиная постепенно сдавать
позиции под натиском более новых и совершенных форматов
видеокомпрессии, по большей части из этого же семейства.
Надо сказать, что практически все новаторские
по тем временам разработки легшие в основу формата
MPEG-1, в том или ином виде встречаются и более
совершенных форматах данного ряда, поэтому, рассмотрев
в подробностях первого представителя этого семейства
форматов видеосжатия можно получить общее представление
о том, как же работают алгоритмы MPEG.
Формат MPEG-1. Старый, но еще не побежденный.
Формат MPEG-1 начал разрабатываться в те трудно
вообразимые времена, когда не было широкодоступных
носителей большого объема, в то время, как видеоданные,
даже и сжатые, занимали совершенно колоссальные
для конца 80-х объемы - средней продолжительности
фильм имел размер больше гигабайта. Если кто не
помнит, то это была эпоха 286 и 386 процессоров,
4 Мб оперативной памяти и 250 Мб винчестер считались
роскошью, а не убогостью, как сейчас, Windows
была примочкой для DOS, а не наоборот, а в качестве
легко переносимых носителей информации доминировали
5 дюймовые дискеты и только-только появившиеся
3,5" дискеты от фирмы SONY. В таких условиях необходимо
было найти носитель, на который можно было бы
записать гигабайт информации, при этом этот носитель
должен был быть недорогим, иначе ни о какой массовости
не могло быть и речи.
И такой носитель был найден. Как раз в эти годы
впервые на платформе PC появился такой новый тип
носителей информации как CD-ROM диски, которые
смогли обеспечить необходимый объем информации.
Правда, на один диск фильм в формате MPEG-1 все-таки
не вмещался, но что мешало записать его на 2 CD,
тем более, что новинка стоила очень недорого?
Разумеется, первые CD-ROM проигрыватели были односкоростными,
поэтому не стоит удивляться, что максимальная
скорость пересылки потока данных (bitstream) в
формате MPEG-1 ограничена 150 Кб/сек., что соответствует
одной скорости CD-ROM.
Надо сказать, что возможности MPEG-1 не ограничены
тем низким разрешением, которое вы все видели
при просмотре VIDEO-CD. В самом формате была заложена
возможность сжатия и воспроизведения видеоинформации
с разрешением вплоть до 4095х4095 и частотой смены
кадров до 60 Гц. Но из-за того, что поток передачи
данных был ограничен 150 Кб/сек., то есть так
называемый Constrained Parameters Bitstream (CPB)
- зафиксированная ширина потока передачи данных,
разработчики формата, а в дальнейшем и создатели
кодеков на его основе, были вынуждены использовать
разрешения кадра, оптимизированные под данный
CPB. Наиболее широко распространенными являются
два таких оптимизированных формата - это формат
SIF 352х240, 30 кадров в секунду и урезанный формат
PAL/SECAM 352х288, 25 кадров в секунду.
Ну вот, с разрешением определились, теперь можно
и посмотреть, как это все сжимается.
Принципы Сжатия информации в MPEG-1.
В качестве примера рассмотрим урезанный формат
PAL/SECAM, который более распространен, чем SIF,
хотя оба эти формата за исключением разрешения
и частоты смены кадров ничем друг от друга не
отличаются.
Урезанная версия формата PAL/SECAM содержит 352
ppl (point per line - точек на линию), 288 lpf
(line per frame - линий на кадр) и 25 fps (frame
per second - кадров в секунду). Надо сказать,
что полноценный стандарт PAL/SECAM имеет параметры
в 4 раза большие, чем аналогичные у MPEG-1 (кроме
fps). Поэтому принято говорить, что VIDEO-CD имеет
четкость в четыре раза хуже, по сравнению с обычным
видео.
Что касается глубины цвета, то тут не все так
просто, как в компьютерной графике, где на каждый
пиксел отводится определенное фиксированное число
бит. MPEG-1 использует цветовую схему YСbCr, где
Y - это яркостная плоскость, Сb и Cr - плоскости
цветовые. Эти плоскости кодируются с разным разрешением.
Существуют несколько вариантов кодирования, которые
можно представить с следующем виде:
Вариант кодирования |
Отношение разрешений Сb/Y (Сr/Y) по горизонтали |
Отношение разрешений Сb/Y (Сr/Y) по вертикали |
4:4:4 |
1:1 |
1:1 |
4:2:2 |
1:2 |
1:1 |
4:2:0 |
1:2 |
1:2 |
4:1:1 |
1:4 |
1:1 |
4:1:0 |
1:4 |
1:4 |
Как видно из таблицы Сb и Cr практически всегда
кодируются с меньшим разрешением, чем Y. Чем меньше
разрешение цветовых плоскостей, тем грубее и неестественнее
цветопередача в видеоролике. Разумеется, самым
некачественным, но и самым компактным будет последний
вариант.
Перед началом кодирования происходит анализ видеоинформации,
выбираются ключевые кадры, которые не будут изменяться
при сжатии, а так же кадры, при кодировании которых
часть информации будет удаляться. Всего выделяется
три типа кадров:
- Кадры типа I - Intra frame. Ключевые кадры,
которые сжимаются без изменений.
- Кадры типа P - Predirected frame. При кодировании
этих кадров часть информации удаляется. При
воспроизведении P кадра используется информация
от предыдущих I или P кадров.
- Кадры типа В - Bidirectional frame. При кодировании
этих кадров потери информации еще более значительны.
При воспроизведении В кадра используется информация
уже от двух предыдущих I или P кадров. Наличие
В кадров в видеоролике - тот самый фактор, благодаря
которому MPEG-1 имеет высокий коэффициент сжатия
(но и не очень высокое качество).
При кодировании формируется цепочка кадров разных
типов. Наиболее типичная последовательность может
выглядеть следующим образом: IBBPBBPBBIBBPBBPBB...
Соответственно очередь воспроизведения по номерам
кадров будет выглядеть так: 1423765...
По окончании разбивки кадров на разные типы начинается
процесс подготовки к кодированию.
С I кадрами процесс подготовки к кодированию
происходит достаточно просто - кадр разбивается
на блоки. В MPEG-1 блоки имеют размер 8х8 пикселов.
А вот для кадров типа P и B подготовка происходит
гораздо сложнее. Для того, чтобы сильнее сжать
кадры указанных типов используется алгоритм предсказания
движения.
В качестве входной информации алгоритм предсказания
движения получает блок 8х8 пикселов текущего кадра
и аналогичные блоки от предыдущих кадров (I или
P типа). На выходе данного алгоритма имеем следующую
информацию о вышеуказанном блоке:
- Вектор движения текущего блока относительно
предыдущих
- Разницу между текущим и предыдущими блоками,
которая собственно и будет подвергаться дальнейшему
кодированию.
Вся избыточная информация подлежит удалению,
благодаря чему и достигается столь высокий коэффициент
сжатия, невозможный при сжатии без потерь.
Но у алгоритма предсказания движения есть ограничения.
Зачастую в фильмах бывают статические сцены, в
которых движения нет или оно незначительно и возникают
блоки или целые кадры, в которых невозможно использовать
алгоритм предсказания движения. Думаю, вы замечали,
что у видеороликов сжатых MPEG-1 качество сцен
с небольшим количеством двигающихся объектов заметно
выше, чем в сценах с интенсивным движением. Это
объясняется тем, что в статических сценах P и
B кадры, по сути, представляют собой копии I кадров,
потерь практически нет, но и сжатие информации
незначительно.
В случае же корректного срабатывания алгоритма
предсказания движения, объемы кадров разного типа
в байтах соотносятся друг с другом примерно следующим
образом - I:P:B как 15:5:2. Как вы видите из данного
соотношения, уменьшение объема видеоинформации
налицо уже на стадии подготовки к кодированию.
По окончании этой стадии начинается собственно
само кодирование. Процесс кодирования содержит
в себе 3 стадии:
- Discrete Cosine Transformation - DTC, дискретное
преобразование косинусов, преобразование Фурье.
- Quantization - квантование. Перевод данных
из непрерывной формы в прерывистую, дискретную.
- Преобразование полученных блоков данных в
последовательность, то есть преобразование из
матричной формы в линейную.
При кодировании блоки пикселов или вычисленная
разница между блоками обрабатывается первым из
преобразующим алгоритмов - DTC (дискретное преобразование
косинусов). Обычно пиксела в блоке и сами блоки
изображения каким-то образом связаны между собой
- например однотонный фон, равномерный градиент
освещения, повторяющийся узор и т.д. Такая связь
называется корреляцией. Алгоритм DTC, используя
коррелирующие эффекты, производит преобразование
блоков в частотные фурье-компоненты. При этом
часть информации теряется за счет выравнивания
сильно выделяющихся участков, которые не подчиняются
корреляции. После этой процедуры в действие вступает
алгоритм Quantization - квантование, который формирует
Quantization matrix. Quantization matrix - это
матрица квантования, элементами которой являются
преобразованные из непрерывной в дискретную форму
данные, то есть числа, которые представляют собой
значения амплитуды частотных фурье-компонентов.
После формирования quantization matrix происходит
разбивка частотных коэффициентов на конкретное
число значений. Точность частотных коэффициентов
фиксирована и составляет 8 бит. После квантования
многие коэффициенты в матрице обнуляются. И в
качестве завершающей стадии происходит преобразование
матрицы в линейную форму.
Все эти преобразования касаются только изображения.
Но кроме изображения в практически любом видеофрагменте
присутствует так же и звук. Кодирование звука
осуществляется отдельным звуковым кодером. По
мере развития формата MPEG, звуковые кодеры неоднократно
переделывались, становясь все эффективнее. К моменту
окончательной стандартизации формата MPEG-1 было
создано три звуковых кодера этого семейства -
MPEG-1 Layer I, Layer II и Layer 3 (тот самый
знаменитый MP3). Принципы кодирования всех этих
кодеков основаны на психоакустической модели,
которая становилась все более и более совершенной
и достигла своего апофеоза для семейства MPEG-1
в алгоритмах Layer-3.
Про психоакустическую модель и принципы сжатия
аудиоданных с потерями написано множество статей,
в частности статья "Описание формата аудиосжатия
MP3", которую вы можете прочитать на этом
сайте, поэтому описание аудиокодеров можно опустить,
упомянув, единственно о синхронизации аудио- и
видеоданных и форматов аудиотреков.
Синхронизация аудио- и видеоданных осуществляется
с помощью специально выделенного потока данных
под названием System stream. Этот поток содержит
встроенный таймер, который работает со скоростью
90 КГц и содержит 2 слоя - системный слой с таймером
и служебной информацией для синхронизации кадров
с аудиотреком и компрессионный слой с видео- и
аудиопотоками.
Под служебной информацией понимаются несколько
видов меток, наиболее важными из которых являются
метки SCR (System Clock Reference) - инкремент
увеличения временного счетчика кодека и PDS (Presentation
Data Stamp) - метка начала воспроизведения видеокадра
или аудиофрейма.
Ну вот рассказ о MPEG-1 практически подошел к
концу, осталось лишь назвать некоторые параметры
аудиотреков, которые используются в этом формате.
Качество аудиотреков в MPEG-1 может варьироваться
в очень больших пределах - от высококачественных
до безобразных. Окончательно все форматы сжатия
аудиоданных были стандартизированы в 1992 году
европейской комиссией по стандартам ISO.
В зависимости от используемого кодера и степени
сжатия аудиоинформация видеоролика может быть
представлена в следующем виде: моно, dual mono,
стерео, интенсивное стерео (стереосигналы, чьи
частоты превышают 2 КГц объединяются в моно),
m/s стерео (один канал - сумма сигналов, другой
- разница) и по частоте дискретизации могут быть:
48, 44.1и 32 КГц.
На этом хватит о MPEG-1, а в следующих главах
речь пойдет о его более чем достойных и перспективных
наследниках.