Обработка видео: описание дополнительных фильтров
Лучший, на мой взгляд, deinterlace фильтр для VirtualDub'а, хотя и не идеальный. Обеспечивает несколько частично пересекающихся режимов де-интерлейсинга. Обрабатываются только не статичные области фильма. Здесь рассмотрен фильтр версии 2.7b2.
Основные опции:
Frame-only differencing - опция по умолчанию, в расчет принимаются различия в цвете точек между кадрами. Если точка неидентична этой же точке в предыдущем и кадре, она считается движущейся и подлежит обработке. Самый быстрый способ.
Field-only differencing - в расчет принимаются различия в цвете точек между полями (т.е. точка сравнивается с точками сверху и снизу). Если точка неидентична этой же точке в предыдущем и последующем полях, она считается движущейся и подлежит обработке.
Frame-and-field differencing - комбинирует два предыдущих метода. Самый медленный способ.
Выбор метода деинтерлейсинга зависит, как показывает практика, непосредственно от фильма. Идеальный деинтерлейс, особенно для видео с быстрым движением, практически невозможен. Наша задача состоит в том, чтобы свести появление артефактов деинтерлейса к минимуму. К сожалению, невозможно (в достаточно удобной форме) применить различные установки для разных участков фильма. Для того, чтобы проверить, какие установки для данного фильма лучше всего, можно выбрать три эпизода из фильма (статичный, с умеренным перемещением и с быстрым перемещением), применить на них фильтр и, меняя установки (можно со включенной опцией Show motion areas only, о ней чуть ниже), выбрать, какой режим смотрится лучше всего для всех трех эпизодов. Как правило, лучшие результаты для видео, оцифрованного с видеокамеры, получаются с использованием первого метода с включенным режимом Blend instead of interpolate in motion areas, либо с использование третьего метода.
Дополнительные опции:
Compare color channels instead of luma - если опция выбрана, фильтр будет сравнивать цветовые значения (RGB), тогда как в случае отключения опции будет сравниваться luminance составляющая. Включение опции улучшает качество деинтерлейсинга для фильмов, в которых присутствуют большие области одного цвета (мультфильмы), тогда как для обычных фильмов эту опцию следует отключать.
Show motion areas only - Опция просмотра. Во включенном состоянии в окне просмотра VirtualDub'а будут показываться только области видео, где будет применен фильтр - т.е. области, считающиеся движущимися. Полезна для принятия решения, какой метод использовать и какие значения порога выставлять.
Blend instead of interpolate in motion areas - когда опция включена, фильтр в движущихся областях использует пикселы только из одного поля, интерполируя изображение, в статических областях используются оба поля. Если опция включена, фильтр будет смешивать цвета линий сверху и снизу, размывая тем самым как артефакты интерлейсинга, так и само изображение. Какой способ лучше, выбирать вам - у каждого есть свои недостатки: интерполяция выдает небольшие "ступеньки" и подчас имеет цветовые артефакты, смешивание цветов, в свою очередь, немного понижает четкость деталей и образует отражения (эффект гало) движущихся предметов.
Use cubic for interpolation - используется только для интерполяции: при включенной опции используется более медленный, но зато более точный метод интерполяции (по 4м линиям).
Motion map denoising - для того, чтобы избавиться от "ступенек" желательно использовать низкие значения порога (threshold), но при низких его значениях цветовой шум начинает восприниматься как движение - в итоге мы имеем своеобразные искорки в обработанном видео и уменьшаем эффективное разрешение фильма (так как размер движущихся областей возрастает). Чтобы избежать этого, включите данную опцию - в этом случае фильтр будет совершать дополнительные проверки на шум на стадии определения областей движения. Конечно же, скорость обработки при этом упадет, причем достаточно заметно.
Motion Threshold - порог, пороговое значение, определяет разницу сравнения пикселей для определения, статичный ли пиксель или нет. Чем больше значение порога, тем больше артефактов останется в итоговом видео, чем меньше значение - тем меньше будет эффективное разрешение итогового фильма. Приемлемые параметры зависят от конкретного фильма и составляют 15-25 для использования фильтра с отключенным Motion map denoising и 10-20 - с включенным. Для того, чтобы пронаблюдать эффект понижения или повышения порога, включите опцию Show motion areas only и меняйте значения порога - в окне предпросмотра увидите производимые изменения.
Scene Change Threshold - иногда смена сцены случается между полями кадра, в этом случае фильтр может отработать некорректно. Чтобы избежать этого, введен этот параметр. Если количество пикселей (в процентах) в движущихся областях кадра превысит это значение, весь кадр будет расценен как движущийся и подлежащий обработке. Следует заметить, что данная проверка выполняется до Motion map denoising
"Продвинутые" опции:
Тут необходимо отвлечься для объяснения некоторых технических вопросов. Как правило, видеоматериал состоит из ряда B1T1-B2T2-B3T3-..., где B - Bottom Field (нижнее поле), T - Top Field (верхнее поле), число - номер оригинального кадра, а тире разделяет кадры. При захвате этот порядок может поменяться, причем в зависимости от ситуации и характерных особенностей карты захвата, возможны четрые варианта (от ситуации: начать захват с верхнего или нижнего поля; от карты: располагать в памяти вначале нижнее поле, а потом верхнее или наоборот):
1. B1T1-B2T2-B3T3...
2. T1B1-T2B2-T3B3...
3. T1B2-T2B3-T3B4...
4. B2T1-B3T2-B4T3...
И все было бы здорово, если было бы всегда так - мы бы просто указали фильтру, в каком порядке нужно расставить (сдвинуть) поля. Но бывает ситуация, когда мы имеем дело с "неправильным" потоком, который выглядит как B1T2-B2T3-B3T4-.... Этот поток будет замечательно отображаться на чересстрочном телевизоре, но при захвате и последующей попытке сделать деинтерлейс нам обеспечена головная боль. Для этого в фильтре предоставлены "продвинутые" опции, которые позволяют нам исправить входящий поток непосредственно перед деинтерлейсом.
Swap fields on input - поменять поля в кадре на входе.
hift field phase by one - сдвигает поля вправо на одно поле. Пример: T1B2-T2B3-T3B4... -> xxT1-B2T2-B3T3...
Swap fields on output - поменять поля в кадре на выходе (т.е. после первых двух действий).
Disable Motion Processing - не делать деинтерлейс, использовать фильтр только для упорядочивания потока.
Рассмотрим все возможные ситуации ситуации, нетрудно прикинуть с помощью комбинаторики, что будет восемь вариантов:
1. B1T1-B2T2-B3T3... - нормальный поток, ничего не надо делать.
2. T1B1-T2B2-T3B3... - включаем Swap fields on input.
3. T1B2-T2B3-T3B4... - включаем Shift field phase by one.
4. B2T1-B3T2-B4T3... - включаем Swap fields on input и Shift field phase by one.
5. B1T2-B2T3-B3T4... - включаем Shift field phase by one и Swap fields on input.
6. T2B1-T3B2-T4B3... - включаем все три опции.
7. T2B2-T3B3-T4B4... - включаем Swap fields on input.
8. B2T2-B3T3-B4T4... - нормальный поток, ничего не надо делать.
Понятно, что структура потока известна заранее в редких случаях, поэтому я всегда подбираю "на глаз" - включаю самый быстрый деинтерлейс (Frame-only differencing) и смотрю на правильность получаемой картинки, если картинка "неправильная", подбираю "продвинутые" опции. Отмечу, что никогда не мог получить "неправильный" поток, захватывая поток с помощью ATI Radeon с видеокамеры Video8 , в то время как с VHS - сплошь и рядом. Покажу на примере, в примере использован только фильтр деинтерлейсинга, очистки и сглаживания я специально не делал:
Кадр с черестрочным видео (хорошо заметны сдвиги при быстром перемещении объекта)
Пытаемся сделать деинтерлейс без использования "продвинутых" опций. Результат:
Видно характерное "гало", появляющееся из-за неправильного чередования полей. Выставляем опцию Swap fields on input, с удовлетворением созерцаем результат:
Плюсы и минусы:
Плюсы: Лучший фильтр деинтерлейсинга для VirtualDub'а! Наличие большого количества опций позволяют подобрать оптимальный режим обработки для конкретного фильма. используются неплохие алгоритмы нахождения шума, сравнивается до 4 полей входного видео, имеется возможность нормализовать поток.
Минусы: К сожалению, качество деинтерлейсинга уступает профессиональным и даже обычным (но платным или поставляемым вместе с оборудованием или программным обеспечением для видеомонтажа) фильтрам. Не поддерживается режим деинтерлейсинга с одновременным понижением разрешения по вертикали (реализуемый, к примеру, Ligos Gomotion, который используется при захвате на видеокартах ATI и в некоторых программах захвата, например, PowerVCR - уже на стадии захвата: судя по всему, используется информация из 6 (!) полей, разрешение по вертикали уменьшается до 432, что вполне приемлемо для VHS и Video8, при этом практически полностью убираются шумы и артефакты чересстрочной развертки - и это в реальном времени!). Плюс к этому фильтр весьма медленный (особенно с включенными опциями шумоподавления и кубической интерполяции), не оптимизированный - проигрывает в этом плане встроенному в VirtualDub фильтру. Слегка сложен для новичков.
1. QS Deinterlace Filter.
Фильтр, основанный на идее Дональда Графта, автора Smart Deinterlace. Сохраняя качественные свойства предка, новый фильтр реализует более оптимизированный алгоритм, значительно превосходя Smart Deinterlace по скорости на процессорах Intel с поддержкой SSE и SSE2 (PIII, Coppermine Celeron'ы, PIV). Авторы не собираются останавливаться только на оптимизации фильтра по скорости - предложены формулы для улучшения качества картинки. Так как в целом опции нового фильтра и его пока предка равнозначны, мы не останавливаемся на них.
2. Deinterlace - area based.
Фильтр имеет сходство с предыдущим в том, что обрабатывает только лишь те области, которые в этом нуждаются, причем только в тех кадрах, которые бы имели без деинтерлейса артефакты. Однако на некоторых фильмах (с очень медленным движением либо с субтитрами, которые отличаются в различных полях) он может давать лучший результат, чем Smart Deinterlace. Здесь рассмотрен фильтр версии 1.2.
Опции:
Show deinterlaced areas onlyShow deinterlaced areas only - будет показывать в preview окне VirtualDub'а только области, где будут производиться изменения - т.е. области, которые фильтр считает нестатическими.
Blend instead interpolate - смешивает цвета из разных полей вместо того, чтобы отбросить информацию одного, чтобы полностью интерполировать линии на основе другого поля.
Threshold - контроль за уровнем деинтерлейсинга - чем меньше число, тем большая площадь подвергнется обработке.
Edge detect - границы некоторых реальных объектов фильтр легко может принять за артефакты интерлейсинга. Данное число позволяет контролировать это процесс: более высокое значение оставит большее количество границ нетронутыми.
Плюсы и минусы:
Плюсы: Хорош для фильмов с очень маленьким движением. Позволяет быстро прикинуть (с включенной опцией Show deinterlaced areas only) как лучше провести деинтерлейс.
Минусы: Слабоватый фильтр для любительского видео или фильмов. Уступает по качеству Smart Deinterlace и QS Deinterlace.
3. Deinterlace MAP (Motion And Pixel Based)
Потенциально фильтр, подающий большие надежды, как сочетающий в себе одновременно идеи Smart Deinterlace и Deinterlace - area based фильтров, применяя их вместе в определенных пропорциях. Теоретически способен дать хороший результат.
Опции (Deinterlace Settings):
Threshold - то же самое, что и раньше: уровень обнаружения артефактов чересстрочности: чем меньше значение, тем больше точек подвергнется обработке.
Edge Detect - данное число позволяет контролировать сравнение артефактов и реальных границ объектов: чем больше число, тем большее количество границ останутся нетронутыми.
Опции (Motion Detection):
Enable - разрешает или запрещает карту движения объектов (или пикселей)
Smooth Map - использование спец. методик размытия картинки, если выделено
Threshold - разница между пикселями в ращных кадрах, чтобы посчитать пиксель движущимся.
Плюсы и минусы:
Плюсы: Высокий потенциал.
Минусы: Сложно подобрать опции для конкретного фильма. Медленный.
4. Deinterlace - PAL movie.
Фильтр для "ненастоящей" чересстрочности. Иногда бывает при захвате в 25 кадров в секунду (не 50 полей в секунду), что карта неверно распознает поля, принадлежащие к разным кадрам и смешивает их в один. Вот для этого случая и применяется этот фильтр. Он вставляет одно поле между такими неразделенными полями. При этом этот фильтр должен применяться первым.