XviD.Ru DVD через AviSynth в AVI/XviD. V1


Яндекс.Метрика Рейтинг@Mail.ru правильный HTML5 правильный CSS
Развитие детей ЭСТЕР
Облачный рендеринг. Быстро и удобно
☆ от 50 руб./час ☆ AnaRender.io
У вас – деньги. У нас – мощности. Считайте с нами!
English version

Непреодолимые ограничения описанного процесса


Установка необходимых программ

Ссылки на упомянутые здесь программы содержат некоторые минимальные варианты установки, помещённые в виде отдельных файлов на одном сервере с этой документацией. Если Вы воспользуетесь wget или teleport с соответствующими ключами, Вы выкачаете не только эту документацию, но и весь необходимый софт.

Версии практически всех устанавливаемых программ не принципиальны. Если Вы установите более позднюю, то, как правило, все утверждения данного текста для неё будут верны.

Кодеки

Всё, что Вам требуется для получения результата - один видеокодек и один аудиокодек.

Утилиты командной строки

Никакой установки не требуется, просто распакуйте их в каталог, находящийся в PATH.

Программы, распаковываемые в каталоги

Установка заключается в создании каталога вида C:\Program Files\PGMNAME\, распаковку ZIP архива С ПОДКАТАЛОГАМИ в этот каталог и создании удобных Вам шорткатов на исполняемый файл программы

AviSynth 2.5.* и наиболее используемые плагины

Программы обработки субтитров

Расшифровка криптованных DVD

Установить DVD Decrypter

Программа редактирования текстовых полей в AVI

Установить ABCAVI

Обработка DVD

Этап "Copy or Decrypt"

Сначала просто попробуйте скопировать фйлы с DVD на винт. Если процесс споткнулся на первом же большом файле, воспользуйтесь программой DVD Decrypter и скопируйте файлы на винчестер через него (например, в каталог D:\FILM\). Выберите только файлы фильма, как правило, это самый большой по размеру комплект файлов, имена которых начинаются с VTS_NN. Вы должны получить файлы:

D:\FILM\VIDEO_TS\vts_01_00.ifo
D:\FILM\VIDEO_TS\vts_01_00.vob
D:\FILM\VIDEO_TS\vts_01_01.vob
D:\FILM\VIDEO_TS\vts_01_02.vob
D:\FILM\VIDEO_TS\vts_01_03.vob
D:\FILM\VIDEO_TS\vts_01_04.vob
это и есть результат данного этапа.
Открываем IFO файл DVD

Этап "Graphic Subtitles"

Если на DVD присутствуют английские субтитры и субтитры языка, который установлен у Вас в системе, то я настоятельно рекомендую превратить их в текстовые файлы (Этап Text Subtitles). Если же на DVD находятся субтитры языков, отображение текста которых затруднено или невозможно в Вашей стране, правильным будет сохранить такие графические субтитры в формате, проигрываемом DirectVobSub фильтром. Выбираем потоки субтитров

Сделать это следует до упаковки видео, чтобы при вычислении необходимого битрейта видео учесть размер довольно больших по размеру бинарных файлов графических субтитров.

Запустите шорткат VobSub Configure.lnk из пакета VobSub:


файлы filmname.sub и filmname.idx - результат этого этапа.

Этап "Text Subtitles"

Запустите Subripper
маленькие текстовые файлы russian.srt, english.srt - результат этого этапа.

Этап "DVD2AVI"

Запустите DVD2AVI, откройте файл D:\FILM\VIDEO_TS\vts_01_01.vob (ЗАМЕТЬТЕ! _01.VOB, НЕ _00.IFO и НЕ _00.VOB). Вы увидите картинку:
DVD2AVI автоматически открывает следующие файлы
Нажмите OK.
большие двоичные файлы T0...*.AC3,
маленький текстовый файл film.d2v - результаты этого этапа.

Этап "Build Script"

Общие замечания

Основной принцип работы AviSynth заключается в некотором универсальном методе обращения к видеоинформации, помещённой в .vob и в других файлах. VirtualDub или avs2avi открывают .avs файл так, как будто это обычный видеофайл. На самом деле они передают его в AviSynth.dll, а от неё уже получают распакованные кадры.

Если у Вас ещё нет опыта в написании скриптов - начните с создания текстового файла FILM.AVS и поместите его в тот же каталог, где лежит FILM.D2V. Содержимое файла FILM.AVS:


LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\MPEG2Dec.dll")
mpeg2source("film.d2v")

Запустите VirtualDubMod

Что делать с чересстрочной развёрткой?

Общие замечания по IVTC

Выберите сцену с движением (лучше в одном направлении) и достаточно чёткими краями. Просмотрите её покадрово кнопкой "стрелка вправо". Если Вы видите ХОТЯ БЫ ЧАСТЬ кадров "расчёсанными", Вам следует совершить над материалом процесс "Inverse Telecine", дабы получить приемлемый для просмотра результат. Если Вы плохо представляете, что это такое, сначала прочтите эту документацию

Простейший путь совершить IVTC процесс - использовать плагин Decomb

Вот пример изменений в FILM.AVS (добавлено, пример NTSC DVD):


LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\MPEG2Dec.dll")
Loadplugin("C:\Program Files\AviSynth 2.5\plugins\decomb.dll")
mpeg2source("film.d2v")

Telecide(post=false,guide=2,blend=false)
Decimate(cycle=5)

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

Прочтите документацию на Decomb, дабы понимать, что Вы делаете и какие параметры в функциях Telecide и Decimate следует ставить. Наиболее стандартные ситуации:

Таблица установок Decomb

fps на DVD итоговый fps нужные строки в скрипте .AVS
DVD структуры NTSC, сделанный с FILM оригинала
Вы видите 2 прогрессивных кадра, затем 3 "расчёсанных"
ИЛИ 3 прогрессивных кадра, затем 2 "расчёсанных". Период 5 кадров
30 24 Telecide(post=false,guide=2,blend=false)
Decimate(cycle=5)
29.97 23.97
DVD структуры NTSC, сделанный из PAL оригинала
Вы видите 2 прогрессивных кадра, а за ними 4 расчёсанных. Период 6 кадров
30 25 Telecide(post=false,guide=3,blend=false)
Decimate(cycle=6)
29.97 24.975
DVD структуры PAL, сделанный из PAL оригинала.
25 25 Telecide(guide=1)
25 (обратный порядок полей) 25 Telecide(guide=1,reverse=true)
DVD структуры PAL, сделанный из FILM оригинала дублированием 1 из 24-х кадров
25 24 Telecide(guide=1)
Decimate(cycle=25)

Сложные случаи. Ручная работа.

Некоторые сложные и повреждённые потоки не могут быть корректно восстановлены плагином Decomb. Если после применения строк из вышеприведённой таблички Вы не смогли получить картинку без "расчёсок" или "двоящихся контуров", следует более внимательно рассмотреть, не изуродована ли оригинальная картинка.

Закомментируйте все Telecide-Decimate строки. Вставьте строку:
SeparateFields() в конец файла FILM.AVS.

Перезагрузите файл в VirtualDub и просмотрите внимательно на получившиеся картинки. Сейчас Вы видите _поля_ или полукадры по отдельности. Если Вы видите, что хотя бы часть таких полукадров "расчёсана" или "двоится", - это испорчен при изготовлении DVD сам доставшийся Вам материал, и нет никакого способа это исправить.

Правда, если испорчены таким образом НЕ ВСЕ картинки, Вы можете попытаться отобрать только нормальные и пересобрать видеопоток из них, выкинув испорченное. Для этого понадобится функция SelectEvery() и много терпения.

SeparateFields()
SelectEvery(10, 1,2,3,4, 6,7,8,9 )
Weave()

Вот такой пример для обработки DVD, построенном из FILM оригинала путём вставки дополнительного пятого поля, сделанного процедурой "blend" из двух его "соседей". Хотя Decomb по большей части ловит такие поля, из-за повышенного интеллекта при сравнении он порой выкидывает "не то" поле на практически статичной сцене. Что приводит к нарушению порядка полей и подёргиванию (bobbing) картинки вверх и вниз. Данный же простой скрипт восстанавливает исходный поток, выкидывая порченые кадры без дополнительных размышлений.

Итогом данного пункта должно стать нормальное, без рывков, движение и отсутствие артефактов "интерлейсинга" на всех кадрах фильма.

Корректировка соотношения сторон кадра

Основная информация: Обычно DVD файлы содержат верную информацию об отношении сторон пикселов. Однако порой эта информация неверна. Поэтому я всегда проверяю отношение сторон пикселов и преобразую картинку в состояние "пикселы квадратные".

Методика (с применением VirtualDub):

Например, измеренный размер изображения Солнца 220 x 221 пиксел не требует коррекции Aspect Ratio. Если же мы получили изображение Солнца размером W x H = 160 х 180 пикселов, нам следует уменьшить высоту картинки, умножив её на коэффициент 160/180. Здесь стоит учитывать, что неточность определения правильной высоты картинки в пикселах примерно равна отношению полной высоты картинки к высоте измеренного объекта. Если в данном примере Вы при измерении объекта ошиблись на 1 пиксел, то в размере картинки ошибка составит 2 пиксела.

Изменения скрипта (добавлена строка):


LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\MPEG2Dec.dll")
Loadplugin("C:\Program Files\AviSynth 2.5\plugins\decomb.dll")
mpeg2source("film.d2v")

Telecide(post=false,guide=2,blend=false)
Decimate(cycle=5)

BicubicResize(704,320,0,0.75,8,60,704,360)

Заметьте, что коричневые числа 8,60,704,360 - это те самые значения, которые Вы сохранили на этапе "DVD2AVI", и они предназначены для корректного обрезания краёв картинки.

Синие числа 704,320 - есть измерения картинки после resize. Если вместо них вы поставите "коричневые" 704,360, ресайза не будет, будет только обрезание.

Выбор конечного размера кадра

На самом деле для большинства видеоматериалов не так уж важен точный размер сделанной Вами картинки. Да, чем больше пикселов приходится на одну и ту же часть картинки, тем чётче изображение тонких деталей. Поэтому я предпочитаю сохранять настолько большое разрешение картинки, насколько это возможно. Однако большая картинка требует большего битрейта и большей мощности процессора при воспроизведении.

Как же выбрать верные величины? Прежде всего вспомним, что мы хотим поместить фильм на малое количество 700-мегабайтных болванок. Это означает, что 1-1.5 часа видео должны поместиться в 570-600М. Таким образом, диапазон привлекательного битрейта составляет примерно 600-1000кбпс. Например, мы насчитали 800к битрейт для 1.5 часового фильма.

Отмечу, что нет НИКАКОГО резона применять битрейт выше 1300 на DVD материале.

Кое что ещё о уменьшении битрейта и улучшении качества

Возьмём 1 секунду - это 24 картинки по (704 х 320) пикселов. Что примерно равно 5 мегапикселов в секунду. Поделим 800к на 5М и получим 0.16 бит на пискел.

Есть эмпирическое правило, по которому значение 0.2 бита на пиксел достаточно для большинства фильмов, пакуемых в мпег4. В нашем случае для того, чтобы получить 0.2 вместо 0.16, надо или поднять битрейт до 1000, или уменьшить размер картинки до 4 мегапикселов.

Мой опыт показывает, что при применении кодека XviD разумная величина этого параметра составляет 0.11-0.12 для чёрно-белых и 0.14-0.16 для цветных фильмов. Пример краевого эффекта при некратном 32 размере

Далее, все мпег4 кодеки разбивают картинку на блоки размером 32 х 32 пиксела. В случае НЕкратного 32-м размеру кадра некоторые кодеки дают "краевые эффекты" самого порой неприятного вида, заметность которых максимальна на мультипликационном материале. Для примера см. картинку справа от этого абзаца. На ней изображены кусочки трёх последовательных кадров с титров фильма "Kikujiro no natsu", в котором розовый объект движется по равномерно окрашенному фону из-под края экрана направо. Кодек - DivX 5.11 Pro, при ЛЮБОМ качестве упаковки вылазящий объект оставляет за собой "кильватерный след". Формат картинки - 720*304 пиксела. При сведении обоих измерений к кратным 32 значениям дефект пропал.

Поэтому имеет смысл откорректировать ширину и высоту так, чтобы они были кратны 32. В нашем случае проще всего уменьшить итоговую ширину до 696 пикселов, частично распределив это уменьшение на стадии обрезания и масштабирования. Итак последняя строка нашего примера:

BicubicResize(696,320,0,0.75,10,60,700,360)

Этап "VideoPack" упаковки видео

Замечание. Почему я не использую VirtualDubMod для этого шага? В нём есть обработчик ошибок, который интерпретирует таймауты, порождённые обработкой картинки в AviSynth как ошибки чтения: Обработчик ошибок чтения

Это наиболее долгий и процессороёмкий этап работы. Запускаем:

avs2avi film.avs video.avi -p 0 -P 2 -s codec.ini

При появлении диалога конфигурации кодека выбираем сначала первый проход, устанавливаем его параметры, нажимаем Ok и устанавливем параметры второго прохода кодека и нажимаем Ok.

Пока пакуется видео, можно продолжить распознавать субтитры. :)
video.avi - результат этого этапа.


Этап "SoundPack" упаковка звука

Это можно делать отдельно, на другом компе.

Для каждой нужной звуковой дорожки (T01...AC3, T02...AC3,...):

russian.wav, japan.wav - результаты этого этапа.

Этап "VirtualDubMod"

Чтобы собрать окончательный AVI файл, запускаете VirtualDubMod. В течение довольно короткого времени файл будет записан.
Если Вы сделали более чем 1-дисковый вариант, Вам следует поделить получившийся AVI файл на две части. Замечу, что при VBR MP3 у вас МОГУТ быть проблемы с синхронизацией звука во второй части... Хехе.

Нажимаете Ctrl-стрелка влево. Нажимаете кнопку Home.

Делить AVI файл следует непременно по КЛЮЧЕВОМУ кадру, для этого просто перемещайтесь клавишами Shift-стрелки, следя за размером, который виден в VirtualDubMod. Найдя правильную точку деления, нажимаете End. Теперь у вас выделена первая часть фильма. File -> Save As AVI -> именуете файл filmnam1.avi.

Теперь в этой же точке нажимаете Home. Если фильм делится на две части - нажимаете Ctrl-стрелка вправо и End. теперь у вас выделена вторая часть. File -> Save As AVI -> именуете файл filmnam2.avi.

filmname.avi или filmnam1.avi filmnam2.avi - результат этого этапа.


Этап "AVI tags"

AVI файл содержит помимо видео и аудиопотоков ряд текстовых полей. Часть из них показываются программами-проигрывателями. Вы сделаете хорошую работу, если внесёте в эти поля верную информацию. Наилучшее место, где Вы можете почерпнуть сведения о фильме - база данных IMDB.COM.

Запустите ABCAVI, откройте filmname.avi (или сразу filmnam1.avi, filmnam2.avi) и отредактируйте:

Если Вы делаете двух и более дисковый вариант, не забудьте нажимать кнопочку "Clone tag" для каждого поля, кроме поля "Part" (в него впишите номер части). Конечно, Вы можете заполнить и прочие поля.

Этап "SubKonv"

Если у Вас есть файлы субтитров на двух разных языках, лучший способ сохранить их для последующего просмотра - применить различные форматы файлов при именах, идентичных имени файла AVI. Один из файлов оставляется в .srt формате, второй конвертится в .smi. Эти оба формата понимают и большинство современных плееров, и ffdshow, и DirectVobSub. При этом и те и другие субтитры можно будет выключить. filmname.srt, filmname.smi - результаты этого этапа.

Как сделать наиболее удобно проигрываемый CD

Диск с видеоданными обязан содержать ДАННЫЕ, а не программы. Чем большую долю оригинального DVD потока Вы сохранили, тем лучше результат.

Пользователь выбирает программы для проигрывания видео по СВОЕМУ вкусу, под свою операционную систему. НЕ ПЫТАЙТЕСЬ делать выбор за него. НЕ помещайте на диск свой любимый видеоплеер, не тратьте на это место.

Не лениться!

Список файлов на таком CD


Файлы с используемыми в этом процессе программами и указанием версий

© May-2004 Sergej Qkowlew AKA Radahnar. FIDO 2:5020/122

P.S. Что мне интересно и почему нет

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

Я принимаю коррективы и пожелания по данному тексту в формах:

Я ИГНОРИРУЮ неконструктивные реплики вида "Твой софт слишком старый!" или "У меня есть кульная софтина!", или "Я знаю единственно верный способ!".

Я читал много документации на все эти темы. Не повторяйтесь. :)

Сейчас я использую в качестве кодека XviD 1.0 RC3. Я тестировал DivX 4.12, 5.02, 5.11Pro, но не нашёл ни единой причины для их преимущественного применения в риповании с DVD. Я не занимаюсь рипованием с VHS, поэтому не берусь судить о том, лучше или хуже какой-либо кодек для других применений. Мне ещё не доводилось работать с потоками формата картинки большего, чем 720 x 576 пикселов, поэтому я не утверждаю ничего и про HDTV и аналогичные источники.

Для обоснования применения другого кодека Вам следует предоставить:


© 2004 Sergej Qkowlew. Разрешается использование текста, используемых в нём графических файлов, яваскриптов, файлов с табличными данными и элементов оформления полностью или частично в любых целях, КРОМЕ как для дезинформации кого-либо относительно материалов, произведений искусства, проектов, лиц, организаций, событий. Ссылку на источник давать разрешается.