Это что касается собственно статического (или 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 или «Двунаправленные»). Опорные кадры представляют собой полную картинку, сжатую только статически (как описано выше). Предсказанные описывают разницу между опорным и текущим, а также вектор движения. То есть, если вы сняли движущийся по улице автомобиль, в предсказанном кадре будет записано, что все окружающее осталось неизменным (кроме того, что открылось после сдвига автомобиля), автомобиль тоже остался неизменным (или практически неизменным), но сдвинулся вперед на такое-то расстояние. Математически сложив опорный кадр с предсказанным мы можем получить достаточно точную ситуацию на момент предсказанного кадра.
Стандарт и на опорные, и на предсказанные кадры в MPEG — довольно жесткий, вне зависимости от подалгоритмов, используемых тем или иным кодером. Третий же вид кадров, двунаправленные, имеет несколько разновидностей, которые зависят как от конкретного кодировщика, так и от выбранного пользователем режима работы. Они тоже предсказывают движение, вперед или назад (получается — «послесказывают»), тоже записывают некую разностную информацию, однако довольно специфическим образом. И если потеря опорного кадра приведет к полному выпадению пятнадцатикадровой последовательности, а предсказанного — к рывку на изображении, то потери двунаправленных смогут только несколько ухудшить плавность, но принципиально ничего не испортят. Существуют профили (например, Sample Profile, «Простой»), которые вообще не предполагают наличия двунаправленных кадров. Короче, если принять количество информации, помещаемое в опорный кадр, за 100%, в кадре предсказанном ее будет процентов 30, а в кадре двунаправленном — 10-12%.
Кадры при MPEG-кодировании разбиваются на группы, называемые GOP, Group of Pictures, которые начинаются с опорного кадра и далее включают предсказываемые и (не обязательно) двунаправленные. Типичный, «стандартный» профиль MPEG выглядит как IBBPBBPBBPBB.
Совершенно понятно, что, хотя смотреть не слишком сжатый MPEG-файл бывает достаточно комфортно, — ибо в алгоритме используется вовсю «человеческий фактор» (средний человек много на что в картинке попросту не обращает внимания), — обрабатывать его, это значит практически всегда — портить. Ибо для точного монтажа или какой-нибудь другой обработки мы сначала должны получить полную последовательность кадров, из которых точно соответствовать действительности будет только каждый пятнадцатый, остальные — вычислены с той или иной степенью достоверности.