Pull to refresh

Video rip. Часть 2-3. Избавление от обычной чересстрочности (deinterlace)

Working with video *

Содержание


  1. Подготовка DVD
    1. vStrip
    2. DGMPGDec

  2. Обработка видео
    1. Что такое interlace и с чем его едят
    2. Как определить что у нас: progressive, interlaced или telecined?
    3. Избавление от обычной чересстрочности (deinterlace)
    4. IVTC

  3. Сжимаем и запаковываем


Первое, что надо сделать — выкинуть из головы идею воспользоваться фильтром deinterlace из VirtualDub. Я знаю, это непросто, но необходимо. Всё дело в том, что после обработки этим фильтром (с некоторыми настройками) на видео появляются паразитные изображения, например т.н. ghost effect. Выглядит он примерно вот так или вот так. Это ужасно.

Скриншоты для примеров я делал с видео, которым со мной поделился madnut.

Избавляться от чересстрочности мы будем при помощи плагинов для AviSynth. Придумано их много, поэтому все возможные упомянуты не будут. Если забыл ваш любимый — не сердитесь. Подчеркну, что в этой статье не рассматриваются плагины для удаления pulldown и IVTC. О них — потом.

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

Для начала требуется установить правильный порядок появления полей. Top Field First (TFF) или Bottom Field First(BFF). Для этого в AviSynth существуют две команды AssumeTFF или AssumeBFF. Как это сделать хорошо написано здесь. Также, это показывает DGMpgDec. Также, вам в этом может помочь MeGUI. Как? Читайте предыдущую часть, только вместо Source type смотрите на поле Field order.

В результате у вас будет нечто такое:

DirectShowSource("00581.mts")
AssumeTFF()


Перейдём непосредственно к фильтрам.

Bob

Это даже не название конкретного плагина, а название целой техники «Bob deinterlacing». Суть её в том, что частота кадров — удвояется, используя поля в качестве кадров. Одновременно с этим восстанавливаются недостающие строки в каждом поле при помощи интерполяции или дублирования. Минусы вытекают из удвоения частоты кадров — более ресурсоёмкое декодирование и увеличение размера видеопотока.

Считается лучшим методом, если судить только по выходному качеству.

Для применения «Bob deinterlacing» добавьте в конец скрипта команду Bob. В результате получится:

DirectShowSource("00581.mts")
AssumeTFF()
Bob()


Скриншот

YADIF

Название — аббревиатура от Yet Another DeInterlacing Filter. Этот фильтр был портирован для AviSynth Михаэлем Ниедермауэром (Michael Niedermayer). Он проверяет пикселы предыдущего, текущего и следующего кадра для восстановления полей посредством локального адаптивного метода (edge-directed interpolation) и использует spatial check для предотвращения появления большинства артефактов. Подробное объяснение алгоритма здесь.

Один из самых простых в использовании фильтров. У меня версия 0.9.

На вход принимает 4 параметра:

  • 0 — производит temporal и spatial проверки, используется по умолчанию;
  • 1 — то же что и 0, но удваивает частоту кадров (старый знакомый bob);
  • 2 — не производит temporal и spatial проверки;
  • 3 — удваивает частоту кадров, но не производит temporal и spatial проверки.


Скриншоты: 0, 1, 2, 3.

Пример использования:

LoadCplugin("yadif.dll")

DirectShowSource("00581.mts")
AssumeTFF()
Yadif(0)


или, что тоже самое,

LoadCplugin("yadif.dll")

DirectShowSource("00581.mts")
AssumeTFF()
Yadif()


Какой из методов использовать? Используйте — 0, если вы не знаете, что вам нужны другие.

SmoothDeinterlace

Этот плагин посложнее. Имеет кучу всяких параметров для тонкой подстройки. Использовать его, впрочем, достаточно просто.

LoadPlugin("SmoothDeinterlacer.dll")

DirectShowSource("00581.mts")
AssumeTFF()
SmoothDeinterlace()


Можно добавлять разные настройки, например, doublerate — удвоение частоты кадров.

LoadPlugin("SmoothDeinterlacer.dll")

DirectShowSource("00581.mts")
AssumeTFF()
SmoothDeinterlace(doublerate=true)


Скриншоты: по умолчанию, с удвоением.

TomsMoComp

Процитирую официальный источник.

TomsMoComp.dll – это фильтр деинтерлейса, использующий компенсацию движения и адаптивную обработку. Он работает с различной скоростью в зависимости от параметра SearchEffort, который в данной версии варьируется от 0 (просто чуть более качественный BOB-деинтерлейс) до 30 (слишком большой объём вычислений для современных компьютеров). Из этого диапазона реально используется несколько значений (в данной версии 0,1,3,5,9,11,13,15,19,21,max), если задать другое значение, то используется ближайшее из перечисленных. Значения свыше 15 пока ещё не очень тщательно тестировались и, вероятно, их следует избегать.


Собственно, не добавить и не убавить.

Пример использования:

LoadPlugin("TomsMoComp.dll")

DirectShowSource("00581.mts")
AssumeTFF()
TomsMoComp(-1, 1, 0)


Параметр SearchEffort — второй.

Скриншоты для SearchEffort = 1, 30.

На этом, пожалуй, остановлюсь. Какой фильтр использовать, спросите вы? А я отвечу — не знаю. Выбор фильтра сродни спорам о выборе кодека или операционной системы. Пробуйте. Какой вам кажется лучшим — тот и используйте. Если всё же вас раздирают сомнения, то пробуйте сначала YADIF, потом TomsMoComp и если ни один из этих не подошёл SmoothDeinterlace. Чистый Bob используйте в том случае, если вы точно уверены в необходимости его использования.

Скачать TomsMoComp 0.0.1.7
Скачать SmoothDeinterlace 1.5.5
Скачать YADIF 0.9

Дополнения от читателей
Xitsa
Разговор был бы неполным без легендарного скрипта MVBob, считается лучшим в своём роде. О нём лучше прочитать всё, что найдётся на doom9.
Если кто-то хочет попробовать, то вот не очень свежая сборка (зато всё в комплекте).


sabox
А как же TDeint? На мой взгляд, его можно в ряд с вышеперечисленными ставить.

TDeint — это двунаправленый, компенсированный по движению (резкостный) удалитель чересстрочности (деинтерлейсер). Он также может адаптивно выбирать между использованием адаптации к движению по целым полям и по пикселам. Может использовать кубическую интерполяцию, ядерную (матричную) интерполяцию (с переключением временнОго направления), или одну из двух форм модифицированой краевой адаптивной (ELA) интерполяции, которая помогает уменьшить «зубчатые» края в движущихся областях, где интерполяция должна использоваться. TDeint также поддерживает ручную коррекцию пользователем через специальный входной файл и может работать как интеллектуальный преобразователь полей в полноформатный кадр (bobber) или удалитель черестрочности с сохранением исходной частоты кадров, а также как пост-обработчик обратного преобразования телекино (IVTC).
Tags:
Hubs:
Total votes 29: ↑28 and ↓1 +27
Views 38K
Comments Comments 32