Продолжу начатый мною обзор кодеков. Рассмотрим теперь кодек DivX. Примерно 4 года назад появился кодек DivX3. Пользователи очень заинтересовался этим кодеком. Основание тому было самое прямое. DVD диски в то время были очень дороги (да и DVD проигрыватели были не из дешёвых), а после сжатия DivX3 фильм влезал на обычный CD диск (который был значительно дешевле).
Качество же после сжатия DivX3 было довольно не плохим (при продолжительности фильма не более 1,5 часа). Если "посмотреть в корень", то DivX3 был взломанной версией кодека Mpeg4 от компании Microsoft. После этого взлома кодек Mpeg4 стал общедоступным. Для сжатия при помощи него была написана программа - VirualDub. Но качество сжатия оставляло желать лучшего, и программисты пошли дальше. Эта программа была доработана и на свет появилась NanDub, которая была заточена исключительно на работу с DivX3 и Mpeg4. Какое-то время кодек DivX3 оставался без конкурентов (мы не смотрим на QuickTime, RealMedia, WMV, качество их было ниже). На взломе Mpeg4 было решено не останавливаться, и на свет начали появляться кодеки DivX4. Было выпущено огромное множество релизов DivX4 (13 штук). Кардинально в них ничего не изменялось, просто вносились небольшие правки.
Основной идеей был уход от клейма "Mpeg4" и в то же время оставаться ISO совместимым кодеком. Итак, в начале 2002 года появился кодек DivX5, который шёл как независимый продукт, и был ISO совместим. PRO версии начали продавать. DivX5 постоянно совершенствовался и развивается до сих пор. На данный момент вышла версия 5.1.1. Вот её то мы и рассмотрим.
Про DivX5.1.1 могу сказать одно - это очень медленный кодек, но от прогресса никуда не уйдёшь, как и корпорация Microsoft заставляет нас переходить на NT ядро, компания DivX заставит перейти на последние релизы.
Как обычно, для кодирования при помощи DivX5 будем использовать программу VirtualDub. Как попасть в настройки кодека наверное уже все знают, посмотрим на интерфейс самого кодека:
На вкладке "General" находятся настройки кодека, относящиеся к самому кодеку. Начнём сверху. "Selected profile". Здесь можно произвести настройку профиля работы кодека. В качестве настроек, управляемых из профиля выбраны: Quarter Pixel, GMC (Global Motion Compensation), Bidirictional Encoding, Video Resolution и Video frame rate. Теперь обо всём по-порядку. Нажав на копку "Select profile Wizard" попадаем в это меню:
Здесь можно выбрать какой-нибудь профиль или отключить их и произвести все настройки на своё усмотрение. Чекбокс "Disable profiles" отключает использование профилей. При этом, выдаётся предупреждение о том, что полученное видео может не проигрываться на устройствах, совместимых с Divx (аппаратных проигрывателях). Посмотрим, что повлечёт за собой включение любого из этих профилей или их отключение.
При выборе любого из профилей или их отключении, мы можем нажать на кнопку "Далее" и посмотреть на настройки, которые мы можем произвести далее:
Опции "Use Quarter Pixel" и "Use GMC" могут быть доступны только в случае отключения профилей на предыдущей странице.
Опция "Use Quarter Pixel" включает вычисление координат с точностью до четверти пикселя. Это повышает чёткость особенно на низких разрешениях, но вместе с этим, добавляет шум на изображение. Естественно, просто так это не происходит. Включение Quarter Pixel повышает загрузку процессора и увеличивает поток, используемый для этого. Включать эту опцию я не рекомендовал бы.
Опция "Use GMC" включает Global Motion Compensation - компенсацию движения. Она начинает проявлять своё действие, когда идёт панорамирование, наезд или отъезд на объект, а так же при вращении. Задумка конечно хорошая, но использовать я так же не рекомендовал бы.
Далее, посмотрим, что даёт выбор какого-либо профиля. По большому счёту, я не люблю пользоваться профилями - они вносят определённые ограничения в работе. Включение профиля "Handheld" подразумевает кодирование с параметрами, соответствующим переносным устройствам. Рекомендуемое максимальное разрешение для этого профиля 176*144 при 15 кадрах в секунду. При этом, должны быть отключены B -frames и сжатие чересстрочного материала. Максимальный средний битрейт для этого профиля может быть 128 килобайт в секунду.
Включение профиля "Portable" подразумевает кодирование с параметрами, соответствующим портативным устройствам. Рекомендуемое максимальное разрешение для этого профиля 352*240 при 30 fps и 352*288 при 25 fps. При этом, могут быть включены B -frames и отключено сжатие чересстрочного материала. Максимальный средний битрейт для этого профиля может быть 768 килобайт в секунду.
Включение профиля "Home Theater" подразумевает кодирование с параметрами, соответствующими аппаратным проигрывателям, игровым приставкам и другим устройствам, которые могут проигрывать Divx. Рекомендуемое максимальное разрешение для этого профиля 720*480 при 30 fps и 720*576 при 25 fps. При этом, могут быть включены B -frames и сжатие чересстрочного материала. Максимальный средний битрейт для этого профиля может быть 4000 килобайт в секунду.
Включение профиля "High Def" подразумевает кодирование с высоким разрешением. Воспроизведение этих материалов будет возможно только на компьютере. Рекомендуемое максимальное разрешение для этого профиля 1280*720 при 30. При этом, могут быть включены B -frames и сжатие чересстрочного материала. Максимальный средний битрейт для этого профиля может быть 8000 килобайт в секунду.
Если мы включим какой-либо профиль, то нужно произвести настройку кодека в соответствии с этим профилем:
Для профилей, где доступен выбор "Use Bidirectional Encoding", лучше сделать этот выбор. Это включает работу кодека с использованием B-frames. Что это такое, я подробно описал в статье про кодек Xvid. Использование этого типа кадров даст небольшой прирост качества.
В поле "Video resolution" нужно выставить разрешение, с которым будет выходное видео. Пользоваться этой функцией я не рекомендовал бы. Дело в том, что не известно, какой метод интерполяции при этом используется, а иногда это бывает важно. Лучше производить изменение размера входящего видео в соответствии с теми размерами, которые нужны для работы выбранного профиля.
В поле "Video frame rate" выставляется частота выходящего видео, к которой будет приведено входящее видео. Опять же, лучше это делать программными средствами обработки до кодека, а не средствами кодека.
Эти функции сделаны в составе кодека "для ленивых". Кто не заботится о высшем качестве получаемого материала, а хотят быстрых результатов.
Итак, мои рекомендации по выставлению профилей. Если вы производите сжатие для высококачественного воспроизведения на компьютере или аппаратном проигрывателе, то нужно выбрать "Disable profiles" в первом окне выбора профилей и "Use Bidirectional Encoding". Больше вам ничего не потребуется для получения видео, которое будет воспроизводится без проблем.
Теперь, вернёмся на вкладку "General" главного окна настройки кодека:
Если ранее у вас стояла другая версия кодека DivX или вы что-то сделали, сами не зная что (да и вообще, перед началом работы не помешает), нажмите кнопку "Restore defaults", которая находится внизу этого окна.
Теперь, пойдём смотреть на это окно сверху вниз, в соответствии с нумерацией.
1 Ползунок "Performance/Quality" позволяет выбирать между скоростью кодирования и качеством получаемого видео. В зависимости от выбранного профиля работы, можно выбрать четыре профиля работы:
Положение "Fastest" не производит анализ на наличие движения в видеоматериале. Это напоминает работу MJPEG кодеков, когда сжатие происходит внутри кадра. Короче говоря, кодек превращается в кодек с пространственным сжатием. При включении этого режима невозможна работа следующих функций: Quarter pixel, Global motion compensation, Bidirectional encoding, Psychovisual enhancement, MV re-use, Scene change threshold.
Положение "Standard" работает аналогично самому медленному режиму кодека DivX 5.05. В этом режиме работают все функции кодека.
Положение "Slow". В этом режиме кодер работает уже значительно медленнее (примерно в 4-5 раз), чем в режиме "Standard". Но по заявлению разработчиков DivX в нём изменён механизм оценки битрейта, что должно повлечь улучшение качества. По результатам моих испытаний, трёхпроходное видео в режиме "Standard" проигрывает по качеству двухпроходному в режиме "Slow". Это режим наиболее оптимальный.
Положение "Slowest". Как можно судить из названия, это самый медленный режим кодека. При этом качество должно значительно повысится. Реально же, пользоваться этим режимом вряд ли стоит.
2 "Variable bitrate mode" В выпадающем меню есть возможность выбора режима работы кодека:
"1-pass" - это однопроходный режим работы кодека с переменным битрейтом. Для этого режима задаётся средний битрейт, которого должен придерживаться кодек. Реально, битрейт получится на усмотрение кодека. Этот режим можно рекомендовать для захвата и для кодирования в очень сжатые сроки. Но сам процесс захвата в Divx не является удачной идеей. Обоснование этого я написал в статье про захват.
"1-pass quality-based" - это однопроходный режим работы кодека с переменным битрейтом, но постоянным квантизером. Для этого режима задаётся квантизер, который будет возможно выставить немного ниже данной вкладки:
Квантизер задаёт коэффициент потерь в качестве видео. При выставлении его в постоянное значение, качество видео будет одинаково на протяжении всего фильма, не зависимо от количества движения. Уменьшение квантизера ведёт к улучшению качества картинки. Этот режим хорош для захвата, но его минус - абсолютно неуправляемый и не прогнозируемый размер получаемого видео. Эта вкладка будет доступна только в случае отключения работы с профилями.
"Multipass, 1 st pass" - Это первый проход двухпроходного режима. Про двух проходный режим я так же подробно описал в статье про кодек Xvid. Вкратце напомню. Для улучшения качества кодирования и 100% попадания в битрейт, нужно применять двухпроходное кодирование. В течении первого прохода, происходит сбор статистики о видеоматериале и запись в файл статистики. Во время второго прохода, кодер, беря информацию из файла статистики, производит сжатие видеоматериала. Для первого прохода задаётся битрейт, с которым будет кодировтся фильм.
"Multipass, n th pass" - Это следующий после первого прохода режим. Если мы поставим его после первого прохода и уберём галочку "Update log file" в поле 5, то можно будет на этом закончить - мы получим готовый к просмотру файл видео в двухпроходном режиме. А можно ещё немного улучшить качество сжатого материала. Для этого, оставляем на месте галочку "Update log file" (которая стоит по-умолчанию) и делаем второй проход. При этом происходит обновление файла статистики. Далее, повторяем этот проход, но со снятой галочкой "Update log file". Это уже получится не двух проходное видео, а трёх проходное. Для этого режима задаётся битрейт, с которым будет кодироваться фильм (А) и максимально достижимый битрейт на динамических сценах (В).
В целом, при заданном профиле, максимально достижимый битрейт (В), вычисляется автоматически и его нельзя изменить вручную. При отключённых профилях, он так же вычисляется автоматически и его можно исправить, но нет смысла это делать. Напомню, как лучше всего производить много проходное видео. Я все операции делаю в программе VirtualDub, как в наиболее удобной для себя. После настроек фильтров в VirtualDub нужно переходить к настройке кодека. Покажу конкретную последовательность действий при сохранении. Для того, что бы кодировать двух проходное видео, нужно записать скрипт в VirtualDub и запустить его на исполнение. Самого скрипта вы писать не будете, только произведёте определённые действия в VirtualDub. Итак, добавление первого прохода в скрипт:
После этих действий VirtualDub запишет все параметры программы и кодека в скрипт. Для добавления второго прохода в скрипт, нужно произвести такие действия:
После этих действий, у вас будет готов скрипт, при запуске которого из VirtualDub, будет произведено двухпроходное сжатие кодеком DivX5.1.1 вашего видео. При сохранении не обязательно присваивать одно и то же имя для первого и второго проходов. Во время первого прохода в этот файл вообще ничего не пишется, он нужен для записи каких-то промежуточных данных.
Теперь узнаем, как посмотреть, что занесено в наш скрипт и как запустить его. Для того, что бы посмотреть скрипт, нужно зайти в меню "File"->"Job control…" или просто нажав клавишу F4.
Если в вашем скрипте есть какие-то лишние записи, то можно их удалить выбрав их и нажав на кнопку "Delete". Убедились, что в скрипте нет лишних записей и есть то, что нам надо. Теперь, запустить его можно прямо из этого окна, но процесс при этом очень не наглядный. Мне гораздо больше нравится запускать напрямую скрипт из VirtualDub. Для этого, из меню "File"->"Run script…" запускаем файл "VirtualDub.jobs", который находится в той же папке, что и сам VirtualDub. После окончания сжатия, нужно будет удалить этот файл или почистить скрипт из окна "Job control". Но вернёмся к настройкам кодека.
3 "Encoding bitrate" Ползунком мы выставляем битрейт с которым хотим произвести сжатие. В окошке можно набрать этот битрейт вручную. Как посчитать битрейт для вашего видео я описал в статье "Дополнения по Mpeg - видео". Если быть кратким, к этому есть два подхода:
4 "Bitrate modulation". Ползунок этой настройки позволяет распределение битрейта в зависимости от количества движения в фильме. Работает это таким образом: Дело в том, что формат Mpeg4, который является основой DivX, регистрирует изменение картинки. Для тех мест, где есть много движения, нужно больше битрейта. Параметр "Bitrate modulation" позволяет выставить, на сколько больше битрейта будет выделено на динамичные сцены, по отношению к другим кадрам. Если же, у нас весь фильм идёт достаточно монотонно, то можно заставить кодер не отрабатывать изменение количества движения. Смещение ползунка в сторону "high-motion" повышает выделение битрейта на динамические сцены. Смещение ползунка в сторону "low-motion" снижает выделение битрейта на динамические сцены. Какие-либо конкретные рекомендации по использованию этого параметра я не даю. Для каждого фильма этот параметр будет сугубо индивидуален. Могу лишь сказать, как определить нужно ли вам его использовать.
Запустите на просмотр фильм после сжатия. Найдите и посмотрите, как выглядят динамические сцены по отношению к статическим. Если динамика распадается на квадраты, теряет чёткость по сравнению со статикой, значит вам нужно сдвигать движок "Bitrate modulation" в сторону "high-motion". Может возникнуть и другая ситуация, когда на динамические сцены не желательно выделение большого битрейта. Например, подготовка видео к выкладыванию в Интернет. В этом случае, можно пожертвовать динамическими сценами ради уменьшения потока. Другой пример. У вас есть съёмки на которых гораздо важнее детали на статическом изображении, чем перемещение камеры. В этих случаях вам потребуется смещение параметра "Bitrate modulation" в сторону "low-motion".
5 "Multipass encoding files". В этом разделе находятся несколько опций, влияющих на многопроходное кодирование. В разных режимах работы есть доступные и недоступные галочки. Я буду говорить только о доступных галочках. Начну слева. Первая доступная галочка появляется если кодек находится в режиме работы " Multipass, n th pass". Это "Update log file". Как я уже объяснил выше, эта функция нужна для включения многопроходного режима (вместо двух проходного). По-умолчанию, она зачем-то включена, что очень не удобно. При двухпроходном кодировании обязательно следите за тем, что бы она была отключена. Под этой функцией находится окошко выбора файла статистики. Если у вас возникла необходимость поменять имя этого файла, то можно это сделать, но нужно помнить, что если вы хотите подсунуть для второго прохода готовый файл статистики, он должен быть создан при тех же условиях, что будет делаться второй проход (включены те же фильтры, с теми же настройками, и при тех же настройках кодека).
Вторая доступная галочка появится в режиме работы "Standard" и "Multipass, 1 st pass". Это будет галочка "Write MV file". Если вы поставите эту галочку, то в файл будет записана статистика работы кодека (информация о векторах смещения) и при втором проходе будет возможно ей воспользоваться. При включении режимов "Standard" и "Multipass, n th pass" на этом же месте появится опция "Read MV file". Она включает чтение этого файла со служебной информацией кодека. Эта функция ускоряет работу кодека, но при этом незначительно ухудшается качество сжимаемого видео. Ниже есть окошко выбора файла, в который будет писаться эта статистика. По результатам моих испытаний, ускорение работы кодека незначительное (5-10%), при этом различие в качестве получаемого видео есть. Я бы не рекомендовал использовать эту функцию.
6 Под этой цифрой находится единственная кнопка - "Settings". При нажатии на неё появится следующее окно:
Здесь есть только 2 интересующие нас настройки. Они помечены красным.
"Do not Prompt with errors and warnings" - этот пункт отключает подсказки и сообщения об ошибках. Если вы хорошо знаете, что делаете, то этот пункт будет вам только мешать.
"Disable the feedback window" - здесь производится отключение окна статистики во время кодирования. Оно появляется только в момент работы кодера и выглядит следующим образом:
Сразу предупрежу, что использование этого окна значительно замедляет работу кодека. Если же вы хотите наблюдать за параметрами кодирования, но смотреть на кадры вам не так важно, то можно отключить вывод изображения на эту панель. Это можно сделать галочкой "Show picture" (обозначено цифрой 1). При этом, скорость работы кодека повысится.
Под цифрой 2 есть два поля:
Под цифрой 3 в выпадающем меню можно выбрать, что будет показываться на графике.
Можно вообще отключить вывод любого графика ("Show graph"). Среди режимов отображения:
В целом, это только информационная панель и на процесс кодирования она не оказывает никакого влияния.
Вернёмся же к главному окну настройки кодека. На вкладке "General" мы всё рассмотрели. Перейдём теперь на вкладку "Video".
Здесь мы можем произвести настройку кодека, относящуюся к обработке видео. Рассмотрим эту закладку сверху вниз:
Среди общих рекомендаций выставления разрешения получаемого видео можно сказать, что нужно стремиться, что бы высота делилась на 16, а ширина на 32.
Для пересчёта разрешения видео существуют несколько методов:
Алгоритм работы "Bicubic" на много более качественный, чем "Bilinear", но при уменьшении картинки это качество зачастую не востребовано. Таким образом, для уменьшения картинки можно рекомендовать "Bilinear" режим, а для увеличения картинки "Bicubic".
"Pre Processing Source" - при включении этой опции включается подавитель шума. Он работает как во временной области, так и в пространственной. Работа этой опции видна на глаз - происходит сглаживание картинки. Для материалов, кодируемых в DivX, это может принести как пользу, так и вред. Польза от сглаживания картинки состоит в том, что кодеку будет проще работать и для получения качественного видео на выходе кодека потребуется меньший битрейт. Вред от сглаживания картинки состоит в том, что при этом теряются мелкие детали изображения и происходит размытие границ изображения. В положении "Extreme" происходит максимальное сглаживание, в положении "Light" - минимальное сглаживание. Включать эту функцию я вам не рекомендую. Для подавления шумов написано много фильтров которые подключаются к программам Virtualdub и Avisynth. Они работают на много более качественно.
"Scene change threshold" - эта функция отлавливает порог изменения сцен, при котором нужно вставлять ключевой кадр. Как я уже говорил, кодер, при сравнении соседних кадров, разбивает их на текстуры и перемещаемые блоки. Если в предыдущем кадре не нашлось похожего блока, он регистрируется как новый блок. При поиске порога изменения сцен производится подсчёт количества этих блоков. Если их количество будет больше, чем выставлено в "Scene change threshold", то кадр будет закодирован как ключевой. Если выставить это значение слишком низким, то кодер будет часто отлавливать изменение сцен и сжимать кадры как ключевые, а это неблагоприятно скажется на размерах получаемого видео. Рекомендую ставить не менее 20%. Эта функция работает только если движок "Performance/Quality" будет выставлен в положение "Fastest" или "Standard". В положении "Slow" и "Slowest" работает собственный детектор сцен.
"Max key frame interval" - здесь можно выставить максимальное количество дельта кадров между ключевыми. Поясню, как это работает. Допустим, у нас идёт кодирование и после ключевого кадра подряд идут только дельта кадры. По прохождении количества кадров выставленного в "Max key frame interval" ключевой кадр будет выставлен автоматически. По умолчанию стоит 300, что соответствует 10-12 секундам, в зависимости от частоты кадров кодируемого материала. Я же рекомендую ставить 50-100, что соответствует 2-4 секунды, это несколько увеличивает размер конечного файла, но вместе с этим облегчает поиск нужного фрагмента, и улучшает качество (ведь в течение этого интервала кодек не показывает кадр целиком, а получает из ключевого, путём передачи изменений оного, при этом возможны любые искажения).
"Source Interlace" - В этом пункте определяется, какое видео будет у нас на входе и каким образом кодек должен обрабатывать это видео. Имеет 3 положения: "Encode as progressive" - на входе обычное прогрессивное видео и с ним ничего не делается кроме сжатия.
"Encode as interlaced" - на входе кодека чересстрочное видео. Для сжатия чересстрочного видео кодек включает сжатие по полям.
"Deinterlace all frames" - на входе кодека чересстрочное видео. Кодек конвертирует из чересстрочного видео в прогрессивное. Алгоритм работы в этом режиме неизвестен. Поэтому, включать этот режим для деинтнрлейса я бы не рекомендовал. Лучше пользоваться фильтрами VirtualDub или Avisynth.
При включении режима "Encode as interlaced" появляется ещё одна опция - "Top field first". Включать вам её или нет зависит от кодируемого материала. Если на входе кодера чересстрочный материал с первым верхним полем, то необходимо включить эту галочку. Для того, что бы определить, какого рода у вас материал на входе, нужно воспользоваться утилитой Avisynth.
Для этого, в любом текстовом редакторе пишем такой текст:
avisource("...путь...My_VHS.AVI")
AssumeTFF()
SeparateFields()
и сохраняем его с расширением AVS. Теперь, если у вас в системе установлен Avisynth, то после открытия этого скрипта в любом видео проигрывателе, получите картинку в 2 раза ниже, чем она есть на самом деле. Посмотрите внимательно на горизонтальные движения. Если они происходят без рывков, значит ваше видео "Top field first". Если же движения идут рывками, то ваше видео "Bottom field first" и для кодирования этого материала нужно снять галочку "Top field first".
На этом я закончу обзор кодера DivX версии 5.1.1. Надеюсь, что моя статья поможет вам разобраться с настройками этого популярного компрессора и вы сможете быстро приступить к самостоятельной работе.