rccam (rccam) wrote,
rccam
rccam

Стабилизация видео. Теория и практика. Часть 2.

Продолжаю выкладывать материалы статьи по стабилизации видео. В этой части рассматриваются сложные случаи cтабилизации.


Сложные случаи

Бывают, конечно, случаи, когда Deshaker выдаёт не совсем устраивающий результат. Сила этого фильтра не в том, что он всегда работает хорошо, а в том, что почти всегда его можно заставить работать неплохо. То есть регулированием различных параметров добиться вполне удовлетворительного, а иногда — и отличного результата. Сейчас мы поговорим о таких сложных случаях.

Прежде всего, если что-то не устраивает, то надо определить причину. Их может быть две: неподходящие настройки второго этапа проявляются в основном в том, что возникают артефакты по краям изображения, связанные с компенсацией границ при наличии заметного движения около них между кадрами. Ещё раз подчеркну, что применяемый в Deshaker метод заполнения границ не имеет аналогов среди доступных фильтров, но и он не всегда даёт хороший результат. В таком случае надо просто уменьшить эти границы либо введением дополнительного зума, либо снижением плавности (в т.ч. и кратковременным, за счёт Max correction limits). Это было рассмотрено в секции про второй проход.

Другая причина связана с неправильным определением движения на первом проходе для отдельных кадров или групп кадров. Проявляется это в дёрганиях в соответствующих местах (это может быть смещение кадра, резкий наклон или прыгание увеличения). В этом случае надо регулировать настройки первого прохода и переделывать его целиком или частично. Если число моментов дёрганий невелико, то есть смысл пройтись по ним непосредственно: запомнив номера кадров, на которых этот эффект проявляется, и переключившись обратно на первый проход, чтобы посмотреть на определяемые вектора движения. (Если использовались будущие кадры, то из номера кадра на втором проходе надо вычесть число будущих кадров). В большинстве случаев на первом проходе в эти моменты происходит что-то неправильное — либо движение вообще не определяется (слишком мало валидных векторов), и кадр считается началом новой сцены, либо же "фокус внимания" фильтра перескакивает с одного объекта на другой (в частности, фон).



Правильно определенное общее движение фона

Неправильно определённое движение - смесь фона с движущимся объектом

В приведённых последовательных кадрах движение камеры было примерно одинаковым, но в первом случае оно определилось правильно по движению фона, а во втором — неправильно, захватив объект и вынужденно выкинув часть фона. На самом деле в последних версиях Deshaker такая ситуация, скорее всего, не возникнет благодаря более "интеллектуальной" системе слежения за объектом на фоне, выраженной в галке Remember discarded areas to next frame. По умолчанию она включена и призвана сосредоточиться на движении фона, даже если объект, постепенно увеличиваясь, занимает бОльшую часть кадра. Другая полезная "ручка", применение которой может дать нужный эффект, но сильно замедлить работу, — Deep analysis if <X % of blocks are OK. Если в этом поле стоит ненулевое значение (скажем, 25%), то при количестве "белых" векторов, меньших заданного (в процентах от общего числа блоков с определёнными векторами движения, а не от всех блоков), то включается механизм "глубокого анализа", который перебирает различные гипотезы относительно движущихся в разные стороны объектов и может сосредоточиться на фоне, даже если он занимает небольшую площадь.

С этими установками связаны настройки отбрасывания векторов движения, не подходящих под общую картину. Discard motion of blocks that move > X pixels in wrong direction управляет отбраковкой таких блоков (они становятся красными). Если камера находится в одной точке и общий фон не движется существенно (как, например, листва в лесу на ветру), то движение блоков фона должно очень хорошо описываться общими значениями смещения/поворота, поэтому этот параметр можно снизить до 1, выкидывая т.о. всё что не относится к фону. (При этом можно и задать размер блока (Block size) поменьше, например, 16-24 пикс.) С другой стороны, если камера движется относительно фона, то можно и задать побольше значение в этой графе, чтобы "ловить" побольше векторов движения.

Также существует и более ручной способ управлять отбрасыванием разных частей кадра, задавая игнорируемые области в секции Ignore pixels inside ... и outside ... Например, если снимать в движении, то в нижней части кадра наверняка будут объекты переднего плана, движущиеся относительно "неподвижного" фона. Их можно отрезать, задав значение в поле Outside / Bottom. С другой стороны, "мешающий" объект в центре кадра можно попытаться ликвидировать через Ignore pixels inside. Правда, если он реально движется по кадру, то довольно скоро выйдет за пределы игнорируемой области или же придётся задавать её слишком большой, что нежелательно. С другой стороны, обычно это требуется максимум для нескольких кадров подряд, так что можно прогнать их с нужной установкой и подклеить соответствующие значения в общий log файл. В конечном итоге, надо добиваться того, чтобы все белые вектора относились к фону, а красные или отсутствующие — к движущимся объектам. Хотя в некоторых ситуациях может оказаться предпочтительнее следить за движением объекта, а не фона.

Если фон малоконтрастный (небо, снег), то для многих блоков не могут быть достоверно вычислены вектора движения, т.к. не удаётся точно отождествить их в предыдущем кадре. Такие блоки вообще не будут иметь векторов движения. Если хочется как-то ослабить эту отбраковку, можно поиграть значениями в полях Discard motion of blocks that have match value <X и that have 2nd best match > best — Y. Если определённых векторов движения слишком мало (особенно если меньше, чем задано в графе Skip frame if < X % blocks are OK, что приведёт к пропуску анализа кадра), то нужно попытаться уменьшить "критичность" отбраковки путём уменьшения этих двух параметров. Кроме того, по умолчанию не используются слишком тёмные области (Ignore darker than ..), т.к. в них невелика контрастность и много шумов. Также можно применить такой трюк: на первом этапе добавить в цепочку фильтров перед Deshaker что-нибудь типа Levels или Brightness/Contrast, и "разогнать" контрастность для нужных областей (светлых или тёмных), чтобы детектор движения лучше работал. Перед вторым проходом, конечно, дополнительный контраст нужно удалить.

Для всех тонких настроек лучше выставить в максимум поля Scale (=Full) и Use pixels (=All), хотя это замедляет обработку в 2-3 раза. В конечном итоге, ничто не мешает проводить тонкую настройку параметров для отдельных участков клипа, проходить по этим участкам вручную (стрелкой вправо) и затем совмещать полученные значения с основным log-файлом (который, конечно, надо сохранить под другим именем). Формат этого файла текстовый и довольно очевидный — в каждой строке идут величины смещения по X, Y, вращения и зума для данного кадра (если видео было чересстрочным — то отдельно для первого и второго по времени поля). Начало новой сцены (кадр, для которого не удалось определить движение), помечается дополнительным флагом new_scene. Если какие-то кадры отсутствуют в log-файле, они учитываются с нулевым движением (но не с флагом новой сцены). Однако, если какой-то кадр никаким способом не удалось "распотрошить" детектором движения, то лучше задать ему не нулевые значения, а сходные с ближайшими кадрами — так можно избежать рывка в конечном видео. В принципе, можно использовать опцию Append to file (для повторяющихся кадров используется последнее заданное значение), но лучше всё же сохранять отдельные куски лога в другой файл и затем вклеивать в основной только нужные кадры. Также может пригодиться следующий трюк: использовать разные настройки для определения смещения и поворота, а затем совмещать лог-файлы "по столбцам". Например, снимая фигуру человека на каком-то фоне движущейся вокруг него камерой, мы можем захотеть привязаться по движению к центру композиции — человеку, но из-за того, что он и сам движется, и камера движется вокруг него, горизонт будет "плавать". Можно прогнать первый проход с учётом только центра кадра, определив смещения, а затем — ещё раз с учётом периферии, определив повороты относительно горизонта, и вставить в первый log-файл столбец с поворотами из второго. В общем, варианты ручного вмешательства могут быть самыми разными.

Пару слов об организации "техпроцесса". Ясно, что лучше стабилизировать отдельные сюжеты, а не весь фильм (т.е. лучше при захвате делать нарезку сцен в отдельные файлы), причём ещё до включения видео в монтажную программу. Можно, впрочем, действовать следующим образом: монтировать с исходными файлами, а перед окончательной сборкой (render, export) заменить их на стабилизированные с теми же именами и параметрами, а исходные переложить в другую директорию. При этом первый проход фильтра можно провести в пакетном режиме (Virtual Dub job control) для всех требуемых файлов (только не забыть писать всё в отдельные log-файлы), а вот второй этап, скорее всего, придётся делать вручную (если использовать махинации с future frames и append avi segment). Впрочем, если не жалко последние 25-30 кадров и не напрягают пустые кадры в начале, то можно оба прохода делать в автоматическом режиме. На первом этапе тогда пригодится опция Video output: none. Также, чтобы не вводить постоянно значения параметров, их можно сохранить, используя опцию VirtualDub Save/Load processing settings (это относится не только к параметрам Deshaker, а и ко всем остальным настройкам VirtualDub — кодеки, параметры звука и т.д. — короче, удобно иметь один или несколько сохранённых пресетов обработки).

Итак, Deshaker — очень мощный и гибкий инструмент, отлично работающий на стандартных настройках и дающий широкие возможности для ручного вмешательства. Он имеет уникальный алгоритм заполнения краёв, что решает одну из главных неприятностей стабилизации. К недостаткам его можно отнести не очень удобное использование (в отдельной программе, а не в вашей любимой монтажке), необходимость предпринимать специальные меры для включения возможности работы с будущими кадрами, медленную скорость работы. Если вас интересует качественный результат любой ценой и вы готовы возиться с настройками, то Deshaker — лучший выбор.


В следующих заметках по теме будут рассмотрены альтернативы фильтру Deshaker —, а также проведен сравнительный анализ работы нескольких фильтров.

Tags: перепост, практика, стабилизация видео, теория
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 2 comments