ЧАСТЬ 1
СОДЕРЖАНИЕ:
1. Установка программ.
2. Копирование DVD-видео на винчестер с
помощью DVD Decrypter, создание проекта в DVD2AVI.
3. Создание AVS-скриптов и их загрузка в
VirtualDubMod.
4. Избавляемся от интерлейса..
5. Фильтруем.
6. Кадрирование и размер.
Часть 2 (продолжение гайда).
1. Установка программ.
Скачайте и установите необходимое программное обеспечение. Для кодирования в формат MP4 нам нужно установить кодек DivX Pro последней (или предпоследней) версии, важно чтобы это был стабильный и проверенный релиз. Для обработки и редактирования видео нам нужно установить т.н. фреймсервер (он же скриптовый язык с набором фильтров) AviSynth (сокращение от AVI SYNTHesizer).
Кроме того, нам понадобятся следующие
программы:
- DVD Decrypter - для записи содержимого DVD-диска
на винчестер;
- DVD2AVI (или ее обновленная версия - DGIndex)
- выделение звука и создание проекта для
дальнейшей обработки видео;
- AvsTweak - для создания и отладки AVS-скритов
и расчета битрейта;
(примечание: для рассчета битрейта можно
также воспользоваться битрейт-калькулятором,
встроенным в кодек DivX)
- VirtualDubMod - для собственно кодирования в MP4
Подразумевается, что звук на DVD-диске присутствует в формате AC3.
Где скачать эти программы и как их установить описано отдельно здесь: Скачивание и установка программного обеспечения.
2. Копирование DVD-видео на винчестер с
помощью DVD Decrypter, создание проекта в DVD2AVI.
2.1. Копирование DVD-видео на винчестер.
Вставьте DVD-диск и запустите DVD Decrypter.
Переключите меню Mode в
режим IFO и откройте
вкладку Stream Processing. Здесь
(1) содержится ценная
информация о типе видео-потока (PAL, 4:3), о
количестве и порядке следования аудио-потоков и
о наличии субтитров, которая нам в дальнейшем
может пригодиться. Кстати, если запускать DVD
Decrypter в этом режиме, то он записывает
информацию о потоках в файл ("VTS_01 -
Stream Information.txt").

Укажите папку назначения (2) и нажмите кнопку "Пуск" (3).
Если не удается заставить DVD Decrypter захватить за один раз весь DVD-диск (например, в случае с многосерийными фильмами), то можно использовать вместо режима IFO режим File. В этом режиме DVD Decrypter перенесет с диска на винчестер все файлы (правда в этом режиме DVD Decrypter почему-то не создает информационный TXT-файл).
2.2. Создание проекта.
Для создания т.н. файла проекта можно
использовать утилиту DVD2AVI. Однако
рекомендуется использование модификации этой
программы, сделанной Дональдом Графтом
и названной им DGIndex. К гайду прилагается
именно эта модификация. Отличия в интерфейсе (как
вы можете убедиться на скрин-шотах) между
программами минимальны (слева шоты DVD2AVI,
справа - DGIndex).
Запустите программу. Откройте первый из VOB-файлов
фильма: обычно первый VOB-файл фильма это
"vts_01_1.vob", а в нулевом VOB-е
"Vts_01_0.vob" находится меню или
реклама. Остальные VOB-ы в DVD2AVI
добавятся автоматически. В DGIndex можно
выбрать в меню File > Autoincrement Open
или, действуя через Open
нажать затем ADD AUTO и
указать на следующий по порядку файл (vts_01_2.vob).
Если указать на первый, то в список попадут два
первых VOB'а (как видно на картинке
справа):
![]() |
![]() |
Если фильм состоит из нескольких отдельных серий, то их придется загружать и обрабатывать по-отдельности. Убедитесь, что настройки в меню Audio таковы (они и должны быть такими по умолчанию, по крайней мере, в DGIndex не нужно вообще трогать никаких настроек, жмем сохранить проект и все!):
![]()
|
![]() |
При необходимости укажите на нужный вам аудио-поток - Track Number. Потоку 0x80 соответствует Track1, 0x81 - Track2 и т.д.:

Если в меню будет отмечено галочкой Demux All Tracks (в DGIndex это настройка по умолчанию), то будут извлечены сразу все аудио-дорожки. Если вы делаете рип для широкой аудитории, желательно не выбрасывать лишние по вашему мнению аудио-дорожки (с английским, немецким, французским и прочими языками). Делайте рип с русским звуком, а остальные треки можно будет приложить к нему в виде отдельных AC3-файлов. То же самое, в принципе, касается и субтитров, но извлечение субтитров в данном гайде не рассматривается.
Теперь в меню File нажмите Save Project, укажите имя файла проекта и папку назначения (сохраняйте для удобства в ту же папку, где лежат файлы VOB, переписанные с DVD-диска), пусть, например, имя проекта будет project (можно, к примеру, давать проектам в качестве имен - сокращения от названий фильмов.), тогда проект запишется в файл "project.d2v".
Вопрос: что произошло в
результате создания файла проекта?
Ответ: видео-материал
по-прежнему находится в VOB-файлах,
выбранный аудио-поток сохранен в отдельный файл
в формате AC3, а сам файл проекта "project.d2v" представляет
собой своеобразный индексный файл, позволяющий
получить доступ к видео, содержащемуся в VOB'ах,
как к обычному AVI-файлу, при помощи таких
программ как VirtualDubMod.
3. Создание AVS-скриптов и их загрузка в
VirtualDubMod.
Итак, для доступа к видео-материалу мы
создали файл проекта. Теперь необходимо
обработать видео, хранящееся в VOB'ах в
соответствии с нашими пожеланиями. Для решения
этой задачи мы пользуемся AviSynth. AviSynth
- это фреймсервер - программная прослойка между
видео-материалом и программой-кодировщиком.
Кроме того, это специальный скриптовый язык
высокого уровня с набором разнообразных
фильтров для решения задач обработки и
редактирования видео.
3.1. Создание срипт-файла и загрузка его в
VirtualDubMod.
Создадим простейший срипт-файл. На
самом деле это обычный текстовый файл,
содержащий строки-команды AviSynth. Как
создать такой файл? Очень просто: при помощи Блокнота
(или, скажем, WordPad'а). Запустите Блокнот
и наберите в нем следующую строчку текста:
mpeg2source("project.d2v")
Этой строчкой должен будет начинаться
каждый наш скрипт-файл. В нижеприведенных
примерах эта строка для простоты будет опущена.
Сохраните этот файл в папку, где лежат VOB'ы
под именем "project.avs"
(или под именем, ассоциирующимся с названием
фильма).
Теперь можно запустить VirtualDubMod и
открыть в нем созданный скрипт-файл (File
-> Open video file):

Теперь, с помощью AVS-скрипта, видео-материал станет доступен для редактирования и сжатия:

Двигая бегунок (1), пройдитесь по фильму. Обратите внимание на наличие, либо отсутствие признаков интерлейса (гребенки - (2)) в сценах с движением, гостинга (ghosting) - раздвоенных фигур, а также на качество видео-материала - наличие шума, царапин, недостаточную контрастность, неестественные цвета и тому подобное. Кроме того, вы наверняка заметите на видео-кадрах присутствие нежелательной темной (и, возможно, неровной) окантовки по краям (3). Она может присутствовать и сверху и снизу, и с боков. Более того, на отдельных кадрах она может пропадать, а на других - появляться или менять размеры. Может также присутствовать искажение пропорций в кадре (в виде, например, вытянутых или сжатых лиц у людей). Все эти недостатки нам предстоит устранить с помощью AviSynth.
3.2. Встроенный редактор скриптов.
В новых версиях VirtualDubMod появился простой встроенный редактор скриптов. Чтобы вызвать его, выберите в меню Tools пункт Script editor:

Появится окно редактора, в котором вы сможете править скрипты, не выходя из VirtualDubMod:

Чтобы перезагрузить отредактированный скрипт, нужно в меню File редактора выбрать пункт Save & Open as AVI:

3.3. Утилита AvsTweak.
Утилита AvsTweak специально написана для облегчения работы с AVS-сриптами. Она позволяет автоматически создавать скрипты, редактировать их, добавлять фильтры нажатием кнопки мышки, а также такими продвинутыми функциями как: поиск и устранение интерлейса, поиск и выполнение кропинга, выполнение ресайза. Кроме того, в AvsTweak встроен мощный и точный калькулятор, который может расчитать битрейт с учетом пережатия финальных титров:

Кнопкой AVS можно открыть AVS-скрипт файл, а кнопкой D2V (1) можно открыть файл проекта (при этом простейший скрипт-файл будет создан автоматически). В окне (2) можно редактировать скрипт, а кнопкой ReLoad перезагружать его. В окне (3) перечислены наиболее часто употребляемые команды (фильтры) AviSynth, которые можно вставлять и удалять из скрипта простым щелчком мышки. Трек-бар (4) служит для перемещения по кадрам.
4. Избавляемся от интерлейса..
Цель, которой мы будем добиваться на
данном этапе не только устранение этого явления,
связанного с переходом от чересстрочной
кино-развертки к прогрессивной-компьютерной.
Попутно нам, возможно, придется заняться
нормализацией частоты следования и структуры
кадров видео-потока. Здесь возможны несколько
вариантов.
4.1. "Неинтерлейсный" PAL.
В этом случае нам ничего не нужно делать на данном этапе написания AVS-скрипта. Такое видео встречается довольно часто и окончательный AVS-скрипт в таком случае может выглядеть очень просто, например, так:
mpeg2source("project.d2v")
crop(8,8,4,-4)
BicubicResize(640,480)
Однако, даже если пробежка по кадрам
фильма в VirtualDubMod'е не выявила визуальных
признаков интерлейса, рекомендуется сделать
пробное кодирование нескольких кусочков фильма,
чтобы убедиться в отстутствии таких явлений, как гостинг
и дерганье камеры при панорамировании.
4.2. "Интерлейсный" PAL.
В этом случае пробуем несколько вариантов устранения интерлейса. Результат может быть также разным. Либо все варианты работают и существенной разницы между ними нет. Либо какой-то вариант сработает лучше. Либо ни один из них не поможет.
Но начать нужно с определения порядка следования полей в исходном видео-материале. Что такое поля, зачем они и почему так важен их порядок - эти вопросы мы опустим, а собственно процедура определения порядка полей подробно описана на отдельной странице: Определение порядка следования полей. Внимание! Далее во всех скриптах, где требуется указать порядок полей нужно вместо "х" подставить определенный вами порядок: 0 или 1.
При использовании утилиты AvsTweak для определения порядка полей нажмите последовательно кнопки TFF (5) и BFF. Соответстующие скрипт-файлы, призванные помочь определить порядок полей будут созданы и загружены автоматически. После определения порядка полей установите указатель порядка полей (6) в нужное положение (вверх - "0", вниз - "1").
Чтобы опробовать варианты устранения интерлейса нужно добавить в AVS-файл следующую строчку (вместо "x" должен стоять порядок полей!):
Вариант 1 (Telecide без пост-обработки; Telecide - часть мощного плагина Decomb, автор - Donald A. Graft):
Telecide(order=x,post=0)
Вариант 2 (Telecide с пост-обработкой):
Telecide(order=x,post=2)
Вариант 3 (TomsMoComp - Motion Compensating Deinterlace Filter, автор - Tom Barry):
TomsMoComp(x,5,1)
Вариант 4 (Telecide + TomsMoComp - иногда такая комбинация позволяет справиться с интерлейсом лучше, чем каждый фильтр по отдельности):
Telecide(order=x,post=0)
- или post=2
TomsMoComp(x,5,1)
Вариант 5 (ависинковский FieldDeinterlace - в особо запущенных случаях, когда PAL-видео 25 Fps было получено из 24 Fps, Telecide и TomsMoComp дадут рывки, а FieldDeinterlace сделает поплавнее, но увы, ничего не поделаешь - останется гостинг)
FieldDeinterlace()
Возможно вам удасться добиться удаления интерлейса и спервой попытки, в противном случае сделайте все варианты этих скриптов и откройте их в VirtualDubMod'е. Если проблемы не пропали, то, возможно вам встретился один из тех тяжелых случаев, когда или добиться хорошего результата просто невозможно, или же это требует гораздо большего времени и знаний.
При использовании утилиты AvsTweak
для вставки и удаления фильтров в скрипт
нажимайте на соответствующие чек-боксы в окне (3) и жмите после этого кнопку ReLoad.
Перед этим рекомендуется выполнить поиск
интерлейсного кадра кнопкой Test
Interlace. Кнопка Deinterlace
позволяет немного автоматизировать процесс
деинтерлейсинга.
4.2. NTSC.
Пишем и открываем в VirtualDubMod'е (или в AvsTweak) следующий скрипт (назовем его NTSC-1):
Telecide(order=x,post=2)
Decimate(5)
Примечание: по мнению авторитетных
риперов, считается обязательным приведение
фреймрейта для NTSC-источника (29,97
fps) к 23.976 fps. Выполняется это
командой Decimate(5), которая
выбрасывает из видео-потока дублирующий пятый
кадр. Исключение составляют случаи с
"кривым" исходным видео, где при применении Decimate появляется дерганье
изображения. Мы рассматриваем только нормальные
случаи, поэтому Decimate в
скриптах обработки NTSC-видео всегда
присутствует.
Если интерлейс остался, либо присутствуют
небольшие подергивания на статичных сценах
(например, при движении рук), но при поворотах
камеры движения в кадре плавные, то пишем другой
скрипт (NTSC-2):
Telecide(order=x,post=1)
TomsMoComp(x,5,1)
Decimate(5)
Если не помогло, заметны подергивания при повороте камеры или полупрозрачные двоящиеся контуры (гостинг), то оставляем в скрипте только эту строчку (NTSC-3):
Telecide(order=x,post=2)
Открываем его в VirtualDubMod'е (в AvsTweak) и смотрим покадрово. И по результатам просмотра имеем четыре варианта действий:
Вариант 1:
В течение 30-ти кадров, нет ни одного
повторяющегося - это телевизионная съемка и
опробованного скрипта с одной строкой (NTSC-3)
вполне достаточно.
Вариант 2:
Каждый пятый кадр повторяется. Значит,
решение применить Decimate(5) было
верным. Возвращаемся к скриптам NTSC-1 и
NTSC-2. Если результаты не нравятся, пробуем
также NTSC-5/6.
Вариант 3:
В течение фильма встречаются структуры,
описанные в вариантах 1
и 2. Это видео смешанного
типа и что бы мы ни делали те или иные фрагменты
будут подергиваться. В таком случае из двух
вариантов обработки выбираем наименее худший.
Рекомендуется закодировать несколько
проблемных фрагментов фильма с использованием
различных скриптов и сравнить результаты.
4.2. PAL->NTSC.
Вариант 4:
Каждый шестой кадр повторяется (заметить
это бывает непросто, скажем 5-й и 6-й
кадры могут быть почти идентичны, за исключением
изменений типа гостинга - ищите сцены с
интенсивным движением!). Мы имеем дело с
результатом конверсии PAL->NTCS.
Пробуем такое решение - в скриптах NTSC-1 и NTSC-2 вместо Decimate(5) используем Decimate(6).
Если результат не устраивает, пишем скрипт с использованием в Telecide параметра vthresh (NTSC-4):
Telecide(order=x,post=2,vthresh=z) - здесь
значение "z" подбираем примерно от 30
до 150, начать можно с 80-90
Decimate(6)
Если результат неудовлетворительный, пробуем еще два скрипта (NTSC-5):
Bob()
Repal()
или, т.к. Bob иногда лажает (NTSC-6):
SmoothDeinterlace(tff=true,doublerate=true,lacethresh=y)
Repal()
- здесь tff в зависимости от порядка полей ("0" - tff=true, "1" - tff=false; чем меньше параметр y (по умолчанию = 24), тем сильнее деинтерлейс
Но иногда ничего из этого все равно не помогает добиться приемлемого результата, если конверсия PAL->NTCS была сделана слишком криво.
5. Фильтруем.
Дополнительные фильтры обычно располагаются в самом конце скрипт-файла. Однако шумоподавляющие фильтры нужно ставить после Crop, но до Resize. Если такой фильтр будет применен после Resize, то хоть скрипт и будет работать быстрее, но зато и потеряется намного больше деталей.
Описанные ниже фильтры работают с материалом определенного цветового формата (RGB, YUV, YV12). При несовпадении формата AviSynth выдаст соответсвующее предупреждение. В этом случае достаточно вставить перед фильтром одну из следующих команд конвертации цветового формата:
ConvertToRGB()
ConvertToYUY2()
ConvertToYV12()
5.1. Сглаживание и резкость.
Фильтры MipSmooth и _2DCleanYUY2_for_25.
Эти два фильтра хороши для сглаживания
видео-потока, удаления из него шума и мелких
дефектов. Хотя в фильтре MipSmooth есть
настройки для работы как с кино-, так и с
анимационным материалом, для анимации лучше
все-таки использовать специальный фильтр _2DCleanYUY2_for_25.
У фильтра MipSmooth имеется много тонких
настроек, но в большинстве случаев достаточно
воспользоваться готовым набором
"кино"-настроек - пресетом movieHQ.
Вызов фильтра из AVS-скрипта в этом
случае производится строчкой:
MipSmooth(preset = "movieHQ")
Для фильтра _2DCleanYUY2_for_25 необходимо задать четыре параметра: interlaced, thresholdY, radiusX, radiusY. Например:
_2DCleanYUY2_for_25(0,15,3,3)
В данном случае параметры означают: без интерлейса, коэффициент сглаживания 15, размер сглаживаемой "точки" 3 х 3 пиксела.
Противополжный по действию фильтр Sharpen увеличивает резкость картинки. Используется он обычно тогда, когда в выходной картинке недостаточно четко просматриваются мелкие детали (например, лица). Аргумент может принимать значения от 0.0 до 1.0. Типичное применение фильтра выглядит так:
Sharpen(0.25)
5.2. Яркость, контрастность, цветность.
5.2.1. ColorYUV.
Для регулировки яркости, контрастности, а
также для коррекции баланса белого удобно
использовать фильтр ColorYUV. В первом
примере мы просто равномерно увеличиваем
контрастность в каналах Y, U и V:
ColorYUV(cont_y=32, cont_u=32, cont_v=32)
Здесь величина параметра может меняться
от 0 до 256.
Во втором примере решалась задача
одновременного увеличения яркости,
контрастности и корректировки баланса белого
для старого черно-белого фильма:
ColorYUV(gain_y=80,cont_y=25,autowhite=true)
В некоторых случаях, для восстановления очень старых фильмов с низким качеством можно использовать также параметр autogain=true. При этом фильтр сам будет пытаться настроить яркость и контрастность наилучшим образом (насколько это возможно) на протяжении всего фильма:
ColorYUV(autogain=true, autowhite=true)
5.2.2. Tweak.
Другой полезный фильтр - Tweak. У него несколько другой набор параметров:
Tweak(hue, sat, bright, cont)
По умолчанию используются следующие величины:
Tweak(0.0, 1.0, 0.0, 1.0)
Hue можно менять от -180.0 до +180.0, sat - от 0.0 до 10.0, bright - от -255.0 до 255.0 и cont - от 0.0 до 10.0.
5.2.3. RGBAdjust.
Если в обрабатываемом видео-материале
наблюдается недостаток тех или иных цветов,
положение можно исправить, использовав
следующий фильтр:
RGBAdjust(red, green, blue, alpha)
В качестве параметров используются дробные числа от 1.0 и выше. Например в случае
RGBAdjust(1.5, 1.5, 1.25, 0)
мы увеличиваем яркость красного и зеленого цвета в 1.5 раза, а синего - на четверть.
6. Кадрирование и размер.
6.1. Croping (кадрирование).
Для того, чтобы избавиться от темных полос по периметру кадра используется команда Crop. Пример:
Crop(16,40,-16,-40)
В данном случае мы отрезаем слева и
справа по 16 пикселов, а сверху и снизу -
по 40. Значения этих параметров должны
быть кратны 2. Кроме того, видео в
формате YV12 (собственно в таком формате и
находится видео на DVD) должно подаваться
на дисплей со значением ширины кадра, кратной 4.
Важно помнить об этом, когда вы занимаетесь
именно кропингом, а до ресайза дело еще не дошло,
ибо в этом случае после кропинга картинка идет
прямо на экран. Если же после кропинга в скрипте
уже стоит ресайз, то достаточно кратности 2.
Значения кропинга легко подобрать,
редактируя файл AVS, затем сохраняя его и
снова перезагружая в VirtualDubMod (например,
используя встроенный скрипт-редактор), но так
можно ошибиться и отхватить лишнего.
В утилите AvsTweak имеется встроенная функция определения и выполнения кропинга. Нажмите на кнопку Find Light - AvsTweak произведет поиск светлого кадра. Если найденный кадр вас не устраивает, нажмите Find Light повторно. Затем нажмите Test Crop. Если кропинг подобран программой удачно, жмите на Make Crop.
Чтобы подобрать параметры кропинга в VirtualDubMod поступите следующим образом. Также можно воспользоваться возможностями пакета GordianKnot, представляющего собой оболочку "все в одном".
6.2. Resize (пропорции и масштаб).
После кадрирования нужно обязательно сделать ресайз - изменение размера выходного кадра. Ресайз выполняет несколько важных функций: исправляет пропорцию X:Y, приводит размеры X и Y в соответствие с требованиями нормального воспроизведения (X должен быть кратен 32, а Y - 16), производит дополнительное сглаживание картинки. Кроме того, размеры кадра тесно связаны с понятиями (точнее - с их численными эквивалентами) качества и битрейта. Ресайз выполняется командой:
BicubicResize(X,Y)
Исходя из требований кратности 32 по X и 16 по Y несложно построить два ряда значений для ширины и высоты кадра:
- X : 704,
672, 640,
608,
576,
544,
512,
480
- Y : 528, 512, 496, 480,
464, 448, 432, 416, 400,
384, 368, 352, 336, 320,
304, 288
Поскольку, во-первых, пропорции
исходного изображения бывают разными (например: 16:9
или 4:3) и, во-вторых, какое-то (в каждом
фильме разное) количество пикселей бедет
отрезано при кропинге, то выбор правильных цифр
из этих рядов, при условии соблюдения правильных
пропорций в полученном кадре и надлежащего
качества, становится нелегкой задачей.
Вообще говоря, нам достаточно
определиться с размером по X. После чего
размер Y будет определен нами исходя из
необходимости соблюдения правильных пропорций X:Y.
При этом нам, возможно, придется выбирать
значение Y между двумя соседними
числами ряда, одно из которых будет давать чуть
меньшую пропорцию, а другое - чуть большую
пропорцию, в отличие от идеала. В таком случае,
конечно, некоторая погрешность в пропорции X:Y
будет неизбежной..., но: во-первых, не всегда - во
многих случаях погрешности либо не будет, либо
она будет пренебрежимо мала; во-вторых, даже
существенную погрешность можно при желании
полностью устранить, пожертвовав крайними
пикселами кадра, т.е. увеличив значения кропинга
по X или по Y (в зависимости от
знака погрешности).
Почему мы не можем выбрать размеры кадра
произвольно (например по максимуму)? Есть две
важных причины почему мы будем ограничены в
выборе:
- первая: мы не можем выбрать произволный
размер, если мы ограничены в размере выходного
файла (например, мы делаем рип, который должен
быть записан на 1 CD-диск; или мы делаем
рип такого размера, чтобы на DVD-диск
поместилось 4 рипа). Логика здесь такая:
размер выходного файла и длительность фильма
входят в формулу для вычисления видео-битрейта, а
видео-битрейт и размер кадра входят в формулу для
вычисления качества. Поэтому, если мы хотим
получить качественный рип при определенных
размерах выходного файла, мы будем ограничены в
выборе размера кадра;
- вторая: чем больший размер имеет кадр,
тем большую работу должен выполнить процессор,
чтобы в реальном режиме времени распаковать и
отобразить его. Поэтому, даже если мы не
ограничены размером файла, мы не можем выбрать
размер кадра по максимуму, иначе сделанный нами
рип будет в определенных обстоятельствах
воспроизводиться с рывками из-за недостаточной
производительности системы (будь то компьютер
или стационарный плеер), что неприемлемо.
Таким образом, мы подходим к тому, что прежде чем окончательно выбрать размер выходного кадра, нам необходимо определиться с размером файла, а также участь битрейт аудио-потока, короче, заняться калькуляцией.