За короткое время аббревиатура MPEG стала нам настолько привычной, что нет повода задуматься, как это работает

Аналого-цифровое преобразование
Типы предсказания смещения изображения в кадрах
Дискретно-косинусное преобразование

MPEG-2 — это стандарт, предназначенный для кодирования сигналов цифрового вещательного телевидения, так что начинать рассказ о нем надо с истории цифрового видео. Она, как ни странно, связана вовсе не с компьютерами, как кажется сейчас, а с телевещанием, ведь недостатки аналогового сигнала сказывались прежде всего на телевизионной аудитории. Основных проблем две — это стремительное падение качества с каждым новым перезаписыванием (страшно вспомнить, что такое «пятая копия» на VHS) и большие помехи при передаче сигнала, с которыми очень сложно бороться. Первое сказывается на качестве программ, второе — на качестве картинки у зрителя. Способ избавиться от этих недостатков был известен еще с 50-х годов — это перевод сигнала в цифровую форму. Однако технические возможности для оцифровки видео в реальном времени появились лишь около четверти века тому назад, и в 1979 году Европейский Вещательный Союз (EBU) и Общество инженеров кино и телевидения (SMPTE) совместно подготовили проект международного стандарта цифрового кодирования цветного телевизионного сигнала, а в 1982 году стандарт был принят. MPEG-2 базируется именно на этом стандарте ITU-R BT.601.

Как получают цифровой видеосигнал

Известно, что любой из миллионов оттенков, которые различает человек, представим в виде комбинации трех опорных цветов: красного (Red), зеленого (Green) и синего (Blue) — это так называемая цветовая модель RGB. Используя эту модель, цветной аналоговый сигнал (например, изображение, которое «видит» объектив аналоговой видеокамеры) можно разложить на RGBкомпоненты.

Однако для телевидения такое разложение не подходило: при переходе к цветному вещанию требовалось, чтобы цветные передачи можно было смотреть на черно-белых телевизорах, а это невозможно, если сигнал состоит из RGBкомпонент. Решением стало преобразование RGBсигналов в сигнал яркости Y и два цветоразностных сигнала U и V — в этом случае информация о цвете (U и V) передается отдельно от информации о яркости Y, и в черно-белом телевидении используется только сигнал яркости, а в цветном — яркости совместно с цветом. Заодно оказалось возможным уместить цветной телевизионный сигнал в стандартную полосу пропускания: за счет того, что человеческий глаз менее чувствителен к пространственным изменениям цвета, чем к изменениям яркости, информацию о цвете можно «урезать» без ущерба для восприятия.

Для цифрового кодирования одинаково подходят оба разложения.

Итак, для того чтобы сформировать цифровой сигнал, необходимо выполнить над каждой компонентой аналогового сигнала (R, G, B или Y, U, V) следующие операции: дискретизацию, квантование и кодирование.

Дискретизация — это представление непрерывного аналогового сигнала последовательностью значений его амплитуд (так называемых отсчетов). Частота, с которой выбираются значения, называется частотой дискретизации. На схемах справа показаны аналоговый и дискретизированный с частотой 1/T сигналы. Очевидно, что чем больше частота дискретизации, тем точнее будет воспроизведен аналоговый сигнал. Чтобы получить изображение высокого качества, частота дискретизации должна быть не менее 12 МГц (то есть 12 млн отсчетов в секунду). В стандарте цифрового кодирования она выбрана равной 13,5 МГц.

Квантование — округление значений отсчетов. Так как человеческий глаз обладает конечной разрешающей способностью, то передавать абсолютно точно все значения отсчетов нет необходимости. Было придумано заменять величину отсчета ближайшим значением из некоторого набора фиксированных величин, которые называются уровнями квантования, то есть округлять до ближайшего уровня. На схеме справа показан квантованный сигнал. Для создания сигнала нужного качества достаточно 256 уровней квантования.

И наконец, кодирование. Так как квантованный сигнал может принимать только конечное число значений (в соответствии с набором уровней квантования), то для каждого отсчета можно представить его просто числом, равным собственно порядковому номеру уровня квантования. Это число может быть закодировано двоичными символами (например, нулями и единицами). Чтобы закодировать 256 уровней квантования, требуется как минимум восемь бит (28 = 256), то есть значение каждого отсчета передается восемью битами.

В итоге после дискретизации, квантования и кодирования мы получили из аналогового сигнала набор импульсов, принимающих только два значения — 0 и 1, которые уже можно передавать как обычные данные. Это называется аналого-цифровым преобразованием, или АЦП.

Легко посчитать необходимую скорость потока при передаче оцифрованного нами сигнала: умножим восемь бит на количество отсчетов, передаваемых в секунду (не забудем, что у нас три компоненты): 8 [бит] х 13,5 [МГц] х 3 = 324 Мб/с!!! Работать с такими потоками — очень дорогое и почти недоступное удовольствие (для сравнения: стандартный модем передает со средней скоростью 33,2 кб/с, то есть в десять тысяч раз медленнее).

Здесь самое время напомнить о том, что, как и в аналоговом телевидении, при оцифровке Y, U и V можно безболезненно удалить часть информации о цвете, то есть уменьшить в несколько раз частоту дискретизации цветоразностных сигналов. Поэтому кодирование YUV (называемое раздельным) с точки зрения величины потока получается более выгодным, чем RGB. При раздельном кодировании принято указывать соотношение частот дискретизации компонент. Например, 4:2:2 означает, что Y передается в каждом отсчете в каждой строке, а U и V — в каждом втором отсчете в каждой строке (то есть частота дискретизации Y равна 13,5 МГц, а U и V в два раза меньше — 6,75 МГц).

Сжатие

Однако результаты кодирования в отношении величины цифрового потока все равно никого не устраивали. Для вещательного телевидения требуется раздельное кодирование как минимум 4:2:2 — это 216 Мб/с. Даже если не говорить о передаче данных, просто писать такой поток на ленту или на винчестер представляется проблемой.

Выход один: сжатие цифрового видеопотока. К счастью, цифровой видеосигнал по сути своей избыточен и потому для сжатия подходит как нельзя лучше: можно без потерь с точки зрения восприятия сжимать видео даже в 30 раз! Избыточность видеосигнала, во‑первых, вызвана тем, что человеческий глаз не замечает изменений яркости и цвета на небольших участках, то есть мелких деталей. Эта избыточность называется пространственной и удаляется при внутрикадровом кодировании — сокращении информации в пределах одного кадра.

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

Надо сказать, что со времен начала работы с цифровым видео было создано великое множество форматов сжатия: от Cinepak и Intel Indeo до H.263, MJPEG и DV. Часть из них удаляют только пространственную избыточность (как DV или MJPEG), но некоторые алгоритмы (например, Intel Indeo) используют и межкадровую разность.

Жизнь с таким количеством несовместимых друг с другом стандартов оказалась слишком уж сложной, поэтому в 1988 году была создана специальная группа экспертов — Moving Picture Experts Group (MPEG), которая должна была разработать методы сжатия и восстановления цифрового видеосигнала. Над стандартом MPEG2 группа начала работать в 1990 году. Стандарт предназначался специально для цифрового телевидения, то есть для передачи телевизионных изображений высокого качества, и был принят уже в 1994 м. Сегодня это самый распространенный и самый многофункциональный из всех стандартов MPEG.

Как осуществляется сжатие в MPEG-2

Сначала в каждом кадре последовательно выбираются элементы изображения размером 16 х 16 пикселей — это так называемые макроблоки.

В MPEG принято кодирование YUV, поэтому каждый макроблок представлен в виде набора блоков 8 х 8 пикселей — каждый блок несет информацию или о яркости, или о цвете. Например, в формате цветности 4:2:2 потребуется четыре блока 8 х 8 с информацией о яркости и по два блока 8 х 8 с информацией о каждой цветоразностной компоненте, всего восемь блоков. Каждый элемент в блоке яркости или цвета представляет собой значение отсчета. В дальнейшем MPEG-2 работает уже с макроблоками.

В MPEG-2 выделено три типа кадров. I-кадры (Intra) — опорные кадры, кодирование каждого макроблока в которых осуществляется без ссылок на макроблоки в предыдущих или последующих кадрах. По сути, I-кадры закодированы как неподвижные изображения.

Pкадры (Predicted) — кадры, макроблоки в которых закодированы относительно предшествующих I или P-кадров (хотя не все макроблоки могут быть так закодированы, об этом ниже). Изображение в кадре предсказывается с использованием информации предыдущего кадра — так называемое предсказание «вперед». Поэтому Pкадры частично содержат только ссылки на макроблоки в предыдущих кадрах, и, таким образом, сжаты они сильнее, чем I-кадры.

B-кадры (Bidirectionally Predicted) — кадры, макроблоки в которых закодированы относительно или предыдущих, или последующих, или и тех, и тех I или P-кадров. Здесь реализовано двунаправленное предсказание («вперед» и «назад»): изображение в кадре предсказывается с использованием информации из предыдущего и из следующего кадра. То есть считывание кадров декодером должно происходить быстрее их восстановления.

Если оказывается, что макроблок в P-кадре или B-кадре невозможно закодировать со ссылкой на другие кадры (например, в случае, если в кадре появился новый объект), то макроблок кодируется как макроблок в I-кадре.

Кадры объединены в последовательности (Group Of Pictures, GOP), и предсказание всегда осуществляется только в пределах одной группы. Понятно, что при таком условии каждая группа должна начинаться с I-кадра, несущего наиболее полную информацию об изображении, ведь I-кадр является точкой отсчета, относительно которой кодируются остальные кадры. Было бы замечательно, если бы I-кадры всякий раз приходились на начало сюжета, но, к сожалению, все сюжеты имеют разную длительность.

В MPEG-2 определены стандартные типы последовательностей — например, IPBBPBBPBBPBBPBB. Если сюжет почти не меняется от кадра к кадру, то можно кодировать с большим количеством B-кадров, а если требуется очень высокое качество — наоборот, использовать группы, состоящие только из одного I-кадра. В принципе, можно оптимизировать выбор типа кадра — например, при появляющихся больших ошибках предсказания в B-кадрах добавлять I-кадры в последовательность.

Сразу скажем, слово «предсказание» несколько путает — это термин, хотя и устоявшийся, но не очень верный. Мы ничего не предсказываем, мы абсолютно точно определяем, что должно быть в кадре. Для этого вычисляется ошибка предсказания — разница между изображением, взятым из другого кадра, и изображением в текущем кадре, и эта разница используется при декодировании.

Под компенсацией движения понимается учет смещения изображения относительно предыдущих или последующих кадров. Компенсация движения в P и B-кадрах реализуется следующим образом: для каждого найденного в предыдущем/следующем кадре макроблока вычисляется вектор движения, то есть определяется, каково относительное смещение соответствующего макроблока. Таким образом, при предсказании с компенсацией движения декодеру передаются не только ошибки предсказания, но и векторы движения.

Теперь мы подходим к внутрикадровому кодированию. Нам нужно сжать информацию в макроблоках, которые ни на что не ссылаются. Это делается с помощью дискретно-косинусного преобразования (ДКП), в основе которого лежит преобразование Фурье. ДКП отнюдь не прерогатива MPEG, оно применяется при внутрикадровом кодировании очень во многих форматах сжатия — в том числе, для сжатия статических изображений (всем известный JPEG, разработанный для цифровой фотографии группой Joint Photographic Experts Group).

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

Небезынтересно будет узнать, что практически все фильтры в графических редакторах построены на операциях над матрицей отсчетов. Примените в Photoshop фильтр, размывающий границы, — увидите ДКП в действии. И, кстати, сможете убедиться, что изображение даже с немного размытыми контурами сжимается JPEG гораздо эффективнее.

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

Профили и уровни

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

Идея профилей и уровней оказалась настолько плодотворной, что добавлением уровней удалось даже расширить стандарт для кодирования сигналов телевидения высокой четкости (ТВЧ). А ведь первоначально для ТВЧ разрабатывался MPEG-3, который был благополучно забыт, как только в MPEG-2 были введены соответствующие возможности.

Форматы видеозаписи

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

Кодирование может осуществляться как аппаратно, так и программно, и каждая фирма создает свои собственные алгоритмы (принципиально важен, например, алгоритм поиска смещенных макроблоков). При этом разработчики выбирают нужный профиль, уровень, необходимые операции по сжатию данных и, что очень важно при аппаратном кодировании, базу, на которой реализуется алгоритм (специальная плата, процессор и т. п.). Например, фирма Sony создала уже два формата видеозаписи на основе MPEG-2 — это Betacam SX и MPEG IMX. Оба они используют один и тот же профиль 422Р, но для них установлены разные размеры потоков данных и при кодировании используются разные аппаратные средства.

Статья опубликована в журнале «Популярная механика» (№10, Октябрь 2003).