Оригинал материала: https://3dnews.ru./170036

DivX. Основы создания видео на компьютере

Стр.1 - Кодирование.

Автор: Евгений Сучёв

Многие из нас задумывались над обработкой видео на компьютере, но не все решаются этим заниматься. Причин много: на это уходит много времени, нужны специальные знания и подготовка, а так же программы, которые как правило выполнены на английском языке… но есть аргумент и "ЗА" - цифровое видео не подвержено старению, а при наличии опыта делается всё довольно быстро.

Эта статья не является панацеей. Создание видео на компьютере процесс творческий. Можно использовать любые программы, которые вам удобны. Статья написана от первого лица, и в ней говориться каким образом привык это делать я. Эта статья - попытка преподнести неподготовленным пользователям основы создания видео на компьютере.

C чего начать

Источника видео мы касаться не будем. Это может быть DVD, захват видео с TV тюнера, и.т.далее… Подробно об этом я напишу в более поздних статьях. Со всего этого мы, как правило, имеем файлы очень больших размеров. Наша задача, сократить размеры этих файлов. Как правило, ограничителем служит объём CD диска. Это делается при помощи программ кодеков.

По поводу копирования DVD дисков на компьютер написано много статей, например вот здесь. Захват TV и входа видео можно делать с помощью программы Virtualdub, я не буду на этом останавливаться в этой статье.

Обрабатывать изображение можно разными программами, самые распространённые - Adobe Premiere, Ulead Media Studio, Pinnacle Studio... Здесь на вкус и цвет. Если хочется видеоэффектов, наложения титров, то вам конечно, без выше перечисленных программ не обойтись. Но я пользуюсь Virtualdub - маленькая, быстрая, бесплатная, достаточно функциональная для простого кодирования в DivX или любой Mpeg4 клон, довольно простая и к тому же постоянно обновляется.

Процесс кодирования можно разделить на два этапа: Процесс кодирования видео и процесс кодирования аудио. Многие программы делают это за один раз, но это не самый лучший вариант. После такого кодирования мы получим всё не самого лучшего качества. Самого высокого качества мы можем добиться только при раздельном кодировании аудио и видео. Я использую для этого специализированные программы: VirtualDub или NanDub (предназначены для кодирования видео), RazorLame или oggdropXPd - кодирование аудио. Можно использовать и другие программы, я написал про те, которыми привык пользоваться. Про кодирование аудио мной написано в другой статье, поэтому подробно на этом процессе я останавливаться не буду.

На подступах к видео

Жать будем, конечно же, в формат DivX. Почему конечно? Всё дело в распространённости. Один из реальных конкурентов это Xvid, но его основной недостаток - это постоянное морфирование. По качеству, кодек Xvid показывает более высокие результаты, но вместе с видео файлом придётся выкладывать и кодек Xvid, которым это закодировано. Кодеки Xvid не совместимы ни в одну сторону, это их основной минус.

Основным инструментарием будет NanDub или Virtualdub (в зависимости от того, каким кодеком будете кодировать). Версий кодека DivX выпускалось более десятка, поэтому может возникнуть вопрос: Каким кодеком пользоваться? DivX3 - это один из первых релизов, DivX 5.05 последний релиз. Были так же промежуточные релизы DivX 4. Что лучше?

Начну с начала. Первым релизом кодека DivX был по сути взломанный кодек Mpeg4 и назвали его DivX 3. У кодека DivX 3 есть два режима работы: low-motion и fast-motion. Для чего они нужны?

У DivX3 low-motion коэффициент сжатия низкий и почти постоянный, а у fast-motion высокий и довольно таки сильно изменяется. Это грозит тем, что low-motion весь фильм сожмёт с одинаковым коэффициентом сжатия. Все фрагменты будут выглядеть с одинаковым качеством, не зависимо от того, есть какое-нибудь движение в кадре или нет. При нехватке общего битрейта на картинке будут появляться артефакты: окантовка вокруг переходов, наблюдается размытие картинки, так же появляются квадраты на картинках с плавными переходами цветов.



Появление окантовки на переходах и размытие картинки


Появление квадратов на изображении

Для исправления подобных вещей был сделан режим работы fast-motion. Было замечено, что при просмотре гораздо более заметны искажения на статичных картинках, чем на динамичных. Режим fast-motion занимается тем, что отбирает битрейт у картинок с быстрым перемещением и отдаёт его статичным картинкам. Такой подход частично выправляет положение с нехваткой битрейта. Но в этом случае, эти артефакты появляются на быстро перемещающихся картинках. Приходится искать компромисс, между хорошим качеством статичных и динамичных картинок. Для работы с кодеком DivX 3 настоятельно рекомендуется использовать программу NanDub. Данной связкой (DivX 3 +NanDub) можно добиться лучших результатов, чем при работе последующих кодеков DivX 4-5. Настройки этого кодека хорошо описаны в статье, а про работу в NanDub.

Про DivX 4 по большому счёту говорить нечего, это промежуточная версия между 3 и 5. DivX 5 ушёл немного дальше, а для DivX 3 написана более качественная программа (NanDub). В связи с этим кодирование при помощи DivX 4 я даже не буду рассматривать.

DixX5 так же как и DivX 3 подвержен выше перечисленным искажениям, но у него нет режимов low-motion и fast-motion. Если у DixX3 коэффициенты квантования жёстко заданы (только при помощи NanDub можно настраивать), то у DixX5 они задавались вручную, но в последней версии кодека DivX 5.05 убрана и эта возможность. Изменяя коэффициенты квантования можно получить такие же эффекты, как и в DixX3+NanDub, причём, минимальный коэффициент квантования играет решающую роль, превращая кодек из low в fast.

В DivX5 Pro, есть функция работы с B-frames, что теоретически повышает качество закодированного материала. Реально, при детальном исследовании, мной не было найдено качественного улучшения картинки. Хуже то же не делает, и на этом спасибо :). Этой функцией можно пользоваться для успокоения нервов, мол производители говорят лучше, значит это так.

Итак, я рекомендую использовать DivX 3.11alpha+NanDub. При их использовании мы получим видео со 100% совместимостью с любыми версиями декодеров DivX и качество получаемого видео не хуже, а зачастую лучше, чем при кодировании последней версией кодека DivX 5.05. В отличии от Divx 3, DivX 5.05 значительно проще в настройках. Похоже, производители решили за нас, что для нас хуже, что лучше. Что в DivX 5 получилось по-настоящему удачно - это декодер. Даже фильмы закодированные DivX 3, я рекомендую смотреть при помощи DivX 5, качество картинки значительно лучше, чем при просмотре декодером Divx 3 (и разного рода проблем меньше). Я опишу особенности работы обеих версий кодеков.

Стр.2 - Сжатие Видео

Сжатие Видео

Перед тем, как начинать сжатие видео нужно определиться с настройками кодека. Я выбрал такой алгоритм подбора настроек кодеков:

В первую очередь, нам нужно определить, какой максимальный битрейт можно будет выставить в кодеке. Для этого я использую программу Gordian Knot. В ней можно открыть файл видео, который мы будем сжимать (обозначено под цифрой 1) или ввести продолжительность нашего видео (2). Далее, нужно выбрать кодек, который мы будем использовать для кодирования (3). Для правильного определения максимального битрейта нам нужно учесть звук, который будет прикреплён, это делается опцией номер 4. В этой опции нужно выставить битрейт, с которым будем сжиматься звук. Следует так же выбрать размер записываемого CD и количество дисков, на которые будет производиться запись (5). В окне 6 у нас посчитается наш максимальный битрейт, с которым можно кодировать видео.


После определения максимального битрейта, нам нужно определиться с разрешением, которое будет выставлено для кодирования.

При выставлении разрешения нужно ставить величины, кратные 16.

Далее, просматривая фильм, определяю длительное быстрое и статичное изображение с плавными переходами цветов (нужно чтобы это всё было на светлом фоне, так лучше проявляется заквадрачивание). Для статичного изображения иногда подходит логотип кинокомпании, который выводится вначале фильма. Для быстрого изображения подходят кадры с погоней, быстрым переводом камеры… Делаю из них один короткий ролик, примерно на минуту. В Virtualdub это делается очень просто: Перемещая слайдер, находим начало и конец вырезаемого куска и помечаем их соответственно клавишами "home" и "end" клавиатуры. После разметки, нажимаем клавишу "del". Так, вырезая кусок за куском, оставляем только эти два куска (статичный и динамичный).

Теперь начинаем кодировать этот ролик (NanDub для DivX 3 и VirtualDub для DivX 5). Сперва для DivX 3:

Заходим в опцию Nandub "Video", ставим закладку "full processing mode", далее заходим на вкладку "SBC options" и "SBC settings":


В разделе "Bitrate" выставляем максимальный битрейт, который посчитан для DivX 3. На самом деле, лучше выставлять его немного меньше, чем он посчитан, т.к. при кодировании этот битрейт соблюдается не точно а приблизительно и возможны выбеги размеров в любую сторону. В разделе "Minimum allowed bitrate" лучше выставить значение 200, хуже от этого не будет.

Далее переходим во вкладку "Bitrate curve":


Выставляем значение "Motion based curve modulation" в 35, а "Bitrate redistribution" на "Proportional".

Поясню, что выполняет вкладка "Motion based curve modulation". При выставлении этой вкладки в 100% кодек начинает вести очень агрессивно по отношению к динамичным сценам, то есть, он начинает очень сильно забирать битрейт у этих сцен и отдавать его статичным сценам. По мере уменьшения этого значения, агрессивность падает, и к 0 уже практически нет никакой разницы для кодера, динамическая это сцена или статическая. Таким образом, можно подобрать этот параметр под конкретные нужды и конкретный фильм. Остальные настройки кодера DivX 3 + NanDub хорошо описаны в этой статье.

DivX 5 настраивается таким образом:

Заходим в опцию Virtualdub "Video", ставим закладку "full processing mode", далее заходим на вкладку "Compression":


выбираем DivX 5 Codec, заходим на вкладку "Configure":


На вкладке "Bitrate Control" включаем однопроходный режим, выставляем высчитанный нами заранее битрейт, с которым мы будем кодировать весь материал.

На вкладке "General Parameters" в строке "Max keyframe interval" вместо 300 выставляем 100. Это облегчит навигацию по фильму. Поиск будет происходить не 12 секунд, а 4.


На этом настройка DivX 5 заканчивается.

Теперь производим кодирование. После кодирования, просматриваем обычным проигрывателем, которым пользуемся всегда. В свойствах DivX декодера устанавливаем минимальное качество изображения:


После просмотра мы выясняем, удовлетворяет ли качество нашим запросам. Если нет, то самый лучший выход - уменьшение размеров картинки.

После окончательного кодирования всего фильма, нужно просмотреть его ещё раз. Может оказаться, что выбранные куски были не типичны для всего фильма, и кодирование всего фильма привело к лучшим или худшим результатам.

Стр.3 - Микширование.

Микширование

Объединять звук с видео можно при помощи программы VirtualDubMod, это переделанный Virtualdub и со своей задачей он справляется на все 100%. Он понимает звук MP3, AC3, OGG, WAV, в общем, весь набор. Правда, при использовании MP3 VBR (переменный битрейт), и последующем открытии в Virtualdub, он будет утверждать, что у вас проблемы со звуком. Поясню на счёт переменных битрейтов. Официально, на сайте VirtualDub заявлено, что формат AVI не поддерживает переменный битрейт, вернее его можно вставить в AVI, но он может быть рассинхронизирован с видео. У меня проблем ни разу не было, но эта информация официальная.

Так же следует учитывать, что при микшировании видео и аудио MP3, происходит дописывание к получаемому файлу 10-20 мегабайт. Это служебная информация (называемая "frame overhead"). При создании видео формата OGM этого не происходит (поясню, формат OGM получается при микшировании обычного AVI и аудио формата OGG, VirtualDubMod тоже это делает).

Я рекомендовал бы вам пользоваться форматом OGM, для этого есть несколько предпосылок.

  1. В OGM не расходуется место на "frame overhead"
  2. Звук OGG на низких битрейтах гораздо качественнее, чем MP3 того же битрейта
  3. Он без проблем работает с переменными битрейтами.

Короче, делаем это так: в VirtualDubMod открываем видео файл. В разделе "Video" ставим опцию "Direct stream copy". В разделе "Streams" заходим в опцию "Stream list" и выбираем файл с уже приготовленным ранее звуком. Далее, заходим во вкладку File-> Save as... Там выбираем формат, в который будем сохранять (AVI, OGM), выбираем "Direct stream copy" в подразделе "Video mode" и нажимаем сохранить. Работа закончена.

Обо всём понемногу

По поводу одно или двух проходного кодирования, на первый взгляд, разницы никакой, при детальном просмотре двух и одно проходного кодирования я выяснил, что там, где есть движение, двухпроходное кодирование работает достаточно эффективно. Для двух проходного метода есть два режима работы - первый и второй проход, они описаны ниже, в настройках работы DivX. Ещё, в пользу двух проходного кодирования можно отнести практически 100% попадание размера файла в рассчитанный размер. При однопроходном кодировании, размеры файла могут очень сильно варьироваться.

Немного о пользовании Virtuldub. Если у вас возникнет желание зажать в два прохода, есть возможность не подходить каждый раз к компьютеру, когда выполнится проход, а сделать это в виде скрипта, который автоматически выполнит оба прохода, а вы только проверите результат. Делается это так. В настройках звука ставим "No audio", звук будет наложен после обработки видео. Сделайте все установки в кодировщике на первый проход (Video -> Compression -> DivX5-> Configure -> 2-pass, first pass), установите битрейт и другие установки. Зайдите в сохранение ( File -> Safe as AVI ), поставьте галку "add operation to job list and defer processing" наберите название AVI файла и нажмите сохранить, процесс сразу не запуститься, он будет занесён в очередь. Также настраиваем на второй проход (2-pass, second pass), заходим в сохранение и производим там те же действия. После этого можно продолжить заниматься своими делами. Когда компьютер освободится (например, ночью), запускаем Virtualdub и даём команду (File -> Run script -> VirtualDub.jobs) на исполнение скрипта, написанного нами ранее. Файл VirtualDub.jobs находится в каталоге с установленным VirtualDub. VirtualDub выполнит все задания, написанные нами ранее. После выполнения скрипта, закройте VirtualDub и удалите файл VirtualDub.jobs. При помощи этого скрипта можно также монтировать фильмы (запоминаются все вырезки, вставки, наложения, всё так, как вы хотели сохранить), подбирать наиболее качественное сжатие (ставим несколько заданий на сжатие одного и того же файла, но с разными размерами картинки, на утро нам предложат несколько авишек). В общем, очень удобная вещь. А в целом для описания работы с VirtualDub требуется отдельная статья и выходит за рамки описания работы с DivX.

Немного о настройках DivX 5

Ниже приведено описание настроек кодера DivX 5. Некоторые функции уже отсутствуют в DivX 5.05, но я их оставлю, для полноты описания всех кодеков DivX 5.

Variable bitrate mode.

Доступны следующие значения:
1-pass - режим кодека, при котором битрейт примерно выдерживается в указанном значении, это режим с переменным битрейтом.
1-pass quality based - режим кодека, при котором битрейт удерживается в заданном значении не зависимо от сцены. При изменении уровня качества меняется так же и коэффициент сжатия кадров. Этот режим не рекомендуется использовать для хранения информации, а только как материал для последующей обработки.
2-pass first pass - Видео кодируется в два прохода, в первый проход создаётся файл статистики, во второй уже кодится итоговый материал. Это первый проход, когда создаётся файл статистики. Файл, в который будет писаться *.AVI при первом проходе, ничего в себе не несёт, он нужен как своп файл, на втором проходе его можно заменить на настоящий AVI.
2-pass second pass - В этот проход создаётся итоговый файл, руководствуясь данными из файла статистики, созданным во время первого прохода.

MPEG-4 Tools
Use Quarter Pel - Функция, предназначенная для просчёта движения пикселов с точностью до 1/4 пиксела. Реального выигрыша от этой функции я не вижу никакой, а на слабых компьютерах это вообще противопоказано.
Use GMC (Global Motion Compensation) - Помогает улучшать сцены, где используются наезды на объект, панорамирование. То есть, пытается передать максимум информации из предыдущих кадров (ведь они практически не изменяются, особенно при панорамировании). Я бы не рекомендовал использовать этот режим, уже наблюдались проблемы с разваливанием картинки на квадраты при использовании этой функции.
Use Bidirectional encoding - режим работы, при котором дельта кадры делятся на P-frame и B-frame (в DivX 3-4 были только P-frame).При работе B-frame используют не только предыдущий кадр, но и следующий (P-frame рассчитывал картинку только по предыдущему кадру), что даёт нам дополнительный толчок для повышения качества картинки. B-frame получаются очень маленькие, значит можно больше объём выделить на P-frame. Рекомендуется к включению.

Enable Crop - При включении этой функции видео изображение будет подрезано на столько пикселей, сколько выставите в пунктах:
Crop top - обрезка сверху
Crop left - обрезка слева
Crop right - обрезка справа
Crop bottom - обрезка снизу

Psychovisual Enhancements. Как заявлено производителем, это попытка убрать из изображения ненужные детали (психовизуальное восприятие человека). Про эту функцию могу описать свои выводы: В положении Light стало лучше передавать тёмные полутона. Разницу же между OFF и Strong я не заметил.

Maximum key frame interval. Максимальное количество дельта кадров между ключевыми кадрами. В новый кодек изначально встроен механизм вставления ключевых кадров по изменению сцены. Эта цифра, как и следует ожидать, заставляет кодек вставить ключевой кадр, если он не вставлен SCD механизмом. По умолчанию стоит 300, что соответствует 10-12 секундам, в зависимости от frame rate. Я же рекомендую ставить 50-100, что соответствует 2-4 секунды, это несколько увеличивает размер конечного файла, но вместе с этим облегчает поиск нужного фрагмента, и улучшает качество (ведь в течение этого интервала кодек не показывает кадр целиком, а получает из ключевого, путём передачи изменений оного, при этом возможны любые искажения).

Scene change threshold Теоретически должен отлавливать порог изменения сцен, при котором нужно вставлять ключевой кадр, но реально работает не очень корректно, если выставить очень маленький, то в некоторых местах они (ключевые кадры) будут через каждый кадр, а там, где сцены явно изменяются, он их не ставит. Это происходит потому, что он сравнивает соседние кадры, а сцена может меняться 5-10 кадров. Рекомендую выставить 20%.

Enable Resize - при включении этой функции будет произведено изменение размеров видео.
Output width x height - получаемые ширина и высота.
Методы расчета изменения размеров:
Bilinear (Very Soft) - билинейный, самый простой в расчетах, соответственно самый быстрый, рекомендуется только для уменьшения размеров.
Bicubic (Soft) - кубический мягкий, самый простой из кубических.
Bicubic (Normal) - кубический нормальный.
Bicubic (Sharp) - кубический чёткий, рекомендуется для всех видов изменения размеров, но он самый медленный.

Pre Processing Source Заявлено производителем, как шумодав. На самом деле просто происходит сглаживание картинки, что несомненно, помогает при работе кодера и качество картинки в целом растёт. В положении Extreme происходит максимальное сглаживание, в положении Light - минимальное сглаживание.

Source Interlace. Имеет 3 положения:
All frames are progressive - с исходным видео ничего не делается кроме сжатия.
All frames are interlaced - Конвертирует из чрезстрочного видео (при захвате сигнала PAL) в прогрессивное.
All frames telecine - Конвертирует из чрезстрочного видео (при захвате сигнала NTSC) в прогрессивное. Вместе с этим, частота видео снижается с 30 кадров до 24, без потери качества.

Существенное замечание: При включении All frames are interlaced или All frames telecine, не должно быть изменено разрешение видео материала перед кодером.

Data rate control (RC) - управление битрейтом
Maximum quantizer и Minimum quantizer - прямой перевод, коэффициент квантования, но реально, эти параметры задают максимальный и минимальный коэффициенты сжатия P-frames. В работе Maximum quantizer практически не используется, а вот Minimum quantizer задаёт основное качество. Если Minimum quantizer выставить в 2, то это будет означать работа без сжатия и уменьшение размера видео будет только за счёт работы P-frames и B-frames.
Rate control averaging period, frames. Определяет как долго кодек "помнит" как менялся битрейт в процессе кодирования. Высокое значение этого параметра стоит ставить, если в кодируемом материале есть длинные динамичные сцены.
Rate control reaction period, frames. Определяет, как быстро кодек меняет битрейт с изменением сцены.
Rate control up/down reaction. Определяет, как резко кодек может менять битрейт при изменении сцены.

Performance/quality имеется четыре возможных значения:
Slowest.
Slow.
Medium.
Fast.
Fastest.

Значения достаточно очевидны, предлагается выбрать что важнее - скорость кодирования или качество итогового материала. Учитывая, что кодировать надо всего один раз, а смотреть много, то оптимальный выбор, IMHO, очевиден...

Write conversion log file. Нужен для ускорения 2-проходного кодирования.

Продолжение темы следует…



Оригинал материала: https://3dnews.ru./170036