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

    Содержание


    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).

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 32

      +4
      а по кодированию туториалы предвидятся?
      интересует h264(x264) и всякие его хитрости. а то периодически возникает необходимость перепаковать в него, но как обычно времени разобраться до конца не хватает и приходится откладывать основательное изучение «на потом», которое обычно не наступает :(
      в целом вроде на выхлопе картинка получается довольно неплохая, но попадались рипы в том-же(±) размере но гораздо приятнее для глаза. хотелось бы достись такого же уровня но я минимальным вложением времени в изучение вопроса. типа толковый гайд почитать :)
        +1
        Да, будут. Я, правда, не маэстро сжатия h264, но что знаю — опишу.
          +1
          ну, тоесть, я в общем-то знаю какие настройки выставить для получения хорошего качества, но научного объяснения некоторых — не знаю. :)
            +1
            мне бы этого вполне хватило :)
            просто иногда приходится «пережимать» 1080p в 720p (компег слабоват и не всегда тянет FullHD в VS1(?)), да и для друзей-товарищей 720p тоже вполне достаточно. и, блин, замечаю, что результат какой-то размытый что ли…
              0
              Здесь большую роль играют не только настройки h264, но и выбор фильтра для ресайза.
                +1
                пробовал bicubic'и, bilinear'ы, lanczos'ы… результат примерно одинаковый. есть подозрение что я недокручиваю чего-то именно в параметрах кодирования со всякими субпикселями и микроблоками :(
            +2
            позволю себе поделиться хорошей ссылкой
            zoltan0.livejournal.com/tag/h264
              +2
              ай спасибо!
              действительно хорошА!..
              0
              В MediaInfo, кстати, можно подглядеть с какими параметрами делался рип — строка Encoding settings (Настройки программы). Копию 1:1 сделать, конечно, не получиться (про использованные фильтры узнать нельзя), но будет от чего оттолкнуться.
              +1
              Разговор был бы неполным без легендарного скрипта MVBob, считается лучшим в своём роде. О нём лучше прочитать всё, что найдётся на doom9.
              Если кто-то хочет попробовать, то вот не очень свежая сборка (зато всё в комплекте).
                +1
                Да, он, кстати, и самый медленный :)
                  +1
                  Чуток поторопился, самый медленный MCBob от Didée, вот один из тредов, где он обсуждается.
                  Вот про него кто-то однажды сказал glacial speed :)
                  0
                  Сейчас добавлю упоминание о нём.
                  +1
                  А как же TDeint? На мой взгляд, его можно в ряд с вышеперечисленными ставить.

                  TDeint — это двунаправленый, компенсированный по движению (резкостный) удалитель чересстрочности (деинтерлейсер). Он также может адаптивно выбирать между использованием адаптации к движению по целым полям и по пикселам. Может использовать кубическую интерполяцию, ядерную (матричную) интерполяцию (с переключением временнОго направления), или одну из двух форм модифицированой краевой адаптивной (ELA) интерполяции, которая помогает уменьшить «зубчатые» края в движущихся областях, где интерполяция должна использоваться. TDeint также поддерживает ручную коррекцию пользователем через специальный входной файл и может работать как интеллектуальный преобразователь полей в полноформатный кадр (bobber) или удалитель черестрочности с сохранением исходной частоты кадров, а также как пост-обработчик обратного преобразования телекино (IVTC).
                    0
                    я его оставил на часть про ivtc
                      0
                      а, стоп, напутал. >_<
                        0
                        добавил упоминание про него
                        +1
                        Всем, кому интересно, про перекодирование видео и про то, что такое telecine, pulldown, deinterlace можно почитать в одном из мануалов к mencoder (идет с свободным плеером Mplayer), там все описано, довольно-таки подробно, но при этом понятным языком.
                          +1
                          www.mplayerhq.hu/DOCS/HTML/ru/menc-feat-telecine.html

                          Ссылочку забыли :) Поддерживаю, познавательная дока на русском по телесину, чересстрочности, как распознать и как с этим бороться с помощью mencoder.

                          Я, честно говоря, надеялся услышать об особенностях работы разных фильтров для деинтерлейсинга кодека libavcodec и mencoder, для справки из перечисленных только yadif поддерживается mencoder'ом.

                          Хочу также заметить, что беря во внимание не только раздел про деинтерлейсинг у mplayer и mencoder довольно объемная и полная документация которая может потягаться с доками многих других программ аналогичного рода.
                        0
                        ох как удачно тема вылезла в топ.
                        Кассеты закончились, слил все на комп и теперь изучаю что с этим делать.
                        У меня камера может снимать в прогресиве, но строб какой то слишком заметный на мой взгляд получается, все из за 25к/c как я понял.
                        Правильно ли я понял, что удвоение частоты кадров при деинтерлейсе, для того что бы сохранить 50к/c?
                          0
                          Вот смотрите.

                          У нас есть PAL видео 25 кадров в секунду с чересстрочностью. Другими словами это 50 полукадров в секунду. Полукадры на то и полукадры, что они занимают половину кадра (по высоте в два раза меньше). Два полукадра компьютер показывают в одном кадре, т.е. первая строка от первого полукадра, вторая от второго, третья от первого и т.п. Так как полукадры сняты в разные промежутки времени, то наблюдается артефакты.

                          Полукадры, кстати говоря, можно посмотреть при помощи AviSynth командой Separatefields().

                          Суть Bob в том, что полукадры выводятся не в одном кадре, а в разных и каждый полукадр расширен по размеру до целого кадра. В результате мы и получаем 50 кадров в секунду.
                          0
                          Спасибо за статьи, как раз заинтересовался созданием качественных рипов.
                          Другие фильтры (ресайз, сглаживание, резкость и т.д.) будете в следующих статьях рассматривать?
                            0
                            Я думал об этом. Может быть упомяну ресайз.

                            Вообще у меня к фильтрам очень предвзятое отношение. Везде где их можно не применять я их и не применяю. Больше вреда чем пользы. :\
                            0
                            а почему на первом скирншоте лоли незаghostилась?
                            мёртвая чтоль?
                              0
                              Она в этот момент не двигалась.
                              0
                              а по теме — в этом плане былобы полезно прокомментировать — ПОЧЕМУ деинтерлейс такая нетривиальная задача, и в чём плюсы/минусы разных методов.

                                0
                                ага. насчёт «почему» дошёл до первой части. но там всёравно весьма смутно.
                                  0
                                  А что конкретно непонятно. Почему это заслуживает отдельного внимания или вообще что это такое?
                                    0
                                    Какой фильтр использовать, спросите вы? А я отвечу — не знаю. Выбор фильтра сродни спорам о выборе кодека или операционной системы. Пробуйте. Какой вам кажется лучшим — тот и используйте.

                                    если следовать этому совету, то вся статья становится какбы вообще не нужной, ибо никаких новых знаний, кроме факта наличия множества фильтров не несёт.

                                    я зарулил в этот блог с главной, и поэтому слабо представляю результат работы скажем, spatial и temportal проверок. даже после прочтения предыдущих частей.
                                    скриншот с птицею не сильно проясняет ситуацию.
                                    в результате статья оставляет ощущение how-to — «нажмите сюда и получите вот это», без особых объяснений причин и чего именно получится.

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

                                      всё же я привёл чуть ниже последовательность :)

                                        0
                                        слабо представляю результат работы скажем, spatial и temportal проверок.

                                        Тут речь не про них. Это всё тонкости работы отдельных фильтров. Наверное, я дойду и до этого, но этим подробностям точно место не в этой статье.

                                        в результате статья оставляет ощущение how-to

                                        Стараюсь попроще. Думаете стоит усложнить? Вообще я хотел делать это постепенно, потому что сразу пускать ужасающие тексты всё-же «не айс», как мне кажется.

                                        я мог бы покруитить алгоритмы и параметры какой-нибудь другой приблуды

                                        Да они везде почти одни и те-же.

                                        В общем ваши предложения я понял — подумаю как добавить тонкостей, может как-нибудь отдельно напишу. Пока даже и не знаю. Просто, нудная математика вообще мало кому будет интересна, хотя, кто знает. :)

                                Only users with full accounts can post comments. Log in, please.