Videoforum - форум о видео и не только!


Вернуться   Videoforum - форум о видео и не только! > Видеосъёмка и монтаж. > Кодеки и кодеры, кодирование и конвертация.

Важная информация

Кодеки и кодеры, кодирование и конвертация. Тут обсуждаются вопросы изменения формата видео, качество работы кодировщиков, а так-же известные проблемы и решения соответствующие тематике раздела.

Ответ
 
Опции темы
Старый 29.10.2013, 13:50   #1
Жрец Нефтиды
Модератор
 
Аватар для Жрец Нефтиды
 
Регистрация: 15.07.2012
Адрес: Санкт-Петербург
Сообщений: 1,288
Сказал(а) спасибо: 283
Поблагодарили 403 раз(а) в 271 сообщениях
Вес репутации: 355
Жрец Нефтиды has a brilliant futureЖрец Нефтиды has a brilliant futureЖрец Нефтиды has a brilliant futureЖрец Нефтиды has a brilliant futureЖрец Нефтиды has a brilliant future
По умолчанию Качественный просмотр сильно зашумлённых фильмов

На счастье, таких фильмов сейчас уже не так много, но всё же осталось некоторое количество. Например, "Продавец воздуха" http://rutracker.org/forum/viewtopic.php?t=2319091 и "Обратной дороги нет", вот этот релиз чуть получше http://rutracker.org/forum/viewtopic.php?t=310143
Случай №1. "Продавец воздуха". В начале фильма идёт реклама, её нужно отсечь. Загружаем вобы в DGIndex, скачем по ключевым кадрам кнопкой ">". Когда в верхней части DGIndex-а замаячит "Vob 2", начинается собственно фильм. Отмечаем начало кнопкой"[", и дальше действуем, как описано в статье "Тонкости перекидывания файлов в контейнер "Матрёшка". Получили файл mkv. Если смотреть этот mkv безо всякой обработки, то видим, что видео зашумлено до безобразия и вдобавок имеет остаточную интерлейсность. Интерлейсность-то откуда взялась в фильме, снятом изначально на киноплёнку? Ясное дело, откуда: бракоделы цифровали не с оригинальной киноплёнки, а с электромагнитной плёнки для аналогового TV.
Я исследовал все мыслимые и немыслимые комбинации просмотра, до которых смог дотянуться. Самый качественный результат даёт следующий подход, который оставляет далеко позади все другие шумопонижающие подходы. В ffdshow ставим птицу у вкладки "AviSynth". Саму вкладку заполняем так:
LoadPlugin("FluxSmooth.dll")
Grayscale()
FluxSmoothST(temporal_threshold=50, spatial_threshold=50)
Важно понимать, что при задействовании вкладки "AviSynth" те плагины, которые через неё загружаются, либо должны находиться непременно в системной папке System32, либо путь к плагинам должен быть задан явно. То есть вкладка "AviSynth" должна выглядеть именно и конкретно так:

Также важно на этой вкладке задать буфер для определённого количества кадров. 10 кадров вперёд и назад – лучшее решение для данной задачи.
Темпоральный и пространственный пределы шумопонижения в FluxSmoothST задаются в зависимости от степени зашумлённости фильма. Мне представляется разумным всегда задавать их равными между собой. Одна из главных положительных особенностей FluxSmoothST – что он абсолютно не создаёт призраков при смене сцены при любых пределах шумопонижения (чего нельзя сказать про 3D шумодав от Физика).
Со строкой Grayscale() всё понятно: она служит для удаления остаточных цветовых разводов чёрно-белой киноплёнки. Если фильм цветной, то этой строки, естественно, быть не должно.
Данный "Продавец воздуха" имеет ещё и остаточную гребёнчатость. Чтобы её устранить, задействуем в ffdshow вкладку "Деинтерлейс". Поскольку гребёнчатость остаточная, то давить её луче всего при помощи "5-и точечный ФНЧ". Обязательно ставим птицу у опции "Обрабатывать кадры, отмеченные как прогрессивные". Потому что довольно часто кадры с остаточной, а порой и с явной гребёнчатостью имеют метку прогрессивных кадров.
Важно! Для получения качественного результата деинтерлейсинг должен предшествовать шумопонижению. Когда мы в ffdshow задействуем вкладки "Деинтерлейс" и "AviSynth", то какая из них будет отработана первая? А? В документации к ffdshow лично я не нашёл ответа на этот вопрос. Не там искал, следопыт? Так вот утверждаю, что вкладка "Деинтерлейс" будет отработана первой. То есть именно так, как нам и надо. Как я это выяснил – объясню в конце статьи.
Ну а дальше читаешь статью "Качественный просмотр видео файлов на компьютере" и наслаждаешься качественным просмотром некачественно оцифрованного фильма. Разумеется, чтобы всё прошло, официальный стабильный AviSynth у тебя должен быть инсталлирован.
Шумодавство – вещь затратная с точки зрения ресурсов процессора. При просмотре на Плеере Классик Хоумсинема смотрим, сколько кадров в секунду пережёвывает компьютер. Если столько же, сколько и fps исходного видео файла – значит, баксы на новый комп могут ещё полежать в папином кармане. Ну а если меньше… Если фильм чёрно-белый, то 601 и 709 ни на что не влияют. Поэтому смело идём в ffdshow на вкладку "Вывод" и ставим птицу также и у "YV12". (Птицу у "RGB32" можно не убирать: всё равно вывод теперь пойдёт по YV12.) Осуществляя вывод напрямую по YV12, без преобразования в RGB, мы довольно сильно разгрузим процессор. Но если это не помогло поднять реальную частоту воспроизведения кадров до fps, или если фильм цветной – то точно лезь в папин бездонный карман.
В качестве эксперимента могу порекомендовать следующее. Поскольку плагина для AviSynth, в котором был бы реализован 5-и точечный ФНЧ, не существует, то используем ядерный алгоритм из TDeint, и деинтерлейсим весь кадр. Пишем такой скрипт:
LoadPlugin("DGDecode.dll")
LoadPlugin("TDeint.dll")
MPEG2Source("1.d2v")
Grayscale()
TDeint(type=2, hints=false, full=true, sharp=true, slow=2, mthreshL=0, mthreshC=0)
И такой:
LoadPlugin("DGDecode.dll")
LoadPlugin("TDeint.dll")
LoadPlugin("FluxSmooth.dll")
MPEG2Source("1.d2v")
Grayscale()
TDeint(type=2, hints=false, full=true, sharp=true, slow=2, mthreshL=0, mthreshC=0)
FluxSmoothST(temporal_threshold=50, spatial_threshold=50)
То есть в одном скрипте только деинтерлейсинг, а в другом деинтерлейсинг и FluxSmoothST. Открываем каждый из них в Виртуал Дабе и сравниваем кадры. Мы увидим, что FluxSmoothST даже с такими большими пределами удаляет практически только зерно и шумы и почти не затрагивает полезную деталь. Ближайший конкурент FluxSmoothST-а – "Медиана" от Физика – даёт гораздо худший результат.
Если сможешь придумать комбинацию ещё лучше – с удовольствием поэкспериментируем.
Случай № 2. "Обратной дороги нет". Вот здесь гребёнчатость более ощутимая. Поэтому есть смысл задействовать ядерный алгоритм деинтерлейсинга. Наблюдения показали, что для сильно зашумлённых исходников всегда лучше деинтерлейсить весь кадр. Алгоритм "5-и точечный ФНЧ" всегда деинтерлейсит весь кадр. Ну а чтобы "Ядерный деинтерлейс" деинтерлейсил весь кадр, нужно ограничение сдвинуть в 0. Вот так:

Этот фильм менее шумный, чем "Продавец". Поэтому для него пределы шумопонижения в FluxSmoothST устанавливаем где-то около 30.
Случай №3. Некоторые вполне современные кинокамеры иногда пишут с сильным зерном и (или) шумом. Действуем точь-в-точь как в случае №2, но, разумеется, без строки Grayscale(). Если камера прогрессивная, то вкладку "Деинтерлейс", ясное дело, не задействуем. Подбираем пределы шумопонижения на глаз и наслаждаемся. Разумеется, видео из кинокамеры может быть закодировано любым кодеком. Важно, чтобы декодирование производилось именно ffdshow. Поскольку видео всяко цветное, то на вкладке "Вывод" птица должна стоять только у "RGB32".
Если твой компьютер – зверь, то во всех трёх случаях можно попробовать комбинацию FluxSmoothST только в темпоральном режиме + Физик в 2D режиме. Вот так:
FluxSmoothST(temporal_threshold=50, spatial_threshold=0)
FFT3DFilter(wintype=0, plane=0, sigma=20, bt=1, bw=32, bh=32, ow=16, oh=16)
Да, да, чтобы подавить такие шумы, как в "Продавце", сигму нужно поднять где-то аж до 20. Если бы мы использовали Физика в 3D режиме, то при таком огромном сигма призраки были бы местами почти как изображения. Здесь призраков не будет вообще. Но, повторяю, чтобы всё это прокрутить в режиме реального времени, компьютер должен быть зверь. Да и результат ненамного превзойдёт собственно FluxSmoothST.
Случай №4. "Поезд-призрак" http://rutracker.org/forum/viewtopic.php?t=2011504 Шума как такового здесь нет. Проблема в другом. Весь фильм в вобах записан с частотой 30000/1001. При этом на каждые пять кадров первые три кадра – прогрессивные, а два последние – искусственно разбитые на поля интерлейсные. Такая ситуация описана в статье "Деинтерлейсинг, удаление зернистости и шума", Случай № 5-2. Попробуй этот "Поезд" посмотреть напрямую на любом плеере, и тебе захочется материться по-древнеегипетски. Ну а если хочешь смотреть качественно и наслаждаться, то делаешь так. Вкладку "Деинтерлейс" в ffdshow вообще не задействуешь. Вкладку "AviSynth" заполняешь так:
LoadPlugin("TIVTC.dll")
TFM(mode=5, slow=2)
TDecimate()
Если твой древнеегипетский процессор не успевает обрабатывать нужное fps, то можно значительно облегчить его рабское бытие, задав TFM без опций. То есть просто TFM(). Результат будет практически таким же, а для подавляющего большинства кадров и в точности таким же. Проверено.
Каким в этом случае должен быть буфер? В принципе, 10 кадров должно хватить с избытком, так как здесь TDecimate() отправляет на казнь один кадр из каждых пяти. Но можно попробовать и поднять до максимального значения – 99. Тут весь вопрос состоит в том, где именно будут храниться эти буферные кадры. Если оперативная память большая, то храниться будут в ней, и это здорово. Если не очень большая – то часть буферных кадров будет храниться в файле подкачки, что совсем не здорово, так как к файлу подкачки доступ идёт медленнее, чем к оперативке. Попробуй!
Также хочу напомнить, что на момент написания этой статьи последний релиз ffdshow, в котором мы можем явно включать и отключать оптимизаторы на вкладке "Информация & ЦПУ" – это ffdshow_rev4483_20120822_clsid.exe. Я пользую только его и всем того же советую.
И напоследок – обещанная конфетка для продвинутых египтян. Берём демюксированный MPEG-2 видео поток "Продавца воздуха", как я говорил, с отрезанной рекламой. Прогоняем через DGIndex. Ищем любой кадр с максимально сильной гребёнчатостью и сложной структурой. Я, например, экспериментировал на кадре №6610. Пишем такой скрипт:
LoadPlugin("TDeint.dll")
LoadPlugin("FluxSmooth.dll")
LoadPlugin("DGDecode.dll")
MPEG2Source("1.d2v")
Greyscale()
TDeint(type=2, hints=false, full=true, sharp=true, slow=2, mthreshL=0, mthreshC=0)
FluxSmoothST(temporal_threshold=50, spatial_threshold=50)
То есть в данном скрипте, как и положено по закону, вначале идёт деинтерлейсинг, потом шумопонижение.
Открываем этот скрипт в Виртуал Дабе, выходим на кадр №6610 и сохраняем его в bmp под именем "как надо.bmp".
Теперь пишем такой скрипт:
LoadPlugin("TDeint.dll")
LoadPlugin("FluxSmooth.dll")
LoadPlugin("DGDecode.dll")
MPEG2Source("1.d2v")
Greyscale()
FluxSmoothST(temporal_threshold=50, spatial_threshold=50)
TDeint(type=2, hints=false, full=true, sharp=true, slow=2, mthreshL=0, mthreshC=0)
Открываем этот скрипт в Виртуал Дабе, выходим на кадр №6610 и сохраняем его в bmp под именем "как НЕ надо.bmp".
Смотрим эти два bmp в ACDSee и убеждаемся, что "как надо", естественно, лучше, чем "как Не надо". Причём различие весьма ощутимое на глаз.
Перегоняем демюксированный MPEG-2 в матрёшку 1.mkv. Заполняем вкладки ffdshow в точности, как описано в случае №1, но только деинтерлейс задаём ядерный: ведь в скриптах мы деинтерлейсили именно по ядерному алгоритму.
Сделать снимок кадра с конкретным номером Плеером Хоумсинема довольно затруднительно. Поэтому пишем такой скрипт:
DirectShowSource("1.mkv")
Открываем его в Виртуал Дабе. Если всё сделал правильно, то в правом нижнем углу панели задач должен засветиться тёмно-красный квадратик ffdshow. Скачком выходим на один из предыдущих кадров, например, на 6600. Кнопкой со стрелкой вправо двигаемся вперёд, пока не увидим наш экспериментальный кадр (это не обязательно будет 6610). Сохраняем его в bmp. Просматриваем в ACDSee этот кадр, кадр "как надо" и кадр "как НЕ надо". Убеждаемся, что данный кадр на глаз в точности соответствует кадру "как надо" (конечно, небольшое побайтное различие всё же будет). Описанный здесь эксперимент неопровержимо доказывает, что ffdshow вначале отрабатывает вкладку "Деинтерлейс", а потом вкладку "AviSynth".
Если захочешь выйти со мной на связь напрямую – то: nefezida83@mail.ru
Жрец Нефтиды вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
Demkoff (29.10.2013), Vitaly (31.10.2013)
Реклама на форуме
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Качественный просмотр видео файлов на компьютере Жрец Нефтиды Кодеки и кодеры, кодирование и конвертация. 133 20.04.2017 22:30
Качественный просмотр фильмов с остаточной интерлейсностью Жрец Нефтиды Кодеки и кодеры, кодирование и конвертация. 0 27.02.2013 13:14
Качественный просмотр и конвертирование файлов dav с видеорегистраторов Жрец Нефтиды Кодеки и кодеры, кодирование и конвертация. 2 16.02.2013 19:11


Часовой пояс GMT +1, время: 15:39.




Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot