Концерт по заявкам, или MPEG
Авторы: Евгений Козловский, Сергей Блохин
© 2004, Издательский дом | http://www.computerra.ru/
Журнал «Домашний компьютер» | http://dk.compulenta.ru/
Этот материал Вы всегда сможете найти по его постоянному адресу: /2006/121/280029/
КОНЦЕРТ ПО ЗАЯВКАМ, или MPEG
Это не единственное письмо по вопросу MPEG-кодирования, но, пожалуй, самое, так сказать, исчерпывающее. И, в первую очередь, потому что «не единственное», во-вторую – потому что вопрос интересен по сути, особенно сегодня, когда домашнее видео становится все более распространенным. Поэтому мы и решили дать развернутый ответ.
Правда, в самом вопросе полно путаницы: Main Concent MPEG Encoder, Cinema Craft Encoder и Canopus Procoder – это действительно кодеры, а Pinnacle, Adobe и Ulead – это фирмы, производящие софт, который, в свою очередь, использует тот или иной кодер. Если отвечать коротко, то программные пакеты Adobe Premiere, Ulead MediaStudio Pro, Ulead DVD Movie Factory и Ulead DVD Workshop используют Main Concept MPEG Encoder, а программа Avid (бывший Pinnacle) Studio – кодировщик собственного изготовления и не особо высокого качества кодирования.
Если же подробнее, то сравнить MPEG-2-кодеры мы попросили одного из экспертов в области домашнего видео, автора ряда книг на эту тему, Сергея Блохнина, я же предваряю его статью популярным очерком о том, что из себя вообще представляет MPEG-2-кодирование. Именно популярным, потому что MPEG-2 – очень сложный алгоритм, и тем, кто всерьез этим вопросом заинтересуется, придется прочесть много специальной, переполненной формулами, литературы.
Итак, MPEG-2 придуман для уменьшения количества и потока видео, чтобы оно помещалось на доступные носители и проходило сквозь не особо толстые каналы передачи. Даже если не брать все более входящие в моду форматы High Definition Video (Видео Высокой Четкости), где несжатый видеопоток может заметно превышать 100 Мбит/с, а ограничиться более привычным STV (Стандартным Видео: PAL и NTSC), – минута несжатой движущейся картинки займет на диске (или кассете) целый гигабайт! Поток любопытствующие могут посчитать сами.
Сжимается видео двумя методами: статическими и динамическими. Статическое сжатие – это, в сущности, знакомый всем JPEG-формат. Он анализирует картинку на предмет повторяющихся фрагментов (по мелкости – вплоть до одного пикселя) и записывает их приблизительно так: «точка с параметрами RGB 212, 085, 110 повторяется подряд 24 раза, через 74 пикселя повторяется снова 45 раз…» То есть, вы вполне способны представить себе картинку с белым снежным полем или пасмурным, но без выраженных туч небом, – экономия может выйти очень и очень значительная. Такое сжатие, если оно записывается попиксельно, считается сжатием «без потерь», есть даже специальная разновидность BMP-формата, применяющая подобное сжатие, называется RLE. Однако на картинках с большим разнообразием объектов такая запись экономит уже не так много, и алгоритм (в зависимости от заданного вами конечного объема или условного «качества») выставляет некие огрубляющие условия. Например, точки с уровнем красного от 100 до 112 считать за одинаковые, с уровнем, скажем, 106. Или фрагменты, продолжающиеся не долее 6 пикселей, рассматривать как несуществующие, игнорировать, – и из картинки уходят мелочи, а цвета на ней становятся менее дифференцированными.
Это что касается собственно статического (или JPEG) сжатия, которое оперирует фактически каждым полноцветным пикселем картинки, описываемым тремя цветовыми байтами: 256 градаций красного, столько же – зеленого и столько же – синего. Но видео, для которого и был придуман MPEG, произрастает из старого аналогового телевидения, а оно, после ряда экспериментов, пришло к стандарту передачи цвета другим, цветоразностным, образом: в сигнале в первую очередь идет яркостная составляющая Y (это позволило на первых порах перехода к цветному телевидению организовать совместимость со старыми черно-белыми приемниками), потом – две цветоразностные, U и V, где желтый вычитается сначала из красного, а потом – из синего и множится на коэффициенты, полученные экспериментальным путем (подробнее этот предмет я рассмотрел в «Козлонке» «Y=0,299R+0,587G+0,114B, или Полтораста долларов коту под хвост», ДК #3_2005). Человеческий глаз по-разному воспринимает цвета, что отражают приведенные коэффициенты и что позволило авторам MPEG далеко не в каждом подформате передавать полностью и одну, и другую цветоразностную составляющую. Так, в наиболее распространенном варианте MPEG-сжатия эти данные записываются в формате 4:2:0, показывающим, что яркостная информация Y передается полным байтом, первая цветоразностная U – половинкой, а вторая, V, не передается вообще (цифры здесь довольно условны и тоже произросли из старого аналогового телевидения: 4 означает передачу 256 градаций, 2 – 128). Формат 4:2:0 отнюдь не означает, что мы не досчитаемся каких-то отдельных цветов – они на картинке останутся все, просто будут переданы с неидеальной, но для большинства глаз вполне достаточной точностью. То есть довольно условно цветоразностные составляющие сигнала U и V можно считать значениями по двум осям декартовых координат. Так вот, в MPEG с формулой 4:2:0 цвет записывается полный, но – лишь по одной координатной оси.
Это что касается статики. (Тут имеет смысл отметить, что формат DV, в котором записывается видео на всех DV-камерах, профессиональных и любительских, подразумевает исключительно статическое, по JPG-алгоритму, сжатие, поэтому минута такого видео занимает чуть меньше 200 мегабайт, а поток получается 25 Мбит/с.) Но MPEG – это еще и сжатие динамическое, тоже разное в зависимости от выбранного подстандарта и заданного пользователем результирующего качества (чаще всего – путем задания результирующего потока).
Динамическое сжатие MPEG устроено приблизительно так: записываются последовательности кадров форматов I (Intra или «Опорные»; обычно, это каждый пятнадцатый кадр), P (Predicative или «Предсказанные») и, наконец, B (Bi-directional или «Двунаправленные»). Опорные кадры представляют собой полную картинку, сжатую только статически (как описано выше). Предсказанные описывают разницу между опорным и текущим, а также вектор движения. То есть, если вы сняли движущийся по улице автомобиль, в предсказанном кадре будет записано, что все окружающее осталось неизменным (кроме того, что открылось после сдвига автомобиля), автомобиль тоже остался неизменным (или практически неизменным), но сдвинулся вперед на такое-то расстояние. Математически сложив опорный кадр с предсказанным мы можем получить достаточно точную ситуацию на момент предсказанного кадра.