h264 Год спустя Технология: Кодирования видео в MPEG-4 AVC. Часть первая
АрхивЧуть больше года назад на страницах "Компьютерры" я делился опытом работы с новаторским на тот момент видеокомпрессором Ateme h264, реализованном в программе-кодировщике Ahead Nero Recode.
Чуть больше года назад на страницах "Компьютерры" я делился опытом работы с новаторским на тот момент видеокомпрессором Ateme h264, реализованном в программе-кодировщике Ahead Nero Recode. Тогда Recode был чуть ли не единственным продуктом, позволявшим кодировать видео в h264, а потому приходилось мириться с традиционными свойствами монопольного коммерческого софта.
Собственно, только кодеком нового поколения Nero Recode и мог похвастаться, а в других отношениях программа была просто ужасна. Вообще-то говорить о ней в прошедшем времени не совсем корректно, - проект еще до сих пор развивается и продается, - но сегодня, к счастью, у него есть сильный конкурент, который позволит всем желающим отправить дистрибутив Recode на кладбище жесткого диска. Конкурент этот многолик, как Нерей, и имя ему - Open Source.
Напомню вкратце, о чем идет речь. Формат компрессии видео MPEG-4, стандартизированный в 1998 году, подразделяется на два основных профайла - MPEG-4 ASP (Advanced Simple Profile), к которому относятся DivХ, XviD и иже с ними, и MPEG-4 AVC (Advanced Video Coding, он же h264 или MPEG-4 Part 10). Первый получил феноменальную популярность благодаря полухакерской тусовке, взломавшей кодек Microsoft и выпустившей его легендарную модификацию DivX 3.11. С тех пор утекло много воды: "разработчики" DivХ 3.11 организовали собственную фирму DivX Networks, полностью переписали код компрессора и коммерциализировали свой продукт. Появилось и множество конкурентов, самым заметным из которых стал открытый XviD. Однако через какое-то время все возможности MPEG-4 ASP были исчерпаны, кодеки вылизаны почти до блеска, и кривая развития компрессоров устремилась к горизонтальной асимптоте [Попробуйте, например, ради интереса закодировать пару роликов 6-й и 5-й версиями DivХ, и вы обнаружите, что разница между этими версиями несравненно меньше, чем между 5-й и 3-й]. В этот момент на сцену вышел следующий профайл - MPEG-4 AVC, более требовательный к ресурсам кодирующих и воспроизводящих систем, зато позволяющий использовать более совершенные приемы компрессии и обеспечивший скачкообразное улучшение параметра качество/битрейт. Скачок этот можно сравнить с переходом от VCD к DVD (от MPEG-1 к MPEG-2), и хотя MPEG-4 ASP все еще гораздо популярнее AVC, явление это временное: h264 заявлен как производственный стандарт будущих HD/Blue-ray-дисков и уже используется для спутникового телевещания в Европе. Сегодня существуют стационарные плейеры, поддерживающие этот формат, а через несколько лет h264-плейеры станут столь же привычными, как DVD сегодня.
Вернемся к конкуренту Nero Recode. Он представляет собой сборник множества бесплатных commandline-энкодеров, микшеров, GUI и декодеров, увязав которые воедино, можно собрать нечто позволяющее закодировать в MPEG-4 AVC все, что душе угодно. Получается некий узел программ в Unix-стиле, вроде известнейшего пакета Gordian Knot, использовавшегося для кодирования MPEG-4 ASP. Единого названия у этого "кооператива" нет, как нет и законченного программного продукта. Нет точного перечня утилит, его составляющих, а также стабильного хостинга и красивого сайта для них. Нет и сложившейся команды разработчиков. Словом - классический "зоопарк" OpenSource-сообщества, со свойственной ему чехардой в версиях сборок компонентов, совместимостью, хостингами и документацией, полным отсутствием заботы об удобстве пользователя и отказом от любых гарантий.
Зато - к острию новой технологии можно прикоснуться уже сейчас, причем бесплатно, был бы доступ в Интернет.
Дополнительные фреймсерверы
В некоторых случаях, прежде чем подавать видео на вход AviSynth’a, имеет смысл прогнать его через еще один фреймсервер. В основном такой подход используется при декодировании DVD-видео и сжатии захватов с TV. DVD обычно имеют сравнительно сложную внутреннюю структуру и требуют отдельной утилиты для предварительной подготовки видеоконтента и приведения его в удобоваримый для AviSynth’a вид. DGIndex - наследник легендарного DVD2AVI - индексирует VOB-файлы, скопированные на жесткий диск из директории VIDEO_TS исходного DVD, и создает индексный d2v-файл. DGIndex.exe вы найдете в папке с MeGUI - программа должна была его скачать, как и ависинтовский плагин DGDecode.dll.
Сначала определите, в каких файлах скопированного вами DVD находится сам фильм, открывая VOB’ы в проигрывателе (например, в скачанном Classic Media Player’e). Имена всех файлов с фильмом скорее всего будут отличаться только порядковыми номерами; соблюдая очередность, загрузите VOB’ы в DGIndex. Проверьте пункт Audio->Output Method->Demux All Tracks, отвечающий за сохранение всех оригинальных аудиодорожек без перекодировки. Теперь выберите File->Save Project и сохраните d2v-файл, который затем можно будет открыть в AviSynth Script Creator’e. Сохраняя готовый AVISynth-скрипт, оставьте то же имя файла и путь, что были у d2v-проекта, - это позволит делать предпросмотр avs-скрипта вместе со звуком.
При сжатии захватов с TV и решении схожих задач, требующих маломальского монтажа (вырезания рекламы, например), интерфейс (вернее отсутствие оного) нивелирует все остальные преимущества AviSynth’a над старым добрым VirtualDUB’ом. Нет проблем - обработайте видео в привычном VirtualDUB’e, сохраните аудиоряд в wav-файл, а затем переведите VirtualDUB в режим фреймсерверa (File -> Start Frame Server). В результате будет создан vdr-файл, который опять же "съест" AviSynth Script Creator.
Тактический инструктаж
Сегодня речь пойдет о том, как научиться работать со всем этим безобразием, а именно кодировать видео в MPEG-4 AVC с использованием только бесплатного софта. Существует множество способов сделать это, я расскажу о том, который использую сам, то есть, разумеется, об оптимальном. Он базируется на использовании открытого видеокодера x264, бесплатного аудиокодера Nero AAC и графической оболочки MeGUI. Поскольку способ этот довольно запутанный, начертим общий план действий (см. блок-схему).
C приходом h264 мировая общественность фактически отказалась от традиционного, но устаревшего контейнера AVI в пользу родного для всех четвертых MPEG’ов MP4. Нет, h264-поток, конечно, можно впихнуть и в "авишку", для чего достаточно скачать и установить acm-версию кодека x264, а затем воспользоваться любым видеоредактором, но при этом вы лишитесь множества "вкусностей" формата. К ним относятся некоторые "фичи" энкодера, повышающие качество итогового материала, а также надежная поддержка нескольких медиапотоков, субтитров, меню и глав. Кроме того, h264 avi-файл не будет читаться на аппаратных проигрывателях, в отличие от стандартизированного [ISO/IEC 14496-14, ISO/IEC 14496-12] MP4. Вместе с контейнером на свалку истории отправился и VfW-интерфейс, и все утилиты для работы с ним (и даже старый добрый VirtualDUB). Исторический процесс повернулся на 180 градусов и от сложного непрозрачного системного интерфейса Video for Windows вернулся к простому: для кодирования используется CLI-кодек (Command Line Interface, интерфейс командной строки) x264.exe. На вход x264.exe подается некоторый видеопоток, а на выходе получается mp4-видеофайл. Настройка параметров компрессии производится с помощью ключей командной строки. x264.exe может принять на вход либо специальный AVI-файл, либо AVISynth’овский [AVISynth - своеобразный язык программирования, предназначенный для обработки видео. Использует текстовые avs-скрипты в качестве инструкций по обработке видеопотока. Широко использует DirectShow-интерфейс Windows, поддерживает расширения через дополнительные плагины] скрипт-фреймсервер, занимающийся предварительной подготовкой вашего видео. Мы будем использовать только AVS-скрипты.
Для кодирования звука (который, естественно, жмется отдельно и независимо от видео) на текущий момент оптимален CLI-кодек от Ahead [Да-да, именно фирма Ahead - создатель коммерческого Nero Recode - недавно выпустила лучший бесплатный MPEG4-кодировщик аудио! А произошло это чудо вот как: в начале нынешнего года Nero Recode начала сдавать позиции в плане кодирования видео. Но аудиокодер Nero оставался вне конкуренции. Пытливые умы и тут насолили Ahead: оказалось, что для кодирования звука достаточно выцарапать из дистрибутива Nero Recode 6 или 7 пару-тройку файликов, после чего с помощью специальных GUI ими можно было успешно пользоваться, даже не слишком нарушая лицензионное соглашение. Файлики эти быстро расползлись по Сети, и прогрессивная общественность окончательно отвернулась от Nero Recode. Ahead, поняв, что стремительно теряет популярность в среде видеокодеров, решилась на отчаянный шаг и 1 мая сего года выпустила удобный бесплатный CLI-кодировщик, ни в чем не уступающий своему удачнейшему аналогу из последней версии Recode] - neroAacEnc.exe, пережимающий входной поток в mp4-аудиофайл. Пару mp4-файлов с видео и звуком, полученных после кодирования, хотелось бы как-то соединить. Для этого предназначена еще одна CLI-утилита - mp4box.exe, микширующая все медиапотоки в один файл. Естественно, вручную писать команды для управления всеми этими утилитами невозможно, ведь для каждой из них существуют многие десятки ключей! Поэтому правит бал единая графическая оболочка MeGUI, автоматизирующая и визуализирующая весь процесс подготовки видео, настройки кодеков и микшеров и т. д. Вообще говоря, MeGUI, кроме кодирования x264, поддерживает еще больше десятка других свободных CLI-компрессоров и микшеров и, по замыслу разработчиков, должна кодировать все, что угодно, во все остальное. Но из-за громадья планов программа постоянно сырая, и на момент написания статьи многие ее возможности были реализованы посредственно. Со временем она, конечно, должна "просохнуть", а в сегодняшней практической части некоторые действия будут выполняться с помощью альтернативного софта.
Подготовка боезапаса
Ну что, вас не испугало теоретическое описание процесса? Fortes fortuna adjuvat - смелым помогает судьба, так что приступим к практической части. Разумеется, в одной статье невозможно описать и десятой части возможностей MeGUI, поэтому сегодня займемся только созданием видеофайла с h264-видеопотоком и AAC-звуком.
Нам потребуются:
Для начала установите те из перечисленных приложений, которые требуют инсталляции в систему. Затем (внимание!) разархивируйте архив с MeGUI в ту папку, в которой вы собираетесь оставить ее навсегда. Подключитесь к Интернету и запустите MeGUI. Откажитесь от автоапдейта и сразу, ничего не трогая, отправляйтесь в раздел Tools->Update и обновите следующие компоненты:
x264
mp4box
neroaacenc
dgindex
avswrapper
data
dgdecode
decomb
STx264
Это необходимый минимум утилит для создания AVC-фильмов, в дальнейшем для расширения функциональности MeGUI вы всегда сможете установить остальные компоненты. Если автоматизированное обновление пройдет успешно - возрадуйтесь, вам повезло - все хостинги в данный момент работают стабильно, и целая толпа мелких файликов послушно собралась в рабочей папке MeGUI и ждет дальнейших распоряжений. Представляете, каково было бы разыскивать их в Сети по одному! Если же что-то не скачается - что ж, придется организовать розыск в Яндексе и Google. Делая автоматизированное обновление из MeGUI, вы убиваете и еще одного зайца - пути ко всем утилитам автоматически прописываются в настройках программы. Именно поэтому не стоит перемещать MeGUI в другую папку после апдейта. Иначе придется вручную переписывать пути в разделе Tools->Settings->Program Paths.
Инструменты подготовлены, идем дальше.
Подготовка контингента
Прежде чем приступать к кодированию, убедитесь, что все предварительные мероприятия выполнены: видео скопировано на жесткий диск, звуковая дорожка сохранена в отдельном файле. Самый сложный этап работы с MeGUI состоит вовсе не в кодировании, а в переводе видео в подходящий для энкодера х264.exe вид - а именно в создании avs-файла-скрипта для AviSynth’a. Большим подспорьем в этом непростом деле служит встроенный в инструментарий MeGUI AviSynth Script Creator. С его помощью можно полуавтоматически создать скрипты для простой перекодировки основных типов входного видео. AviSynth Script Creator теоретически должен открывать любые файлы, декодируемые через Direct Show, то есть проигрывающиеся в Windows Media Player или GraphEdit, а также индексные файлы d2v и файлы фреймсервера VirtualDUB’a. Откройте MeGUI, отправляйтесь в Tools -> AviSynth Script Creator и укажите путь к подготовленному исходному файлу. На экране появится окно с вашим видео, в котором… На этом интригующем моменте давайте прервемся до следующего номера "Компьютерры".
Продолжение следует.