Метод
пересъемки 8мм пленок на скорости 16,67 к/с
(Turyst04@nextmail.ru)
Для выделения полезной информации из
результатов видео-пересъемки 8мм-кинофильма, проецируемого на
стабилизированной [1]
скорости 16,67 к/с применен AviSynth-фильтр GetDups (от Fizick, http://bag.hotmail.ru/getdups/getdups-rus.dhtml).
В целом метод работы GetDups основан на особенностях видеоклипа, получаемого при пересъемке 8мм фильма, проецируемого с помощью стандартного кинопроектора («Русь», «Луч» и подобных), в котором удален обтюратор. Подробности доработки проектора и другие особенности обсуждаются на форуме ixbt в ветке "Пара вопросов освоившим покадровый захват с 8мм кинопленки." http://forum.ixbt.com/0029/016088-8.html#234
Полученный при такой съемке клип содержит
как
качественные видеокадры, соответствующие остановившемуся кинокадру, так
и
смазанные, захваченные в момент смены кинокадров. В зависимости от
скорости
проекции такой клип обладает разной степенью избыточности. В
видеокамерах системы PAL (наиболее
распространенных у нас) ведется съемка с частотой полей 50 Гц (кадр
складывается из двух чересстрочных полей). Величина этой избыточности
рассчитывается делением частоты видеополей на частоту проекции
кинофильма.
Таким образом на каждый кадр кинофильма при его скорости, например, 5
к/с
выпадет в среднем 50/5=10 видеополей (или 5 видеокадров).
Соответственно на
скорости 16, 67 к/с кинокадру соответствует 3 видеополя (1,5
кидеокадра).
Фильтр GetDups и выполняет выборку из этого избыточного
клипа качественных кадров (из расчета 1 видеокадр на каждый кинокадр),
отбрасывая все лишние (для скорости 5 к/с - это 4 лишних видеокадра, а
для
скорости 16, 67 к/с - пол-кадра, т.е. 1 поле).
Изначально GetDups разрабатывался для обработки клипа,
захваченного при скоростях проекции примерно в диапазоне 4 - 8 к/с.
Для использования GetDups при скорости 16,67 к/с его пришлось слегка
подправить – введен новый режим, направленный на работу с
последовательностью
полей 50 к/с (получаются разложением кадра на поля командой
SeparateFields).
Эта последовательность состоит из групп по 3 поля с, как минимум, двумя
полями,
соответствующими неподвижному кадру, и одним лишним (часто - переходным
между
кадрами, хоть и не всегда).
При идеальной стабильности и совпадении
частоты
сети с частотой полей такое поведение будет устойчивым. В реальной
ситуации
имеет место фазовый сдвиг из-за неравности частот (сети и камеры). При
этом закономерность
«хотя
бы 2 поля подряд,
соответствующих неподвижному кадру»
сохраняется
(разность частот пренебрежимо мала для данного метода). На рисунке 1
наглядно
показано, что даже при самых неблагоприятных условиях, когда момент
захвата
первого поля (П) слегка захватывает фазу движения (кадр смазан),
следующие 2
поля полностью укладываются в фазу неподвижного кадра. По мере смещения
третье
поле в группе начинает «наползать» на фазу движения
(Кадр 5), но к
этому времени
первое поле в группе
уже полностью в пределах фазы неподвижного кадра. При выдержках меньше
10 мс [2]
это
условие выполняется еще надежнее.
Рис.1
Для выбора этого нового режима (точнее его
двух модификаций) в GetDups введен дополнительный
входной
параметра mode:
mode = 0 – несинхронный режим (старый режим, единственный в версиях до 0.5 включительно);
mode = 1 – синхронный режим (16,67 к/с), на выход выдается последовательность по два поля (из трех);
mode = 2 - синхронный режим (16,67 к/с), на выход выдается только 1 поле [3] (из трех)
(default = 0).
Учитываема GetDups последовательность
различий между полями имеет четко выраженный
колебательный характер: на полях, соответствующих неподвижному кадру
различия
минимальны, а на переходных полях - максимальны. Периодичность этих
колебаний -
3 поля. Остается лишь с помощью математической обработки находить все
локальные
максимумы и минимумы в этой последовательности и выбирать два поля,
соответствующих каждому минимуму различий.
Метод опробован, работает стабильно.
Примеры работы приведены ниже:
Avisource("input.avi")
loadplugin("GetDups.dll")
fc=Framecount()
AssumeTFF()
SeparateFields()
GetDups(mode=1)
Weave(AssumeFieldBased)
AssumeFps(16)
Trim(0, fc*2/3)
Avisource("input.avi")
loadplugin("GetDups.dll")
fc=Framecount()
AssumeTFF()
SeparateFields()
GetDups(mode=2)
# Weave(AssumeFieldBased)
Bob(AssumeFieldBased)
#
BilinearResize(720,576)
AssumeFps(16)
Trim(0, fc*2/3)
Некоторые
особенности применения.
Основным преимуществом описанного метода
захвата
кинопленки на скорости около 16,6 к/с является самое быстрое получение
результата: как правило качественные методы захвата (покадровый или с
прямой
пересъемкой и фильтрованием GetDups в основном режиме show=0) выполняются с
существенно более
низкой
скоростью: 4 - 10 к/с.
Следует, однако, принять
во внимание,
что:
а) 8мм пленки часто не отличаются высоким
качеством, в частности, механизмы установки правильной экспозиции в
старых
8мм-камерах были обычно довольно несовершенны, вследствие чего
оптическая
плотность изображений на 8мм-пленке неравномерна. Пересъемка в режиме
автоматического определения экспозиции видеокамеры существенно
уменьшает
влияние этого недостатка. При этом, чем меньше скорость пленки при
проекции,
тем более правильное значение экспозиции
видеокамера успевает
установить (у меня есть пара пленок, на
некоторых
участках которых очень медленный покадровый захват - около 1 к/с -
обеспечил
значительное улучшение).
б) Доработки проектора для реализации
данного
метода существенно больше, чем при несинхронном захвате на скорости до
8 к/с с
обработкой GetDups - не достаточно
лишь удалить обтюратор, а необходимо обеспечить синхронизацию от
частоты сети.
С другой стороны скорость 16 к/с является «родной»
для 8мм
проекторов, потому
можно оставить стандартную проекционную лампу, не заморачиваясь с ее
дополнительной вентиляцией, и переснимать с экрана.
в) Вибрация проектора на скорости 16 к/с
существенно больше, чем на 8 к/с. Это в ряде случаев важно, особенно в
вариантах пересъемки методом макросъемки [4]
- вибрации могут вызывать заметные зигзаги вертикальных линий на
интерлейсном
видео.
Личный опыт захвата и обработки 8мм фильмов
с
применением различных методов позволяет сделать вывод,
что
захват на
синхронизированной скорости 16,6 к/с дает наилучшее
сочетание
скорость/качество при выполнении
ряда условий
(собственно реализация синхронной скорости,
минимизация влияния
вибрации, обеспечение выдержки видеокамеры не более 1/100 при
сохранении
авто-экспозиции). Эти условия вполне выполнимы, хоть и требуют
определенных
усилий. Качество
результирующего материала не
уступает
лучшим
результатам при покадровом
захвате или захвате на меньших скоростях.
Рекомендации: имеет смысл применять при наличии
достаточно больших объемов захватываемого материала. Для разовых работ
проще
использовать метод 1:
несинхронизированный
захват на скорости до 8
к/с с фильтрацией GetDups в режиме mode=0. Метод
2:
покадровый захват (по моему мнению)
является по сложности реализации промежуточным (между захватом на скорости до 8 к/с и методом 3: захватом на синхронизированной скорости
16,67 к/с), а по
скорости
– соизмерим с захватом на скорости до 8 к/с. Максимально
достижимое качество
всех трех методов соизмеримо, и в идеале превышает качество исходного
материала
(кинофильмов 8мм и Super8).
Примечания:
[1]
–
о стабилизации скорости 8мм проекции
смотри:
а) обсуждение на форуме ixbt в ветке “Пара вопросов освоившим покадровый захват с 8мм кинопленки” начиная с 20.01.2005 http://forum.ixbt.com/topic.cgi?id=29:16088:493#493 и
б) статью Хлюпина «8мм
кинофильм
- на видео»
http://www.kirov.ru/~ra4nalr/main/sinhro.htm (рекомендую схему на рис.3)
[2] –
выдержку
менее 10 мс в большинстве
видеокамер можно обеспечить, включив режим съемки
«Спорт».
[3] –
часто
качество 8мм пленок не требует
разрешения 576 строк, а вполне достаточно 288 (одного поля), если же
для
удобства нужно вернуть 576 строк (напимер, при работе в формате DV), то
далее применяем Bob или подходящий ресайз.
[4] – о макросъемке
(съемке с
дополнительным объективом) в применении к 8мм пленкам смотри на том же
форуме
(«…покадровый
захват с 8мм... » примерно
с 11.12.2004) и собственно о макросъемке - отдельную статью «СуперМакро»
http://www.photoweb.ru/prophoto/biblioteka/Macro/supermacro/1.htm