h264. Год спустя. Технология кодирования видео в MPEG-4 AVC. Часть вторая
АрхивВидеоИтак, вы открыли исходный файл с видео в AviSynth Script Creator’e и - ничего нового там еще не появилось, так что можете его смело свернуть. Теперь пробежимся по основным настройкам Script Creator’a.
Надеюсь, в конце прошлого номера я вас достаточно заинтриговал. Итак, вы открыли исходный файл с видео в AviSynth Script Creator’e и - ничего нового там еще не появилось, так что можете его смело свернуть. Теперь пробежимся по основным настройкам Script Creator’a (рис. 1).
(Окончание. Начало см. здесь.)
Закладка Options
Более практичен другой вариант: добиться "квадратности" пикселов, уменьшив разрешение по одной из координат. В этом случае разрешение картинки уменьшается, за счет чего увеличивается плотность информации на каждый кодируемый пиксел, а всеобщая квадратность улучшает совместимость выходного потока с разными декодерами h264.
Сразу вы можете указать Disk Space - желаемый объем ролика в килобайтах, его длительность и частоту кадров (она равна частоте кадров входного материала), а также разрешение, значение которого вы только что выставили в MeGUI. Битрейт, то есть количество информации, которое придется на секунду закодированного видео, считается как частное от деления желаемого объема ролика в килобитах на его длительность в секундах. Все бы хорошо, но вы наверняка обратили внимание, что битрейтов в калькуляторе не один, а два (рис. 2). И правда - звук кодируется независимо от видео, но в финальном-то файле он свое место займет! Выходит, чтобы определиться с битрейтом видео, нужно сначала определиться с аудио. Смело ставьте значение в пределах 64–192 кбит/с для каждой дорожки на свое усмотрение. Мое усмотрение по данному вопросу зависит от целей сжатия: если ролик планируется размещать в Сети, где важен каждый мегабайт, - обойдутся юзеры и 64 кбит/с. Если же пережимается какой-нибудь DVD для себя любимого - тогда, конечно, не стоит экономить. Nero AAC по сравнению с mp3 сделал огромный шаг вперед, и таких скромных битрейтов оказывается достаточно для вполне приличного кодирования даже шестиканального звука.
Ура! Теперь вы можете посчитать битрейт видео (запомните его и выбранный аудиобитрейт!), а стало быть, и первое приближение Quality Index’a с максимально возможным разрешением картинки. x264 обеспечивает практически неотличимое от оригинала качество при QI в пределах от 1200 до 2000 в зависимости от исходного фильма. Если получившееся у вас значение QI меньше 1200, чуть уменьшите разрешение в MeGUI и пересчитайте QI заново.
Закладка Filters
После нажатия магической кнопки Analyse MeGUI возьмется определить тип вашего видео. В большинстве случаев, когда источник чисто прогрессивный или чересстрочный, MeGUI не ошибается. А вот когда я сжимал документальный фильм с вкраплениями кадров старой кинохроники (естественно, прогрессивных) на фоне общей чересстрочности материала MeGUI схалтурила и предложила страшный алгоритм деинтерлейсинга, который путал полукадры на границе смены планов. Мало того что алгоритм работал крайне медленно, так в итоге все пришлось пережимать заново. Поэтому обязательно проверьте, правильно ли MeGUI выбрала метод deinterlace (это можно сделать перед началом непосредственно кодирования), и в случае чего исправьте скрипт вручную, установив стандартный деинтерлейс командой Field Deinterlace(blend=false).
Все остальные настройки AviSynth Script Creator’a предлагаю оставить по умолчанию, а при желании изучить самостоятельно. Теперь сохраните скрипт. В результате получится avs-файл, который нужно открыть в Classic Media Player [Если скрипт не проиграется, скачайте и установите YuvCodecs, а также проверьте через текстовый редактор, правильно ли в скрипте указаны пути к плагинам и файлам источников. В случае ошибки, кстати, вместо видео AVISynth покажет описание ошибки и номер строчки в скрипте, где она возникла]. Перед вами окажется именно то изображение (только пикселы у avs-скрипта при просмотре будут квадратными), которое впоследствии получит и сожмет x264.exe. Можете поэкспериментировать с шумодавом и другими настройками скрипта - после сохранения изменений достаточно переоткрыть avs-файл, чтобы сразу увидеть результат. Все нормально? Длительность, разрешение, deinterlace? Тогда приступайте к кодированию.
Кодирование видео
Дальше никаких особых сложностей нет. Закройте Script Creator и отправляйтесь в основное окно MeGUI, в закладку Input. Укажите путь к avs-файлу, выставьте кодек x264 и контейнер mp4, выберите профайл HQ-Slowest для получения максимально качественного результата (свежие профайлы были автоматически скачаны при первичной настройке MeGUI), нажмите кнопочку Config напротив выбора кодека и в открывшемся окне укажите битрейт, который вы рассчитали, выбирая разрешение изображения. Все остальные настройки кодека можно оставить по умолчанию, доверившись авторам профайла, но если жажда исследования в вас до сих пор не угасла, можете почитать о них подробнее тут: mewiki.project357.com/X264_Configu-ration (на английском языке, правда).
Итак, теоретически все готово для начала кодирования. Нажмите кнопку Enqueue, в результате чего в закладке Queue главного окна MeGUI в очередь встанут два прохода кодирования видео. Во время первого прохода кодек "присматривается" ко входному материалу и "размышляет", как бы лучше размазать по нему доступные мегабайты. Результаты "размышлений" записываются во временный файл статистики. Во время второго прохода происходит непосредственно кодирование материала.
Для запуска обоих проходов служит, как нетрудно догадаться, кнопка Start, после нажатия которой ваш компьютер призадумается подобно двоечнику на экзамене (см. таблицу производительности).
Кодирование аудио
Звук, в принципе, можно пережать в той же MeGUI, но мне, честно говоря, не нравятся ее возможности по настройке командной строки neroAacEnc.exe, так что для этих целей я использую foobar2000. Единственное, кроме дистрибутива, что вам понадобится для сжатия в mp4 AAC, - это сам кодировщик neroAacEnc.exe да плагины для декодирования ac3 и DTS (разумеется, они нужны только для ac3- и DTS-файлов при пережатии DVD; поддержка WAV, mp3 и многих других форматов обеспечивается без всяких расширений), которые следует положить в папку foobar2000\components. При первом запуске конвертирования Foobar2000 спросит вас, где, собственно, ему взять neroAacEnc.exe, так передайте любопытному, что MeGUI уже автоматически скачала и положила его к себе в папку.
Откройте ваши звуковые файлы в Foobar’e и по правому клику мыши выберите опцию Convert. Настройте кодек Nero, выбрав двухпроходное кодирование (ABR, two-pass, slow to encode) и указав расчетный битрейт. Нажимайте ОК, процесс пошел. Не правда ли, проще, чем с видео?
Сведение
В результате размышлений компьютера у вас теоретически должно получиться два mp4-файла - один со звуком, другой с видео. Это уже почти финал, остался последний шаг. "Замуксить", то есть свести воедино звук и видео, можно из той же MeGUI, для чего в разделе Tools -> Muxer имеется утилита mp4 muxer. Если вы успешно проделали все предыдущие действия, то с этой утилитой легко разберетесь самостоятельно. Кстати, обратите внимание, что в микшере есть возможность добавить в итоговый файл чаптеры и субтитры. Чаптеры можно задать в MeGUI (Tools -> Chapter Creator), а для субтитров существует пара замечательных бесплатных программ. Subtitle Workshop позволяет удобно оттитровать свой ролик, а SubRip - признанный авторитет в "сдирании" субтитров с DVD-дисков.
Воспроизведение
Итак, кажется, вы добрались до самого трепетного момента - просмотра результатов ваших трудов. Уймите дрожь в коленках - прежде потребуется еще одно, последнее усилие, чтобы научить вашу систему открывать mp4-файлы. Для этого необходимы декодеры h264- и AAC-потоков, а также mp4-сплиттер. Haali Media Splitter нужен потому, что по умолчанию Windows знать не знает о существовании mp4-файлов и при попытке их открыть впадает в оцепенение. В бесплатном виде декодеры имеются в составе ffdshow - известного комплексного видеодекодера.
В рамках стилистики этой статьи было бы несуразно предложить читателю такой простой выход - взять и скачать пару файлов. Тем более что установка "тяжелой" ffdshow, подхватывающей декодирование почти всех видеофайлов системы, часто бывает нежелательна. Лучше я расскажу, как декодируют mp4 настоящие "правильные пацаны". Некоторое время назад компания CoreCodec выпускала бесплатный декодер h264 под названием CoreAVC Beta. Декодер просто замечательный - и по сей день скорость его работы на 15–30% выше, чем у конкурентов (ffdshow в их числе), при идентичном качестве. Но вот незадача: жажда наживы затмила разработчикам разум, и в какой-то момент бесплатная CoreAVC Beta превратилась в платную CoreAVC 1.1. В Сети, разумеется, осела последняя бесплатная бета-версия, которую не составит труда найти. В отличие от CoreAVC 1.1, насколько я заметил, в ней нет поддержки анаморфного видео (то есть прямоугольные пикселы отображаются квадратными), а в инсталляционном пакете не прилагается упомянутый выше Haali Media Splitter для файлов mp4. Версию 1.1 найти гораздо труднее, но если вы законопослушны, то всегда можете купить ее на сайте разработчика. Пропал и отличный декодер звука Core AAC - на официальном сайте разработчика перед публикацией статьи я вообще не нашел упоминания о нем.
После того как декодеры и сплиттер будут установлены, mp4-файлы начнут открываться в любом DirectShow-проигрывателе, хоть в Windows Media Player 10. Чаптеры, переключение аудиоканалов и субтитры, правда, заработают только в каком-нибудь более приличном плейере, вроде Classic Media Player.
Итоги
Довольно почешите живот - вы создали ролик с помощью самых прогрессивных на сегодняшний день технологий и получили оптимальное соотношение качество/размер. На вашем месте я бы ни за что не поверил предыдущему высказыванию, а потому специально положил на свою домашнюю страничку несколько видеофрагментов, закодированных по вышеизложенной методике: www.finar.ru/video/previews.
Если вы заинтересовались процессом и чувствуете, что информации этого краткого обзора недостаточно, зайдите сюда:
Создание avs-скриптов вручную
Для продуктивной работы с MeGUI желательно понять базовые приемы языка AviSynth. Задача не простая, но приложенные усилия компенсируются полной прозрачностью процесса кодирования и широчайшими возможностями по преподготовке видео. Вы сможете создавать любые скрипты с использованием любых встроенных и внешних фильтров обработки изображения, подавая на вход любое видео, - вне зависимости от выполненных действий x264 получит на вход стандартный поток. Для AVISynth написано и свободно распространяется в Сети невероятное количество плагинов для обработки изображения и декодирования всех популярных видеоформатов. Следует, однако, помнить, что для совместимости с x264.exe нужно соблюдать несколько условий:
Дополнительную информацию по созданию AVS-скриптов можно найти в прилагающейся к AVISynth документации и тут: forum.ixbt.com/topic.cgi?id=29:9331.
По материалам "Компьютерры"