Finar.ru
web.finar.ru
video.finar.ru
Темы для BootstrapNew!

h264 - год спустя

инструкция по правильной компрессии видео в h264 с помощью MeGui и AviSynth

Публикация:
Компьютерра, линк 

Чуть больше года тому назад на страницах Компьютерры я делился опытом работы с новаторском на тот момент видеокомпрессором Ateme h264, реализованном в программе-кодировщике Ahead Nero Recode. Тогда Recode была чуть ли не единственным продуктом, позволявшим кодировать видео в h264, а потому приходилось мириться с традиционными свойствами монопольного коммерческого софта. Собственно, только кодеком нового поколения Nero Recode и мог похвастаться, а во всех остальных отношениях программа была без преувеличения просто ужасна. Говорить в прошедшем времени о ней вообще-то не совсем корректно, - проект еще до сих пор развивается и продается, - но сегодня, к счастью, у него есть мощный Конкурент, который позволит всем желающим отправить дистрибутив Recode на кладбище жесткого диска. Конкурент этот многолик как Нерей, и имя ему - OpenSource.

Напомню вкратце, о чем идет речь. Формат компрессии видео MPEG4, стандартизированный в далеком 1998 году подразделяется на два основных профайла - MPEG4 ASP (Advanced Simple Profile), к которому относятся Divx, Xvid и иже с ними, и MPEG4 AVC (Advanced Video Coding, он же h264 или MPEG-4 Part 10). Первый получил феноменальную популярность благодаря полухакерской тусовке, взломавшей кодек Microsoft и выпустившей легендарную его модификацию - Divx 3.11. С тех пор утекло много воды: "разработчики" Divx 3.11 организовали собственную фирму Divx Networks, полностью переписали код компрессора, и коммерциализировали свой продукт. Появилось и множество конкурентов, самым заметным из которых стал opensource'ный Xvid. Однако через какое-то время все возможности MPEG4 ASP были исчерпаны, кодеки вылизаны почти до блеска, и кривая развития компрессоров заметно уплощилась, стремясь к горизонтальной асимптоте (попробуйте, например, ради интереса закодировать пару роликов 6м и 5м Divx'ом, и вы обнаружите, что разница между ними несравненно меньше, чем между 5й и 3й его версией). В этот момент на сцену вышел следующий профайл - MPEG4 AVC, более требовательный к ресурсам кодирующих и воспроизводящих систем, зато позволяющий использовать более совершенные приемы компрессии и обеспечивший скачкообразное улучшение соотношения качество/битрейт. Скачок этот можно сравнить с переходом от VCD к DVD (от MPEG1 к MPEG2), и хотя на сегодняшний день MPEG4 ASP все еще заметно популярнее AVC, явление это однозначно временное: h264 заявлен как производственный стандарт будущих HD/Blue-Ray дисков, и уже сейчас используется для спутникового телевещания  в Европе. Уже сегодня существуют стационарные плееры , поддерживающие этот формат, а через несколько лет, теоретически, h264 плееры станут настолько же обыденным явлением, как DVD сегодня.

Вернемся к Конкуренту Nero Recode. Конкурент - это сборник множества бесплатных commandline энкодеров, муксеров, GUI и декодеров, увязав которые воедино можно собрать нечто, позволяющее закодировать в MPEG4 AVC буквально все, что душе угодно. Получается некий узел программ в Unix-стиле, вроде известнейшего пакета Gordian Knote, использовавшегося для кодирования MPEG4 ASP. Единого названия у этого «кооператива» нет, так же как нет и законченного программного продукта. Нет точного перечня утилит, его составляющих, а также стабильного хостинга и красивого сайта для них. Нет и четко определенной команды разработчиков. Одним словом - классический «зоопарк» OpenSource-сообщества, со свойственной ему чехардой в версиях сборок компонентов, совместимостью, хостингами и документацией; полным отсутствием заботы об удобстве пользователя и отказом от любых гарантий.

Зато - к острию новой технологии можно лично прикоснуться уже сейчас, причем абсолютно бесплатно, был бы доступ в Интернет.

noteПеред прочтением этой статьи рекомендуется ознакомиться с терминологией

Содержание:
  1. Тактический инструктаж
  2. Подготовка боезапаса
  3. Подготовка контингента
  4. Кодирование видео
  5. Кодирование аудио
  6. Сведение
  7. Воспроизведение
  8. В результате
  9. Сравнительная таблица производительности
  10. Дополнительные фреймсерверы
  11. Создание .avs скриптов вручную
  12. Ликвидация рассинхронизации

Тактический инструктаж

Как вы уже поняли, сегодня речь пойдет о том, как научиться работать со всем этим безобразием, а именно кодировать видео в MPEG4 AVC с использованием только бесплатного софта. Существует множество разных способов сделать это, я расскажу о том, который использую сам, то есть, разумеется, наиболее оптимальном. Он базируется на использовании открытого видеокодера x264, бесплатного аудиокодера Nero AAC, и графической оболочки MeGUI. Так как этот способ довольно запутанный, сначала давайте начертим общий план действий:

Алгоритм сжатия в h264

C приходом h264 мировая общественность фактически отказалась от традиционного, но устаревшего контейнера AVI в пользу родного для всех четвертых MPEG'ов MP4. Нет, h264-поток конечно можно впихнуть и в «авишку», для чего достаточно скачать и установить acm-версию кодека x264, а затем воспользоваться любым видеоредактором, но при этом вы лишитесь множества "вкусностей" формата. К ним относятся некоторые "фичи" энкодера , повышающее качество результирующего материала, а также надежная поддержка нескольких медиапотоков, субтитров, меню и чаптеров. Кроме того, h264 avi-файл в будущем не будет читаться на аппаратных проигрывателях, в отличие от стандартизированного  MP4 (ISO/IEC 14496-14, ISO/IEC 14496-12). Вместе с контейнером на свалку истории отправился и VfW-интерфейс, а также все утилиты для работы с ним (и даже старый добрый VirtualDub). Исторический процесс совершил реверс, и от сложного непрозрачного системного интерфейса 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 поняв, что стремительно теряет популярность в среде видеокодеров, решилась на отчаянный шаг - и чтобы таки получить свои 15ть минут славы 1 мая сего года выпустила удобный и полностью бесплатный CLI-кодировщик, ни в чем не уступающий своему удачнейшему аналогу из последней версии Recode'a) - neroAacEnc.exe, пережимающий входной поток в .mp4 аудиофайл. Пару .mp4 файлов с видео и звуком, полученных в итоге кодирования, хотелось бы еще как-то соединить воедино. Для этого предназначены еще одна CLI-утилита - mp4box.exe, микширующие все медиапотоки в один файл. Естественно, что вручную писать команды для управления всеми этими утилитами просто невозможно, ведь число ключей для каждой из них насчитывает многие десятки! Поэтому правит балом единая графическая оболочка MeGUI, автоматизирующая и визуализирующая весь процесс подготовки видео, настройки кодеков и муксеров и т.д. Вообще говоря, замах разработчиков MeGUI достоин сталинских архитекторов - кроме кодирования x264, она поддерживает еще больше десятка других свободных CLI компрессоров и муксеров, и, по замыслу, должна позволять кодировать все, что угодно во все остальное. Величина замаха компенсируется скромностью результата. Из-за своего широкого профиля программа постоянно "сырая", и на момент написания статьи некоторые ее возможности работали посредственно. Теоретически, в будущем она должна "просохнуть" до конца, а в сегодняшней практической части некоторые действия будут выполняться с помощью альтернативного софта.

Подготовка боезапаса

Ну что, вас не испугало теоретическое описание процесса? Fortes fortuna adjuvat – смелым помогает судьба (лат.), так что приступим к практической части. Естественно, что в рамках одной статьи невозможно описать и десятой части возможностей MeGUI, поэтому сегодня займемся сугубо созданием видеофайла с h264 видеопотоком и AAC звуком. Для этого потребуется:

Для начала установите те из перечисленных приложений, которые требуют инсталляции в систему. Затем (внимание!) разархивируйте архив с MeGUI в ту папку, в которой вы собираетесь оставить ее навсегда. Подключитесь к Интернету и запустите MeGUI. Откажитесь от автоапдейта и сразу, ничего не трогая, отправляйтесь в раздел Tools->Update и обновите следующие компоненты:
External programs:
  • x264
  • mp4box
  • mkvmerge
  • neroaacenc
  • dgindex
  • avswrapper
Megui:
  • data

AviSynth plugins:

  • dgdecode
  • decomb

Profile Collections:

  • STx264

Это необходимый минимум утилит для создания AVC фильмов, в дальнейшем для расширения функциональности MeGUI вы всегда сможете установить остальные компоненты. Если автоматизированное обновление пройдет успешно - возрадуйтесь, вам повезло - все хостинги в данный момент работают стабильно, и целая толпа мелких файликов послушно собралась в рабочей папке MeGUI и ждет дальнейших распоряжений. Представляете, каково было бы разыскивать их в Сети все по одному! Если же что-то не скачается - что ж, придется организовать розыск в Яндексе и Google. Совершая автоматизированное обновление из MeGUI, вы убиваете и еще одного зайца - пути ко всем утилитам автоматически прописываются в настройках программы. Именно поэтому не стоит перемещать MeGUI в другую папку после совершения апдейта. В этом случае придется вручную переписывать пути в разделе Tools->Settings->Program Paths.

Инструменты подготовлены, идем дальше.

Подготовка контингента

Прежде чем приступать к кодированию, убедитесь, что все предварительные мероприятия выполнены: видео скопировано на жесткий диск, звуковая дорожка сохранена в отдельном файле (к ней мы вернемся чуть позже). Самый сложный этап работы с MeGUI состоит вовсе не в самом кодировании, а в подготовке видео в подходящий для энкодера х264.exe вид - а именно в создании .avs файла-скрипта для AviSynth'a. Большим подспорьем в этом не простом деле служит встроенный в инструментарий MeGui AviSynth Script Creator. С его помощью можно полуавтоматически создать скрипты для простой перекодировки основных типов входного видео. AviSynth Script Creator теоретически должен открывать любые файлы, декодируемые через DirectShow, то есть проигрывающиеся в Windows Media Player или GraphEdit, а также индексные файлы .d2v и файлы фреймсервера VirtualDUB'a (о создании двух последних см. Врезка: дополнительные фреймсерверы). Откройте MeGUI, отправляйтесь в Tools -> AviSynth Script Creator и укажите путь к подготовленному исходному файлу. На экране появится окно с вашим видео - ничего нового там еще не появилось, так что можете его смело свернуть. Теперь пробежимся по основным настройкам Script Creator'a:

Общие настройки MeGUI AVISynth Script Creator Настройки фильтров в MeGUI AVISynth Script Creator

Закладка "Options":

  • Input DAR: соотношение сторон входного видео. Для .vdr источников, ввиду обязательной квадратности их пикселей, оно всегда равно отношению горизонтального разрешения к вертикальному, как, впрочем, и для подавляющего большинства .avi файлов, но на анаморфных DVD и в файлах других контейнеров пиксель может быть и прямоугольным. Если ваш источник именно такой, укажите нужное соотношение.
  • Clever anamorphic encoding: умное кодирование анаморфа. Галку следует ставить, если вы собираетесь сохранить оригинальное соотношение сторон пикселя анаморфного источника, то есть сунуть x264.exe прямоугольники as is. Этот вариант предпочтителен в плане создания "точных копий" DVD-дисков с заделом на будущее. «Resize to mod16» предлагает автоматически изменить горизонтальное и вертикальное разрешение, придав им кратность 16-ти, «Overcrop to achieve mod16» делает тоже самое, обрезая края кадра, и последний вариант «Encode non-mod16» позволяет кодировать анаморфные источники с «кривым», не кратным 16ти разрешением. Более практичен другой вариант: добиться «квадратности» пикселей, уменьшив разрешение по одной из координат. В этом случае разрешение картинки уменьшается, за счет чего увеличивается плотность информации на каждый кодируемый пиксель, а всеобщая квадратность улучшает совместимость выходного потока с разными декодерами h264.
  • Crop: обрезка краев кадра. Нужна только в том случае, если в исходном видео присутствуют черные полосы или некачественные области у краев экрана (которые возникают при оцифровке VHS, например).
  • Resize: изменение разрешения картинки. Этот неприметный пункт требует огромного числа мышедвижений. Сразу поставьте галку suggest resolution - она обеспечит правильное соотношение сторон и кратность вертикального и горизонтального разрешений 16ти - и установите максимально возможное разрешение. Хоть очевидно, что выходное разрешение должно быть никак не более входного, распространено заблуждение, что оно при этом должно быть максимально возможным. Это не совсем так - ведь чем больше разрешение, тем больше пикселей требуется закодировать компрессору, тем меньше информации приходится на каждый из них, тем больше артефактов возникает в процессе их сжатия. Но и слишком маленькое разрешение тоже не сахар - низкая степень квантования, или, проще говоря, здоровые квадраты на экране не особенно радуют глаз. Истина - она где-то в середине, а чтобы ее отыскать воспользуемся старым знакомым Wabc bitrate calculator'ом (в MeGUI есть встроенный bitrate calculator, но на момент написания статьи самой нужной возможности в нем не было). Принцип работы Wabс калькулятора я уже описывал в давнишней статье о захвате, так что для экономии места позволю себе ограничиться общими словами. Задача - выбрать минимальный допустимый для качественного сжатия Quality Index (QI, то есть индекс количества информации, приходящийся на каждый пиксель картинки) вашего будущего ролика так, чтобы сохранить при этом максимальное разрешение. Чтобы определить этот самый индекс, нужно заполнить все остальные пустующие информационные поля Wabc калькулятора. Сразу вы можете указать Disk Space - желаемый объем ролика в килобайтах, его длительность и частоту кадров (она равна частоте кадров входного материала), а также разрешение, значение которого вы только что выставили в MeGUI. Битрейт, то есть количество информации, которое придется на секунду закодированного видео, считается, очевидно, как частное желаемого объема ролика в килобитах и его длительности в секундах. Все бы и хорошо, но вы, наверняка, обратили внимание, что битрейтов в Wabc калькуляторе не один, а два. И правда - звук кодируется совершенно независимо от видео, но в финальном-то файле он свое место займет! Выходит, чтобы определиться с битрейтом видео, нужно сначала определиться с битрейтом аудио. Если вы не аудиофил, и сжимаете не больно ценный с акустической точки зрения материал, можете смело ставить значение в пределах 64-256 kbps для каждой дорожки на свое усмотрение. Мое усмотрение по данному вопросу зависит от целей сжатия: если ролик планируется размещать в Сети, где важен каждый мегабайт – обойдутся юзеры и 64-мя kbps. Если же пережимается какой-нибудь DVD для себя любимого – тогда, конечно, не стоит экономить. Nero AAC, по сравнению с mp3, сделал огромный шаг вперед и таких скромных битрейтов оказывается достаточно для вполне приличного кодирования даже 6ти канального звука.
Wabc Bitrate Calculator
Если же вы неравнодушны к качественному звуку, или кодируете какой-нибудь концерт с DTS дорожкой, совершенно естественным видится желание оставить исходный звук без лишней рекомпрессии вообще. Должен вас разочаровать: к огромному сожалению, контейнер mp4 не поддерживает ни ac3, ни DTS звук. Но есть и хорошая новость: зато и то, и другое, и h264 поддерживает контейнер mkv. Маловероятно, что mkv-файлы когда-нибудь станут индустриальным стандартом, и уж тем более с таким смешанным содержанием вряд ли будут проигрываться бытовыми проигрывателями, зато с их воспроизведением на компьютере уже сейчас нет никаких проблем. Если вы готовы пожертвовать совместимостью в пользу звука - дерзайте, считайте суммарный битрейт всех нужных оригинальных звуковых дорожек и вписывайте его в Wabc. >><< Ура! Теперь вы можете посчитать битрейт видео (запомните его, и выбранный аудио битрейт!), а, стало быть, и первое приближение Quality Index'a с максимальным возможным разрешением картинки. x264 обеспечивает практически неотличимое от оригинала качество при QI в пределах от 1200 до 2000, в зависимости от исходного фильма. Если получившееся у вас значение QI меньше 1200, чуть-чуть уменьшите разрешение в MeGUI и пересчитайте QI заново. Когда QI окажется где-то в районе 1200-1400 остановитесь - позднее можно будет определить оптимальное разрешение экспериментально.

Закладка "Filters":

  • Deinterlacing: перевод чересстрочной картинки в прогрессивную, или, по-простому, ликвидация эффекта "расчески". После нажатия магической кнопки "Analyse", MeGUI возьмется определить тип вашего видео. В большинстве случаев, когда источник чисто прогрессивный или чересстрочный, MeGUI верно определяет тип видео. А вот когда я сжимал документальный фильм с вкраплениями кадров старой кинохроники (естественно прогрессивными) на фоне общей чересстрочности материала, MeGUI схалтурила и предложила страшный алгоритм деинтерлейсинга, который путал полукадры на границе смены планов. Мало того, что алгоритм этот работал крайне медленно, так в итоге все пришлось пережимать заново. Так что обязательно проверьте, правильно ли MeGUI выбрала метод deinterlace (это можно будет сделать перед началом непосредственно кодирования), и в случае чего исправьте скрипт вручную, установив стандартный деинтерлейс командой FieldDeinterlace(blend=false).
  • Noise Filter: шумодав. Следует отключить только в случае сжатия очень качественного материала (например, оригинального двухслойного DVD, или HDTV-рипа). В остальных случаях стоит выбрать ту или иную степень шумоподавления экспериментально, руководствуясь простым правилом - работа шумодава не должна быть заметна глазу. Ведь шумодав (этот, по крайней мере) нужен вовсе не для улучшения визуального качества картинки, а для адаптации ее для компрессора, который может болезненно воспринимать те микрошумы, которым человеческий глаз не придаст ни малейшего значения.

Все остальные настройки 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 напротив выбора кодека и в открывшемся окне укажите битрейт, который вы рассчитали, выбирая разрешение изображения. Все остальные настройки кодека можно оставить по умолчанию, доверившись авторам профайла, но если жажда исследования в вас до сих пор не погасла, можете почитать о них подробнее тут  (на английском языке, правда).

Итак, теоретически все готово для начала кодирования. Нажмите сложнопроизносимую по-русски кнопку Enqueue, в результате чего в закладке "Queue" главного окна MeGue в очередь встанут два прохода кодирования видео. Во время первого прохода кодек «присматривается» ко входному материалу и «размышляет», как бы лучше размазать по нему доступные мегабайты. Результаты «размышлений» при этом записываются во временный файл статистики. Во время второго прохода происходит непосредственно кодирование материала.

Для запуска обоих проходов служит, как не трудно догадаться, кнопка "Start", после нажатия которой, ваш компьютер озадачится подобно двоечнику на экзамене. Первый проход пробежит сравнительно шустро (см. таблицу производительностей), а вот на втором проходе призадумается и самый современный процессор. Естественно, вы должны быть абсолютно уверены в стабильности работы вашего компьютера, а лучше всего и вовсе оставить компьютер наедине с его думами - поставить в очередь на кодирование сразу фильмов пять, да и дернуть на дачу на недельку.

Кодирование аудио

Звук, в принципе, можно пережать в той же MeGUI, но мне, честно говоря, не нравятся ее возможности по настройке командной строки neroAacEnc.exe, так что для этих целей я использую foobar2000.

Конвертирование AAC с помощью Foobar 2000
Foobar2000 в качестве GUI к neroAacEnc.exe – это самый простой, интуитивный и быстрый способ сжатия звука. К пережатию звука Foobar2000, вообще говоря, не имеет отношения. Ведь это просто мощный проигрыватель аудиофайлов, но с оригинальной концепцией: минимум интерфейсных излишеств - максимум настроек. Плагинная система позволяет собрать из "каркаса" аудиоплеера почти все, что душе угодно: от тюнера для подкастов до программы для нарезки болванок. Собрать аудио-конвертер совсем просто: Foobar2000 умеет передавать в stdin CLI-кодера все, что может декодировать, а декодировать он может практически все, что бывает на свете - надо только найти в Сети соответствующий плагин. Кроме того, в foobar'овский конвертер встроен расширенный интерфейс управления CLI-кодерами, позволяющий самостоятельно определить сценарий обработки файлов для каждого из CLI-конвертеров, а также подключать новые конвертеры. Таким образом, с одной стороны, вы можете использовать один хорошенько настроенный Foobar2000 для компрессии любых источников во все актуальные звуковые форматы, а, с другой стороны, как только появится новый CLI-компрессор, изучить его команды, незамедлительно подключить его к своему Foobar'у и с комфортом использовать, не дожидаясь, пока кто-нибудь еще напишет для него полноценный GUI. Так что познакомиться с Foobar2000 в любом случае полезно.

Не пугайтесь, для сегодняшних задач это все совершенно не важно, никакие сценарии создавать не придется, так как, начиная, если не ошибаюсь, с версии 0.9.2, в дистрибутив Foobar2000 встроена поддержка NeroAac. Единственное, кроме дистрибутива, что вам понадобится для сжатия в 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) и указав расчетный битрейт. Готово? Нажимайте ОК, процесс пошел. Не правда ли, проще чем с видео?

Сведение

В итоге долгого процесса размышлений компьютера, у вас, теоретически, должно получиться два файла - один со звуком, другой с видео. Это уже почти финальный результат, остался последний шаг. "Замуксить", то есть свести воедино звук и видео можно из той же MeGui. В разделе Tools -> Muxer имеются две утилиты mkv muxer и mp4 muxer. Первая предназначена для создания файлов в контейнере mkv, который имеет смысл использовать только ради сохранения DTS или AC3 звука, вторая - для mp4 файлов на все остальные случаи. Если вы успешно проделали все предыдущие действия, то, несомненно, с двумя последними утилитами вы легко разберетесь самостоятельно. Кстати, обратите внимание, что в муксерах есть возможность добавить в итоговый файл чаптеры и субтитры. Чаптеры можно задать в 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’a для файлов mp4. Версию 1.1 найти будет , а если вы законопослушны, вы всегда можете ее купить на сайте разработчика . Аналогично пропал и отличный декодер звука – на официальном сайте разработчика перед публикацией статьи я вообще не нашел упоминания о нем.

После того, как декодеры и сплиттер будут установлены, .mkv и .mp4 файлы начнут открываться в любом DirectShow проигрывателе, хоть даже в Windows Media Player 10. AC3 и DTS звук, чаптеры, переключение аудиоканалов, и субтитры, правда, заработают только в каком-нибудь более приличном плеере вроде Classic Media Player.

В результате

Довольно почешите живот - только что вы создали ролик с использованием самых прогрессивных на сегодняшний день технологий, в результате чего получили оптимальное соотношение качество/размер. Я бы на вашем месте, ни за что не поверил бы предыдущему высказыванию, а потому специально положил на свою домашнюю страничку несколько видеофрагментов, закодированных точно по вышеизложенной методике.

Если вы заинтересовались процессом, и чувствуете, что информации этого краткого обзора недостаточно, зайдите сюда:

  • www.doom9.org  - основной международный сайт, посвященный обработке видео. Многие авторы описанных сегодня программ и утилит собираются и обсуждают свои разработки тут. Здесь можно почерпнуть любую информацию, но, разумеется, только на английском языке;
  • forum.mediatory.ru  - основной русскоязычный форум, посвященный обработке видео;
  • тема на форуме iXBT , посвященная авторскому сборнику утилит для создания AVC-видео, основанном на MeGUI. Сборник удобен при отсутствии широкополосного доступа к Сети, так как почти все необходимое находится внутри одного архива;
  • mewiki.project357.com  - детальное описание настроек MeGUI на английском языке.

Таблицы производительности:

Приблизительная оценка мощности ЦП, необходимой для декодирования h264 при использовании декодеров от CoreCodec:

Разрешение:Требуемый ЦП:
4ХХх3ХХPIII 500 MHz
7XXx5XXPIII 1 GHz
HDTV 720PIV 2.4-2.
HDTV 1080PIV 3.4-3.6 GHz

Производительность при пережатии MPEG2 720x480 средней динамики по описанной методике. Фильтры AVISynth - FieldDeinterlace(blend=false), битрейт – 1000 kbps.

ЦП:Скорость пережатия (fps):
PIV 3.06@3.33 (1-й проход)22
PIV 3.06@3.33 (2-й проход)2,6
Celeron 2.4@3.2 (1-й проход)11
Celeron 2.4@3.2 (2-й проход)1,5

Дополнительные фреймсерверы.

В некоторых случаях, прежде чем подавать видео на вход 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 в режим frameserver'a (File -> Start Frame Server). Обратите внимание, что VirtualDUB'овский фреймсервер требует однократной установки в систему файлом auxsetup.exe из папки с VirtualDub.exe. В результате будет создан .vdr файл, который опять же "съест" мегуевский AviSynth Script Creator. Есть способ лучше  для простой нарезки видео!

Создание .avs скриптов вручную

Для продуктивной работы с MeGUI желательно понять базовые приемы языка AviSynth. Задача не простая, но приложенные усилия компенсируются полной прозрачностью процесса кодирования и широчайшими возможностями по преподготовке видео. Вы сможете создавать любые скрипты, с использованием любых встроенных и внешних фильтров обработки изображения, подавая на вход любое видео – вне зависимости от произведенных действий x264 получит на вход стандартный поток. Для AVISynth написано и свободно распространяется в Сети невероятное количество плагинов для обработки изображения и для декодирования всех популярных видеоформатов. Следует, однако, помнить, что для совместимости с x264.exe нужно соблюдать несколько условий:

  • разрешение сгенерированного в результате видео должно быть кратно как минимум 16ти, как по горизонтали, так и по вертикали;
  • картинка должна быть прогрессивной (в рамках «совместимости» с этой статьей, по крайней мере);
  • х264 понимает на входе видео в «родном» для MPEG цветовом пространстве YUV 4:2:0 (для перевода в это пространство в скриптах AVISynth используется команда ConvertToYV12).

Дополнительную информацию по созданию AVS-скриптов можно найти в прилагающейся к AVISynth документации и тут .

Ликвидация рассинхронизации.

Иногда при создании «бэкапов» не вполне «правильных» DVD может возникать рассинхронизация видео и звука. Происходит это из-за того, что звуковая дорожка в исходном материале может быть немного сдвинута относительно видео ряда. При воспроизведении, плееры компенсируют этот сдвиг, но после demux’а через DGIndex мы получаем просто два файла – звуковой и видео, отношения между которыми никак не прописаны. Заботливый DGIndex! Посмотрите внимательно на звуковые файлы, которые он создает. В длинном имени файла содержится всякая полезная информация о формате заключенном в нем звука, и тут же указана задержка звуковой дорожки относительно видео в миллисекундах. Обычно она равна 0, но предположим, к примеру, что задержка эта 1000 мс.: DELAY 1000ms.

Идем на сайт некоего jsoto  и скачиваем очень интересную утилику – генератор тишины. Прелесть его в том, что он «кует тишину» в любом принятом на DVD формате. Выбираем параметры будущей тишины так, чтобы она получилась «совместима» с имеющимся аудиорядом. Идентичен должен быть сам формат (AC3, DTS, LPCM или MPEG1 layer 2), частота дискретизации, глубина квантования, число каналов и битрейт. Указываем длительность 1000 мс. и сохраняем. На винчестере появляется довольно сюрреалистическая штука – файл с многоканальной тишиной. Открываем его в Foobar2000, и следом добавляем в плейлист оригинальный файл. Выделяем оба файла, и по правому клику выбираем пункт «Convert to Single File». Все, дальнейшие действия производятся в рамках описанной методики.

DVD с отрицательным сдвигом мне ни разу не встречались, но, возможно, и такое бывает. В этом случае придется сгенерировать «пустоту» - то есть черное видео нужной длительности – и добавить его перед видеорядом. Сделать это проще всего в AVISynth, для чего вполне хватит встроенных фильтров, каждый из которых подробно описан в его документации.

А еще можно сделать так: mp4box -add D:\audio.aac:delay=360 D:\video.mp4 , то есть добавить сдвиг. Но при этом уменьшается совместимость с DirectShow сплиттерами.

Благодарю RBF за непреднамеренную помощь в написании этого материала.




Оставить комментарий 


Ваше имя:
->