⇣ Содержание
Опрос
|
реклама
DVD Rip. Часть 2 Smart Bitrate Control - новый шаг в сжатии цифрового видео
ВступлениеЕсли ещё несколько лет назад на десяток пользователей PC приходился хорошо если один любитель просматривать видеодиски с фильмами или видеоклипами в формате Mpeg1, то сегодня фильмы в Divx или, реже, в DVD смотрит наверное каждый второй. Более того, многие не удовлетворяются просто просмотром, они хотят делать фильмы самостоятельно. Принимает это разные формы, от перегонки уже оцифрованных фильмов с одного формата в другой, до оцифровки видеофильмов самостоятельно, после чего всё равно встаёт вопрос про оптимальный формат в котором всё это хранить. Спрос рождает предложение и нет ничего удивительного в том, что на рынке появилось множество программ и устройств призванных помочь пытливому оцифровщику. Причём, возможности этих программ и железок, доступных сегодня почти что каждому, таковы, что несколько лет назад подобное стоило столько, что страшно даже подумать, и было по карману только узкому кругу профессионалов. Впрочем, пользователям РС к таким темпам прогресса не привыкать :-). Тема это огромная и страшно интересная, разговаривать про неё можно практически бесконечно. Но сейчас мы поговорим про одну из самых мощных программ для кодирования видео в один из самых удачных форматов Divx, известной какSmart Bitrate ControlТак называется алгоритм реализующий MM4 (Multiple Mpeg4) энкодинг с помощью одного из дополнений к VirtualDub. Этот пакет отдельно можно взять здесь, а весь VirtualDub, со всеми необходимыми интегрированными пакетами здесь. Часто это название связывают только с DVD-Rip’ом, но это далеко не так (в отличии, например, от FairUse, так же реализующей алгоритм MM4). С его помощью можно оцифровывать любое видео, которое возможно загрузить в VirtualDub, или же оптимизировать (уменьшать размер с минимальными потерями качества) уже готовые видеофайлы, в том числе формата Divx. Впрочем, для DVD-Rip SBC тоже подходит наилучшим образом, поэтому на этом вопросе я остановлюсь поподробнее, тем более что методика применяемая для этого имеет гораздо более широкое применение.DVD в Nandub.Главная проблема, с которой придётся столкнуться при кодировании DVD фильма в Divx с помощью Nandub (так называется надстройка к VirtualDub реализующая SBC), это как загрузить видео из VOB файла. Подобные проблемы (видео не загружается в Nandub непосредственно) могут возникнуть и в других случаях, принцип решения во всех случаях одинаков, меняется может только набор нужного программного обеспечения.Прежде всего нам понадобится программа, которая будет работать как Frame Server. Как вы уже знаете, Nandub не может работать напрямую с VOB файлами, поэтому ему нужен "помощник", который такую возможность предоставит. Процесс такой помощи и называется Frame Serving. Doom9, любезно разрешивший мне воспользоваться в этой статье информацией имеющейся на его сайте, для этой цели рекомендует воспользоваться Mpeg2Avi. Поэтому и мы не будем велосипед изобретать, а воспользуемся советом. Загрузив уже рипнутые vob’ы (File - Open), запускаем фильм на проигрывание (F5), ждём несколько минут (если чего-то не работает, то просто сотрите файл DVD2AVI.ini), и наблюдаем за статусом Из этого окна нам надо определить: 1. Aspect Ratio (пригодится когда будем рассчитывать разрешение фильма).
На первый вопрос ответ очевиден сразу, второй определяем по Frame Rate (если 25 то PAL, если 30 то NTSC). Ответ на третий вопрос зависит от второго. Если фильм в PAL, значит кадры идут один за другим, и ничего делать не надо. Если фильм в NTSC, то надо подождать несколько минут, и посмотреть какого значения достигнет поле Video Type. Если это Film 95% или выше, значит всё прекрасно, используется порядок кадров 01001 (более подробно про это написано в PC-DVD FAQ, в вопросе про виды развёртки), и всё что требуется, это отметить в меню Video - Field Operation значение Forced Film. Если же значение Video Type так и не достигнет 95% или выше, значит используется какой то другой порядок кадров, и с этим придётся что-то делать. Остаётся только выбрать звуковую дорожку в меню Audio - Track Number (советую выбрать None, и сделать звук потом, каким-либо другим методом. Почитать про эти методы можно в первой части DVD-Rip). После этого сохраняем проект (не avi!), File - Save Рroject. Теперь можно решить проблему с IVTC (порядок кадров, если она была, если нет, то можете пропустить этот пункт). Для этого воспользуемся программой под названием TMPGEnc. Запускаем её, и в качестве Video Source загружаем Dvd2Avi проект (*.d2v файл). Потом идём Settings - Advanced. Первое что надо сделать, это выставить правильный Field Order. Для этого выставляем Еven field first (Field order A), двойной клик на Deinterlace, в открывшемся окне выбираете Method как Even-Odd field (field), и навигационными стрелками меняете кадры по одному. Если изображение не прыгает взад-вперёд, можно себя поздравить, нажать на Cancel и перейти к следующему пункту, если прыгает, то всё равно нажать на Cancel, поменять значение Field Order, и проделать всю операцию ещё раз. После того, как Field Order выставлен правильно, кликаем два раза на Inverse telecine, и оказываемся вот в таком окне. Самое простое, что здесь можно сделать, это нажать на кнопку Auto-Set, в открывшемся окне нажать на старт, и подождать сможет ли TMPGEnc сделать всё правильно (как правило, сможет). Определить это очень просто, надо побегать слайдером по фильму, и если нет "ёлочек" по краям движущихся объектов, значит всё в порядке. Если ёлочки есть, то можно попробовать кодить с 29.97 fps, или включить Deinterlace, в окне открывающимся при нажатии на Auto-Set. Если неохота сидеть и ждать пока TMPGEnc разберётся в порядке кадров автоматически, можно попробовать задать их самому. Для этого надо нажать Control-P. Как я уже говорил, наиболее часто встречающийся порядок 01001. Если он не подойдёт, попробуйте сдвинуть цифры на одну, ещё одну, и так пока полный круг не пройдёте. После того как всё нормально, закройте окно, и сохраните проект, File - Save Project. Теперь нам надо из сохранённых проектов сделать что-нибудь, что Nandub сможет прочитать. Для этого служит VFAPI. После распаковки этого архива не забудьте запустить vifpset.bat из директории Codec, что бы зарегистрировать его в системе. Интерфейс программы элементарен, сначала кнопкой Add Job загружаете в неё проект полученный в Dvd2avi или TMPGEnc, потом нажимаете Convert, и получается Avi файл. Что бы загрузить проект сделанный TMPGEnc, воспользуйтесь этим пакетом. Запустите полученный файл в плеере, и убедитесь что всё в порядке, то есть файл проигрывается. Играться он будет медленно, потому что этот avi не настоящий avi. Просто берётся поток который выдаётся frame server’om, декомпрессируется, и покадрово выдаётся "на гора" любой программе, что требует. В том числе и Nandub. Nandub - основыПолученный таким (или любым другим) методом файл загружается в NanDub. Первое, что необходимо сделать, это отрезать лишнее (чёрные полосы, или участки с артефактами изображения, что иногда встречается по краям оцифрованного с видеокассет материала) и изменить разрешение (если вы не хотите кодировать в оригинальном разрешении). Для этого придётся воспользоваться фильтром из богатого набора VirtualDub. Заходим в Video - Filters..., выбираем там Add. Из открывшегося списка выбираем Resize, и два раза кликаем на нём. В открывшемся окне вводим значения высоты и ширины (не забудьте, что бы ширина была кратна 32), исходя из своих представлений о том сколько должно быть и в соответствии с Aspect Ratio. Не забудьте выставить Filter Mode, что определяет алгоритм который будет использоваться при изменении размера. Если оставить всё как есть, то само изменение размера приведёт к куче артефактов изображения, на что потом наложатся артефакты сжатия и в итоге без слёз смотреть на полученный фильм будет сложно. Вариантов режимов, которые стоит рассматривать, всего два. Precise bilinear и Precise bicubic. Bicubic обладает более высоким качеством, но размер файлов получается несколько больше. И если учитывать, что после того как видеопоток будет сжат в Divx разница между Precise bilinear и Precise bicubic станет практически незаметна, то можно смело использовать режим Precise bllinear, особенно для фильмов на 1CD. Впрочем, если планируется делать на два диска, то можно подумать и о Precise bicubic. После того как вы выставите всё необходимое для этого фильтра, загорится кнопка Cropping..., нажав на которую получите возможность отрезать лишнее по краям. Там всё достаточно очевидно, и вряд ли нуждается в дополнительных комментариях. Поменяв размеры и отрезав всё лишнее, можно побегать слайдером в основном окне программы, что бы убедиться что результат вас удовлетворяет, и переходить к настройкам самого кодека.Но для начала немного теории, объясняющей принцип работы SBC. Как вы знаете (если нет, то ознакомьтесь с первой частью DVD-Rip, там этот вопрос освещается более подробно), качество видео зависит от Bitrate, то есть количества данных выделяемых на каждый кадр. И подобрать оптимальный битрейт для различных сцен весьма не тривиальная задача. Программисты бьются над этой проблемой, о чём свидетельствует выход на рынок нескольких видов Mpeg4 подобных кодеков, но никто не смог разработать алгоритм, при котором оптимальный битрейт подбирался бы с одного прохода. Как следствие, ни один из кодеков, существующих сейчас на рынке не может дать качество сравнимое с получаемым при использовании MM4 энкодинга и старых кодеков, при наличии хоть какого то контроля над размером итогового файла. Не думаю, что это вообще возможно. Разные программы реализующие MM4 алгоритм решают проблему определения оптимального битрейта при нужном размере итогового файла по своему (в качестве примера можно взять FairUse, описанную в первой части), в Nandub это реализовано так. Видео кодится в два прохода, во время первого прохода видеопоток кодится с максимальным для Divx битрейтом 6000, для получения максимального качества, возможного для кодека. Однако, результат этой работы не сохраняется на диск (поэтому можно не беспокоиться по поводу свободного места), а анализируется по нескольким параметрам. Результат этого анализа записывается в файл статистики. Этот файл единственное, что сохраняется на жёсткий диск во время первого прохода. Из информации, которая хранится в этом файле, можно отметить следующее. Прежде всего, это данные о коэффициенте сжатия каждого кадра. На эту информацию отводится 4 бита, таким образом имеется 16 возможных значения (именно столько комбинаций можно составить из четырёх нулей и единиц). Это значения зависит от соотношения размеров сжатого Divx кадра и исходного. Чем оно больше, тем лучше сжался исходник. Коэффициент 2x означает что кадр плохо поддаётся сжатию (кодек не может выдать вообще не сжатый файл, поэтому коэффициент 1x не используется), а 32x что кадр сжался на максимальную величину, доступную кодеку. Таким образом на качество кадра влияет два фактора - битрейт (когда его не хватает, появляются квадраты) и уровень сжатия (высокие уровни сжатия добавляют артефакты изображения, знакомые всем, кто видел слишком сильно сжатые Jpeg картинки). Кроме коэффициента сжатия в файл статистики записывается размер кадра, баланс яркости (соотношение яркого и тёмного), и кое-какую другую информацию. Данными, содержащимися в файле статистики Nandub руководствуется во время второго прохода, когда исходя из своих настроек кодирует исходный сигнал в Divx, и записывает результат на жёсткий диск. Вооружённые этим знанием, рассмотрим настройки Nandub подробнее. Nandub - настройкиЛьвиная доля из богатства настроек SBC находится в меню Video - SBC Options. Но начинать работу с Nandub нужно с пункта BitRate Calculator... При его выборе откроется следующее окно:В этом окне доступны следующие значения:
Bitrate: значение высчитанного битрейта. Высчитывается и автоматически подставляется в настройки SBC. Если Вы решили воспользоваться калькулятором, то это окно трогать не стоит.Кроме этого, есть раздел Audio, в котором доступны следующие опции: Kbps: учитывает место требуемое под звук определённого битрейта.Заполнив все необходимые поля остаётся нажать на кнопку Calculate, и требуемый битрейт будет высчитан исходя из выставленных значений и загруженного в Nandub видео. Определившись с битрейтом, тем или иным способом, можно переходить к настройкам непосредственно SBC, пункт SBC Options... После выбора этого пункта откроется окно, разделённое на несколько закладок. От значений выставленных на этих закладках зависит качество и размер полученного файла. Первая закладка называется DivXНа ней доступны следующие разделыCodec Setup - этот раздел отвечает за базовые настройки кодека. Доступные настройки: Divx - выбрав этот пункт, для кодирования вы будете использовать Divx кодек установленный в системе. Крайне рекомендуется.Anti-shit =) - второй раздел закладки Divx. Отвечает за поиск битых кадров и кадров с артефактами изображения. Принцип работы прост. Каждый сжатый кадр разжимается и сравнивается с исходным. В результате получается значение количества dB, в интервале от 0 до 95. Доступные настройки: Shit: значение, считающееся предельно допустимым. Кадр с коэффициентом ниже заданного считается испорченным и пережимается заново. Соответственно, если поставить слишком большое значение, Вы рискуете тем, что фильм никогда не закодится. Рекомендуемое значение этого параметра - 16. Если выставить 0, это отключит эту функцию, и несколько ускорит кодирование. Стоит попробовать с этого и начать, если ошибок кодека не будет, значит эта функция Вам не нужна. Bitrate CurveС этой закладки вы можете контролировать как меняется битрейт в зависимости от сцены. Stats file: - здесь можете (и должны) указать stats файл, который сгенерился во время первого прохода.Curve compression. Определяет в какую сторону насколько должен меняться битрейт в зависимости от сцены. Symmetric: означает что битрейт меняется симметрично, насколько он может подняться на сценах с высоким уровнем движения, настолько же он может опуститься на сценах с низким уровнем движения. Обычно, это значение не приходится выставлять вручную, а достаточно нажать на кнопку Calc... и всё выставится автоматически в зависимости от значения Crosspoint, про которое я расскажу ниже. Значение должно быть 25-30% для полнометражного фильма на один CD, и 10-20% на 2 CD.Luminance correction. Причина появления этого пункта в том, что кодеку сложно кодировать сцены с малым контрастом (то есть, когда вся сцена светлая, или вся тёмная). Поэтому во время генерации stats файла в него записывается значение "luma noise" (баланс яркости), который тем ниже, чем ниже контраст. Enable - после включения этой функции, сцены с низким значением "luma noise" будут получать дополнительный битрейт при кодировании, что положительно скажется на их качестве.End credits позволяет сэкономить битрейт на заключительных титрах. Функция полезная, потому что в титрах изображение постоянно меняется, keyframe в них ставятся очень часто, поэтому места они занимают немало. End credits start at frame: номер кадра начиная с которого идут титры. Побегайте слайдером по фильму в основном окне, что бы определить это значение. Не забудьте, только, удерживать Shift при быстрой промотке.Bitrate redistribution. Определяет как будет делиться битрейт. Bias - всем поровну, определённое количество бит на определённое количество кадров. Подходит для спокойных фильмов, где мало действия и перемены обстановки. Раздел Motion.С этой закладки контролируется, как Nandub определяет уровень движения для каждого кадра, что непосредственно влияет на работу настрое в предыдущей закладке. Раздел Motion curve parameters. Span: определяет сколько кадров вперёд и назад должен сравнивать Nandub при определении уровня движения для конкретного кадра. Оптимальное значение зависит от фильма, но 8 хорошее значение что бы начать.Раздел Motion based DLL-switch определяет когда надо переключаться с Low motion кодека на High motiоn. На самом деле, это один и тот же кодек, только битрейт и коэффициент сжатия у них по разному меняется. Nandub для того и задуман, что бы правильно битрейт и коэффициент сжатия менять, поэтому можно использовать только один Low motion кодек. Если вам покажется что LM не даёт достаточно битрейта, увеличьте значение Low-pass фильтра в предыдущей закладке. Switch to FM DLL when motion is over определяет, при каком уровне движения надо переключаться на Fast motion. Ставьте 300, и этого не произойдёт никогда.
Crispness modulation определяет на сколько кодек должен уменьшить значение Crispness при максимальном уровне движения (когда уровень движения минимален, это значение 100). Значение 30 достаточно хорошо для большинства случаев, но если у Вас плохой исходник (много шумов), то его надо увеличить. GaugeНазначение этой закладки - дать столько контроля над размером итогового файла, сколько это возможно, и при этом предотвращает выпадение кадров. Раздел Global deviation compensation. Определяет на сколько кодек должен заглядывать назад (а по моему и вперёд тоже), что бы определять а не слишком ли много битрейта используется. Ведь что бы добавить битрейта в одной сцене, надо убрать его в другой, иначе размер файла станет неконтролируемым. Playback delay - время в секундах, делает именно то, что написано парой строк выше. Значение 45, выставленное по умолчанию достаточно хорошо подходит для большинства случаев. Однако, если фильм имеет много длинных динамичных сцен, может понадобиться увеличить это значение. Максимальное работающее значение - 120 секунд.Раздел Hacks. Здесь содержаться пара настроек воздействие которых на кодек иначе как хаком и не назовёшь. KF boost - добавляет указанное значение битов к "запасу" битрейта после каждого ключевого кадра. Может немного повысить качество фильма при увеличении размера. К использованию не рекомендуется, но если всё-таки решитесь, не ставьте это значение выше 5% Compression levelsНа этой закладке определяются уровни сжатия в зависимости от уровня движения. Как я уже говорил, уровень сжатия это второй после битрейта фактор влияющий на качество картинки. Если коэффициент сжатия слишком высок, то к изображению добавляются артефакты сжатия, такие же какие можно наблюдать на слишком сильно сжатых Jpeg.
Доступных настроек немного DRF - Detail Removal Factor. Этой опцией настраивается уровень сжатия сразу для всего фильма. Многие этим и ограничиваются, выставляя его 2-8 для фильмов на 1 CD, и 2-5 для фильмов на 2 CD. Конечно же, много зависит от качества исходника, если он очень "шумный" и плохо поддаётся сжатию то, возможно, эти значения придётся увеличить, что бы выдержать требуемый размер файла.Кроме этого есть пять граф, где можно настроить уровень сжатия в зависимости от уровня движения. Как я уже говорил, многие предпочитают выставить значения when motion over 300 для всех граф, и таким образом полностью отключить эту возможность. Если всё-таки решите воспользоваться ей, то оптимальные значения придётся подбирать самостоятельно, каждый раз, в зависимости от исходного материала. Общая рекомендация такова - чем выше уровень движения, тем более высокий уровень сжатия можно поставить. Ведь чем быстрее движется изображение, тем сложнее заметить артефакты сжатия. И, соответственно, наоборот. Keyframes quality: определяет уровень сжатия для ключевых кадров. Так как от качества ключевых кадров зависит очень много в качестве готового фильма, то хорошей идеей будет изменить это значения с 4, что стоит по умолчанию, до минимальных 2.На этом заканчиваются настройки SBC. Но, радоваться ещё рано, перед тем как перейти к кодированию, есть ещё одно окно, которое требует вашего внимания. Находится оно в Options - Preferences... Из него на процесс кодирования влияют две закладки: SceneЭта закладка управляет механизмом Scene Change Detection, и отвечает за то, как вставляются ключевые кадры. Основан он на смене параметра motion, и обычно советуется оставить значения по умолчанию, 206 и 64. Но, возможно вы захотите воспользоваться альтернативной методикой. Для этого надо отметить чекбокс Use Alternative и выставить Multiplier. Альтернативная методика работает на смене контраста, а не на уровня движения, что часто даёт лучшие результаты. Хорошее значения 35, но для тёмных фильмов можно выставить и меньше, 30-33. SBCЭто последняя закладка, и вообще последнее место, которому нам надо уделить внимание прежде чем Nandub будет полностью настроен, и можно приступать к кодированию. На этой закладке доступна только одна функция - значение Crosspoint. Эта цифра используется при расчете значения Curve compression, что упоминалось выше. До сих пор у народа не сформировалось окончательное мнение, каким именно должно быть это значение. Поэтому используйте 250-280 для фильмов на 1 CD и 350-460 для фильмов на 2 CD, как значения хорошо себя зарекомендовавшие на практике.
Кодирование в NandubПосле того, как читатели получили общее представление о настройках Nandub, можно, наконец то, перейти к самому процессу кодирования. Первое с чем надо определиться это... А охота ли вам копаться в настройках самостоятельно, или доверяете кому-либо другому. Если второе, то можно с чистой совестью забыть всё, что было прочитано про настройки Nandub, и воспользоваться одним из готовых конфигурационных файлов. Взять их можно здесь. Загружается он через File - Load Processing settings... Преимущество этого метода в том, что он здорово облегчает жизнь гражданам с различной степенью лености, но очевидный минус, что если что-либо пойдёт не так как задумывалось, то без знания настроек Nandub’a поправить что-либо не удастся. Итак, как бы то ни было, вы загрузили фильм, изменили размер, отрезали всё лишнее, выставили все настройки. После этого у вас есть несколько выборов.Первый это File - Two passes... В этом случае вас спросят сначала куда сохранять файл статистики, потом куда сохранять сам фильм. Указываете и то и другое, и идёте спать. Nandub сам кодит сначала одни проход в 6000, потом второй, уже финальный. В результате Вы получаете два файла, файл статистики, и сам фильм. Если фильм закодился хорошо, файл статистики больше не нужен. Способ подходит если вы абсолютно уверены, что всё выставлено правильно. Второй - First pass... В этом случае у вас спросят только куда сохранить файл статистики. Фильм будет закоден один раз, и сохранится только файл статистики. Третий путь, предполагает что вы уже имеете файл статистики. Откуда он взялся, то ли вам не понравилось качество фильма закоденного в два прохода, но файл статистики остался, то ли вы сделали его специально, за один проход - не имеет значения. Единственное обязательное условие - файл статистики должен делаться с этим же фильмом, в том же разрешении, и при тех же настройках фильтров. Но не кодека! То есть, если вы передумали делать фильм на один диск и решили сделать на два, если наоборот, вместо двух один, если поменяли уровень сжатия, да что угодно из раздела Video - SBC Options - SBC Settings..., то новый файл статистики не нужен. Но если вы решите поменять, например, разрешение, или наложить ещё один фильтр, то обязательно понадобиться и новый файл статистики. В этом случае просто указываете на этот файл в Video - SBC Options - SBC Settings..., на закладке Bitrate Curve, и сохраняете фильм File - Save as AVI. На мой взгляд, этот способ наиболее предпочтителен. Во время кодирования можно полюбоваться вот такой статистикой в Status windows. Сплошной ряд вертикальных синих полосок в этом окне показывает размер кадров, кодируемых с использованием Low motion кодека, если вы вопреки всем советам не отключили использование Fast motion, то при переключении на него полоски станут зелёными. Высокие вертикальные красные полосы означают ключевые кадры вставленные SCD при использовании алгоритма по умолчанию (основанного на уровне движения), а высокие жёлтые показывают ключевые кадры вставленные SCD при использовании альтернативного алгоритма (на основе смены контраста). Белая изломанная линия показывает кривую битрейта (Bitrate curve), а зелённая изломанная линия показывает уровень движения. Из его несомненных плюсов SBC (который, на мой взгляд, перевешивает все возможные минусы), можно отметить возможность "прикинуть" настройки. Всё что для этого надо, это выбрать отрезок фильма (слайдером и кнопками Home и End, кто не понял, бегом читать первую часть DVD-Rip) минут на 5, и закодить его отдельно, что бы оценить качество настроек. Лучше всего таких отрывков проверить несколько, что бы быть полностью уверенным. Кроме этого, если уже имеется готовый звук, то его можно сразу же наложить, в процессе кодирования (меню Audio), что нет никакого смысла делать во время первого прохода. Но, в любом случае, выбор за читателем. Пробуйте, и всё получиться! В самом конце хотелось бы ещё раз высказать благодарность Doom9 за любезное разрешение использовать материалы с его сайта при подготовке статьи.
⇣ Содержание
Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.
|