Концерт по заявкам, или MPEG Авторы: Евгений Козловский, Сергей Блохин
Концерт по заявкам, или 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 или «Двунаправленные»). Опорные кадры представляют собой полную картинку, сжатую только статически (как описано выше). Предсказанные описывают разницу между опорным и текущим, а также вектор движения. То есть, если вы сняли движущийся по улице автомобиль, в предсказанном кадре будет записано, что все окружающее осталось неизменным (кроме того, что открылось после сдвига автомобиля), автомобиль тоже остался неизменным (или практически неизменным), но сдвинулся вперед на такое-то расстояние. Математически сложив опорный кадр с предсказанным мы можем получить достаточно точную ситуацию на момент предсказанного кадра.
Стандарт и на опорные, и на предсказанные кадры в MPEG — довольно жесткий, вне зависимости от подалгоритмов, используемых тем или иным кодером. Третий же вид кадров, двунаправленные, имеет несколько разновидностей, которые зависят как от конкретного кодировщика, так и от выбранного пользователем режима работы. Они тоже предсказывают движение, вперед или назад (получается — «послесказывают»), тоже записывают некую разностную информацию, однако довольно специфическим образом. И если потеря опорного кадра приведет к полному выпадению пятнадцатикадровой последовательности, а предсказанного — к рывку на изображении, то потери двунаправленных смогут только несколько ухудшить плавность, но принципиально ничего не испортят. Существуют профили (например, Sample Profile, «Простой»), которые вообще не предполагают наличия двунаправленных кадров. Короче, если принять количество информации, помещаемое в опорный кадр, за 100%, в кадре предсказанном ее будет процентов 30, а в кадре двунаправленном — 10-12%.
Кадры при MPEG-кодировании разбиваются на группы, называемые GOP, Group of Pictures, которые начинаются с опорного кадра и далее включают предсказываемые и (не обязательно) двунаправленные. Типичный, «стандартный» профиль MPEG выглядит как IBBPBBPBBPBB.
Совершенно понятно, что, хотя смотреть не слишком сжатый MPEG-файл бывает достаточно комфортно, — ибо в алгоритме используется вовсю «человеческий фактор» (средний человек много на что в картинке попросту не обращает внимания), — обрабатывать его, это значит практически всегда — портить. Ибо для точного монтажа или какой-нибудь другой обработки мы сначала должны получить полную последовательность кадров, из которых точно соответствовать действительности будет только каждый пятнадцатый, остальные — вычислены с той или иной степенью достоверности.
Последняя деталь: видео в MPEG можно кодировать одним проходом, когда кодировщик выбирает некий средний алгоритм и одинаково сжимает динамическую, густонаселенную сцену «Штурма Зимнего» и неподвижный пейзаж Микеланджело Антониони. А можно — двумя, что, конечно, дольше и не всегда приводит к заметной разнице, но пробовать надо всегда. При двухпроходном кодировании кодировщик намечает места для вставки двунаправленных кадров и определяет алгоритм, по которому они будут строиться, так что есть шанс получить неплохой результат.
Есть шанс — это потому, что любой кодировщик — совершенный дурак. Хотя люди, которые его придумали, как правило, — очень и очень умные.
Евгений Козловский
Война хорошего с отлиЧным
Несколько лет тому назад, после появления компьютерных DVD-рекордеров, интерес к кодированию видео в MPEG-2 резко возрос. Стало возможным то, о чем ранее не мечтали: запись собственных DVD-Video-дисков. Сейчас это считается чем-то само собой разумеющимся, но всего каких-то три года тому назад казалось чудом.
Первый же вопрос, который возник в связи с появившейся возможностью создавать DVD-диски очевиден: каким кодировщиком кодировать свое бесценное видео и почему именно им?
Исторически существовали две основные группы кодировщиков (кратко — кодеров) MPEG-2: аппаратные, то есть представляющие собой коробку или плату, и программные, никакого железа не требующие. Еще 4-5 лет тому назад аппаратные кодеры MPEG-2 были довольно популярны, даже несмотря на то, что за них, в отличие от программных кодеров, всегда надо было платить. Объяснялась такая любовь к аппаратным кодерам довольно просто. Во-первых, они умели кодировать в реальном времени, чего тогда не умели программные кодеры, а во-вторых — качество кодирования у лучших образцов превосходило качество кодирования программных кодеров. Наибольшую популярность имели платы от ныне почившей в бозе Dazzle и работающей до сих пор в этом жанре компании Canopus. К сожалению, у всех аппаратных кодеров MPEG по труднообъяснимым причинам были проблемы совместимости с материнскими платами, периодически возникали сложности с драйверами и т. п.
Но пару лет тому назад появились внешние аппаратные USB-кодеры, аппаратных проблем с компьютером уже не имевшие, да и заметных проблем со своими программами тоже. Тем не менее популярности у аппаратных кодеров не прибавилось, скорее наоборот. Объясняется это тем, что процессоры стали мощнее, а программное кодирование — быстрее, но, что еще важнее, — людям лень думать на темы кодирования, и подавляющее большинство любителей просто загружает файл с цифровой видеокамеры в программу DVD-авторинга, получая на выходе готовый DVD-Video-диск. Программа сама рассчитает все параметры кодирования и создаст диск, совсем не отвлекая вас от других дел. Кроме этого, аппаратное кодирование захватываемого видео «на лету» в MPEG делает практически невозможным последующее редактирование материала. Сейчас аппаратные кодеры используются только профессионалами, а кодеры для любителей на самом деле — зачастую уже не аппаратные, а программные, хотя и «маскируются» под аппаратные. Типичный пример — Pinnacle Studio Plus 700 USB, который почти все делает программно и для нормальной работы этого как бы аппаратного кодера требуется мощный процессор.
Конечно, аппаратные кодеры умерли не совсем, сохранились они и до сих пор, но выпускаются и используются только в профессиональных целях. Стоимость профессионального MPEG-кодера может достигать десятков тысяч долларов. Например, системы для профессионального DVD-авторинга обычно включают аппаратный кодер/декодер MPEG-2. На такой системе можно немедленно после кодирования просмотреть результат на телевизоре, при необходимости откорректировать картинку, добиваясь лучшего результата. Разумеется, даже при гипотетическом наличии денег на такую систему покупать ее любителю нет никакого смысла — для этой работы нужна соответствующая квалификация плюс всевидящие глаза.
Года три тому назад году ситуация с программными кодерами MPEG-2 практически ничем не отличалась от сегодняшней. И тогда, и сейчас царствуют Cinema Craft Encoder (CCE), Main Concept MPEG Encoder и Canopus Procoder.
Надо заметить, что до появления Canopus Procoder их негласное соревнование было вялотекущим и скучным. В первую очередь из-за того, что запись своих DVD была тогда занятием дорогим, а из-за низкого качества кодирования DV-исходников — непривлекательным хобби. Procoder сразу же после своего выхода потряс всех нас: его качество кодирования DV-видео (а 90% любительского видео и сейчас снимается в DV) заметно превосходило всех конкурентов. Дискуссия о Canopus Procoder, начатая в июле 2002 года на форуме ixbt.com, продолжается и сейчас. Аналогичная дискуссия на самом авторитетном форуме видеолюбителей, возникшая в том же 2002-м, также остается актуальной. Тогда же и началась Encoders war32, правда интеллигентная и не шумная.
Расскажем немного о каждом из кодеров.
Canopus Procoder
Canopus Procoder версии 1.0 в режиме Mastering-Quality кодировал даже на относительно невысокой скорости потока (около 6000 Кбит/с) так, что отличить результат от DV-оригинала было довольно трудно. Но был у первой версии и заметный недостаток: кодирование с наивысшим качеством продолжалось чудовищно долго. Один час исходного видео мог кодироваться до 12-20 часов, в зависимости от качества и/или динамики исходного материала. У Procoder связь между качеством отснятого видео и временем кодирования была прямой и непосредственной. Самый тяжелый материал, такой как бурлящая вода, Procoder мог кодировать в 20-30 раз дольше, чем продолжалась сама съемка.
Очевидно, по пожеланиям трудящихся, Canopus весной 2003 года выпустила новый MPEG-2-движок для Procoder, который вошел в версию 1.5 Procoder. Скорость кодирования возросла заметно, но вот с качеством… По мнению многих любителей, Canopus с точки зрения качества просто «сдвинул» вниз режимы кодирования. Иными словами, то, что раньше было Mastering-Quality, исключили вообще, а бывший режим Highest-Quality стал в версии 1.5 Mastering-Quality.
Прошел еще год, и Canopus разродился второй версией. Procoder стал кодировать еще быстрее, обзавелся множеством как довольно полезных, так и почти бесполезных добавок, но качество лучше не стало.
По моему мнению, как было лучшим качество кодирования у самой первой версии Procoder, так и осталось. Что касается времени кодирования — этот недостаток, как и молодость, со временем проходит. На современных двухъядерных процессорах даже тяжелый материал первая версия Procoder кодирует всего в два-четыре раза дольше продолжительности оригинала.
Cinema Craft Encoder (CCE)
Когда-то именно этот кодер считался неофициальным лидером, оставившим далеко позади всех конкурентов. Его стоимость была и остается немаленькой, CCE — один из самых дорогих программных кодеров на рынке.
У него — множество настроек, что в принципе позволяет достичь очень высокого качества на конкретном материале. Но в настройках CCE надо уметь разобраться и понять, что и как влияет на результат, поэтому CCE менее дружелюбен, чем Canopus Procoder. К несомненным плюсам CCE следует отнести возможность кодирования «в лоб» для DVD с многокамерной съемкой (angles).
Считается, что CCE по-прежнему остается лучшим кодировщиком для материала, полученного с аналоговых плат видеозахвата, таких, например, как ТВ-тюнеры. Что касается DV-исходников, то CCE все-таки уступает Canopus Procoder в качестве кодирования. Как сказал в свое время один из поклонников CCE: «CCE почему-то выпячивает артефакты DV-кодирования, а Procoder их сглаживает».
Main Concept MPEG Encoder
Пожалуй, Main Concept MPEG Encoder — самый популярный в мире кодер MPEG, причем большинство его пользователей об этом и не подозревает. Дело в том, что Main Concept MPEG Encoder встроен в такие популярные видеоредакторы и программы DVD-авторинга, как Adobe Premiere, Sony Vegas Video, Sony DVD Architect, Ulead MediaStudio Pro, Ulead DVD Movie Factory и Ulead DVD Workshop. Крайне либеральная, а точнее демпинговая ценовая политика компании Main Concept привела к массовому внедрению ее продукта. Сам по себе кодировщик за последние годы серьезно не изменился, разве что стал двухпроходным. О качестве же кодирования можно сказать так: не так хорошо как хотелось бы, но вполне приемлемо.
Разумеется, кроме трех кодеров, о которых шла речь выше, существуют и другие, но их популярность гораздо меньше. Например, весьма неплохой кодер входит в состав видеоредактора Avid Liquid Edition, но устанавливать на компьютер этот сложный и мощный пакет только ради одного кодера нет никакого смысла.
Многие видеолюбители, особенно начинающие, используют простую в освоении программу Avid (бывший Pinnacle) Studio, в которой есть свой собственный кодировщик, не отличающийся, к сожалению, высоким качеством кодирования.
Подводя итог, можно сказать, что по большому счету существенной, бросающейся в глаза обычному зрителю, разницы в качестве кодирования в зависимости от применяемого кодера нет. Есть нюансы, которые далеко не всем заметны. На качество результата кодирования более всего будет влиять качество самой съемки. Чем больше «ходила» камера в руках оператора, чем сложнее в динамическом отношении была картинка, чем слабее освещенность в месте съемки, — тем хуже результат кодирования в MPEG-2. Такие дефекты съемки кодер может просто не «вытянуть», вне зависимости от конкретного его производителя. Чудес, увы, не бывает…
Но ежели вы все-таки хотите докопаться до дна и узнать как можно больше, почитайте довольно подробный тест про упомянутые выше кодеры.
Сергей Блохнин
Основные параметры MPEG-кодирования и управления процессом кодирования
Алгоритм MPEG-кодирования довольно сложен, для достижения близкого к идеалу результата теоретически и практически можно управлять десятками параметров настройки, и многие программные кодеры позволяют это делать. Но управление тонкими настройками MPEG-кодирования требует до мелочей понимания процесса и многочисленных экспериментов, что для любителя просто не нужно. Достаточно уметь управлять всего несколькими параметрами: скоростью потока (bitrate), типом кодирования и количеством проходов. Расскажем немного о них.
Скорость потока
Скорость потока — это фактический показатель степени сжатия исходного видео. Измеряется она в килобитах или в мегабитах в секунду. Чем больше скорость, тем выше качество, но и тем больше размер создаваемого кодером файла. Обычно скорость потока подбирают максимально возможной для «попадания» в нужный размер. Для определения битрейта проще всего воспользоваться каким-либо бесплатным калькулятором, которые есть в Сети. Наиболее удобен и понятен калькулятор с сайта VideoHelp. В любом bitrate-калькуляторе достаточно ввести продолжительность фильма и размер диска, на который будет записываться результат, после чего калькулятор сообщит скорость потока. Эта скорость всегда будет максимально допустимой. Мы рекомендуем снизить ее еще процентов на 5 в расчете на возможную погрешность кодера.
Тип кодирования
Существуют два разных типа кодирования: с переменной (variable bitrate, или VBR) скоростью потока и постоянной (constant bitrate, или CBR). Выбор VBR означает, что кодер будет уменьшать скорость потока на статичных сценах (такие фрагменты часто называют «говорящие головы») и увеличивать на динамичных, что позволяет достичь сравнительно высокого качества на средней и даже низкой скорости потока. Применять переменную скорость потока имеет смысл только при многопроходном кодировании. Выбирать VBR стоит при скорости потока до 8000 Кбит/с. Если же место на DVD-диске позволяет не ограничивать скорость потока, разумнее использовать постоянную скорость при кодировании. Смысл постоянной скорости потока очевиден — кодер не обращает внимания на содержание видео, тупо кодируя все фрагменты с одной и той же скоростью. Такое кодирование применяется в основном для коротких фильмов, когда возможно устанавливать наивысшую скорость потока без оглядки на занимаемое место.
Количество проходов
В любом из современных программных кодеров MPEG в числе прочего можно задать и количество проходов кодирования. Смысл двух и более проходов в том, что во время первого прохода кодер ничего не кодирует, а только анализирует материал и расставляет отметки для себя. При втором проходе кодер будет кодировать, используя эти отметки как инструкции: где именно и с какой скоростью потока кодировать. Обычно, задавая параметры кодирования для переменной скорости потока и двухпроходного кодирования, вы указываете два параметра: максимально допустимую скорость потока (max bitrate) и среднюю (average или video bitrate) скорость потока. Кодер старается распределять при кодировании скорость потока в зависимости от картинки фильма так, чтобы средняя скорость потока в итоге совпала с заданной вами.
Остальное
Разумеется, возможные параметры настройки MPEG-кодера не исчерпываются количеством проходов и скоростью потока. Но влияние остальных параметров на конечный результат гораздо менее заметно.
Сергей Блохнин