Deshaker это стабилизатор видео для VirtualDub. Он устраняет дрожание камеры и делает смещение, вращение и масштабирование плавным.
Возможности:
Установка
Скачайте Deshaker, скопируйте Deshaker.vdf в папку фильтров VirtualDub и перезагрузите VirtualDub.
Краткий справочник
Здесь описаны минимально необходимые операции по стабилизации видео
Полный справочник
Параметры по умолчанию подходят для большинства случаев. Однако, изменив некоторые установки, вы всегда можете получить лучшие результаты для конкретного видеоклипа. Для этого необходимо понимать, как работает фильтр и здесь дано описание его работы.
Как работает фильтр
В течение первого прохода фильтр пытается найти смещение, вращение и масштабирование таким образом, чтобы, применив эти значения к текущему кадру, мы получили бы кадр похожий на предыдущий. Для этого берутся блоки пикселей из обоих кадров и находится взаимное смещение, обеспечивающее минимальную разницу между блоками. Сначала ищется общее движение, для этого масштаб (количество элементов) изображения уменьшается и вычисляется начальное смещение всего кадра. Это смещение затем уточняется в удвоенном масштабе, где количество элементов в четыре раза больше относительно предыдущего, затем масштаб еще раз удваивается и так далее. В завершении мы получаем смещения (или вектора движения) для всех блоков кадра. Фильтр затем находит оптимальные значения смещения, вращения и масштабирования кадра, основанные на этих векторах движения, эти значения записываются в лог-файл.
На втором проходе, на основании данных лога, рассчитывается оптимальное движение камеры с целью сглаживания его траектории. Затем фильтр преобразует каждый кадр в соответствии с этим движением.
Установки
Параметр |
Описание |
Source pixel aspect |
Сообщает фильтру соотношение сторон пикселя в исходном видеоклипе. Очень важно правильно указать это значение, иначе например вращение будет сделано некорректно |
Video type |
Выбор между прогрессивным и чересстрочным видео (для входного и выходного клипа). Если видео чересстрочное вы также должны указать порядок полей. Вообще, DV использует LFF, а все другие форматы используют UFF. Вы можете легко проверить правильность значений посмотрев на вектора движения для двух полей во время воспроизведения клипа. Если большую часть времени вектора ориентированы в противоположные стороны, то значение выбрано неправильно. |
Log file |
Имя лог-файла, который записывается на первом проходе и читается на втором. |
Append to file |
Если установлено, новые данные будут добавляться к файлу вместо перезаписи |
|
|
Video output |
Определяет, что показывается на экране в процессе первого прохода. Если выбрано Motion vectors вы будете видеть предыдущий кадр со стрелками показывающими как движутся блоки по сравнению с текущим входным кадром. Только белые стрелки используются для вычисления параметров смещения, вращения и масштабирования. Для чересстрочного видео оба поля будут показаны, первое над последним. |
Block size |
Ширина и высота блоков, используемых для сопоставления. |
Scale |
Максимальный масштаб при анализе кадров. Full самый качественный, но очень медленный |
Use pixels |
Сколько пикселей в блоке используется в сравнении. All самый качественный но очень медленный |
Color mode |
Анализ кадров может быть в цвете или без (серая шкала). Серая шкала немного быстрее, но сопоставление хуже. Этот параметр не влияет на отображение цвета в выходном клипе на втором проходе. |
Initial search range |
В максимально уменьшенном масштабе, этот процент определяет максимальное смещение при сопоставлении блоков. Низкие значения немного ускоряют процесс. |
Когда фильтр переходит к удвоенному масштабу в процессе анализа, приблизительное движение уже известно. Differential search range определяет на сколько пикселей может еще измениться смещение относительно этого значения. Низкие значения делают процесс быстрее, но если в клипе есть очень быстрые/большие вращения и/или масштабирование, сопоставление может не получиться для некоторых блоков. |
|
Discard motion of blocks that have match value less than X |
Если итоговое значение смещение для определенного блока будет меньше указанного здесь значения, этот блок не будет участвовать в анализе. Блоки, зависящие от этого блока в более высоком масштабе, также будут игнорироваться. Вектора движения этих блоков не будут показаны во время первого прохода. |
Discard motion of blocks that have 2nd best match larger than best minus X |
Если, в процессе анализа, для какого-то блока будет найдено смещение, которое будет отличаться от предыдущего больше чем на указанную величину, этот блок будет игнорироваться. Такое может получиться для однородных участков кадра (напр. голубое небо), где любое найденное фильтром смещение будет ложным. Блоки, зависящие от этого блока в более высоком масштабе, также будут игнорироваться. Вектора движения этих блоков не будут показаны во время первого прохода. |
Discard motion of blocks that move more than X pixels in wrong direction |
Во время расчета, вектора движения некоторых блоков могут противоречить общей траектории. Если вектор движения какого-то блока дает смещение больше чем на указанное количество пикселей в ложном направлении, он исключается из расчета траектории. Такие вектора показаны красным цветом во время первого прохода. Т.к. любое движение камеры отражено в кадре только двумя координатами, такие вектора могут отражать изменение перспективы, когда она меняется достаточно сильно. Это может быть на широкоугольных камерах при быстром приближении/удалении. В этих случаях следует увеличить Х (или может быть ограничить область анализа зонами кадра с удаленной панорамой). Когда камера неподвижна, "эффект перспективы" низкий и можно использовать низкие Х для повышения точности. |
Skip frame if less than X percent of blocks are ok |
Если достоверными будут признанны меньше чем Х процентов всех блоков (другими словами большинство блоков игнорируются), этот кадр пропускается (смещение и вращение устанавливаются как 0, масштабирование как 1) |
Ignore image area outside area |
Только area используется в анализе. Если вы отметите Let area follow motion область будет следовать за траекторией между разными кадрами. Вы можете использовать это если вы хотите стабилизировать движущийся объект вместо фона. Только не ожидайте при этом хорошей работы J |
Ignore image area inside area |
Area не будет использована в анализе. |
|
|
Destination pixel aspect |
Указывает фильтру соотношение сторон пикселя выходного видео. Если предполагается просмотр на компьютере следует установить квадратный пиксель. |
Destination video size |
Размер кадра выходного видео. |
Resampling |
Алгоритм обработки видео. Помните, что любой из применяемых здесь алгоритмов, не является оптимальным, когда размер кадра выходного видео много меньше чем входного. Если требуется изменить размер, пользуйтесь специально предназначенными фильтрами, установив их после Deshaker. |
Edge compensation |
Побочным эффектом стабилизации являются черные бордюры. Вы можете уменьшить бордюры применив режим Adaptive zoom. Этот режим определяет дополнительное масштабирование кадров с целью уменьшения бордюров. Этот дополнительный зум затем сглаживается в общей траектории движения, так что бордюры иногда все-таки появляются. Различием между Adaptive zoom и Adaptive zoom only является то, что в первом случае зум сглаживается как по исходному клипу, так и по дополнительной коррекции, во втором случае сглаживается только дополнительное масштабирование, зум исходного видео остается неизменным и не стабилизируется. Используйте этот режим, если в исходном видео отсутствует изменение зума. Вы можете также выбрать Fixed zoom – фильтр выберет постоянный коэффициент увеличения, обеспечивающий отсутствие бордюров. Используйте низкий correction limits (см. ниже) для уменьшения количества зума. |
Previous and future frames to fill in borders |
Это разновидность дополнительной компенсации бордюров. Когда в текущем кадре не хватает какой-либо информации, эта опция может найти ее в предыдущих или следующих кадрах. До тех пор, пока эта информация была частью одного и того же объекта (или фона) эта опция работает хорошо. Но когда новый объект появляется в этих областях, появятся заметные искажения. Но в любом случае, обычно это лучше черных бордюров и эту опцию рекомендуется использовать. Но убедитесь, что обрезаны какие-либо бордюры во входном видео до этого фильтра. В противном случае эта опция будет не так хорошо работать.
Если номер текущего кадра 50, этот режим будет искать нужную информацию в следующем порядке: 50, 49, 51, 48, 52, 47, 53, 46, 54 и т.д. Таким образом, все пиксели ближайших (хронологически) кадров будут задействованы. Вы можете указать, сколько кадров будут запоминаться и использоваться в этой операции. Больше – всегда лучше, но помните, каждый кадр требует прибл. 1.5 МБ памяти и это может занять дополнительное время для поиска нужной информации в большом количестве кадров.
Т.к. VirtualDub не дает прямого доступа к будущим кадрам, фильтр использует небольшой трюк. Он запоминает кадры и задерживает выход на указанное в опции количество кадров. Это может создать пару проблем, которые впрочем можно устранить. Во первых, необходимо задержать аудио. Вы можете это сделать в VirtualDub в меню Audio/Interleaving. В процессе запоминания кадров, текст на экране подскажет необходимую задержку в миллисекундах. Во вторых, необходимо сдвинуть в VirtualDub маркер окончания клипа на указанное количество кадров. В противном случае, последние кадры будут потеряны. Если маркер находится в самом конце клипа, то приклейте к нему несколько произвольных кадров – они в любом случае не будут использованы.
Когда эта опция не задействована, вы можете перемещаться по клипу как угодно. Но когда эта фича используется, так делать больше нельзя. Здесь необходимо пройти стадию запоминания кадров прежде чем начинать обработку. Обычно, если клип который вы хотите обработать содержит 100 кадров (нумерация 0-99 во входном клипе), и используются 30 будущих кадров, вы должны вручную "прошагать" первые 30 кадров (0-29). Затем, строго после этого, кодируйте кадры 30-129.
Попробуйте использовать эту опцию на клипах с панорамной съемкой и с зумом (отъезд) с Extra zoom factor установленным 0.6. Вы получите эффект панорамы. Это медленно, но итересно J |
Extra zoom factor |
Дополнительный коэфф. увеличения. Это может к примеру применяться вместе с fixed zoom для компенсации бордюров таким образом, чтобы они были но находились в области оверскана и не были видны на ТВ. В этом случаи максимум информации из кадра попадет на экран, но бордюры видны не будут. |
Motion smoothness |
Эти значения определяют параметры сглаживания траектории. Вы можете установить 0 для отключения стабилизации. Это может быть полезно, если вы например не хотите стабилизировать зуум. Но вы должны использовать довольно высокие значения в случае использования adaptive zoom для компенсации бордюров. Вычисления параметров траектории базируются на счетчике кадров, а не времени, поэтому поэтому нужно использовать большие значения для интерлейсного видео для такого же эффекта. Если вы установите значение -1 вы получите "бесконечное" сглаживание, что означает стационарно зафиксированную относительно первого кадра камеру. Но это не очень хорошо работает. |
Max. correction limits |
Удерживает коррекцию в заданных пределах в случае особенно быстрых смещений камеры. Особенно полезно когда используется Fixed zoom в качестве компенсации бордюров, не позволяя слишком сильное увеличение. Все, что эта опция делает, так это автоматически понижает степень сглаживания в тех фрагментах клипа, где это необходимо. |
Некоторые соображения
Не забывайте установить соотношения сторон пикселя входного клипа. Например, если ваше видео имеет размер 720х480, 704х480 или 352х240 это вероятно NTSC, а если 720х 576, 704х576 или 352х288 то вероятно PAL.
Если в клипе нет изменения зума, используйте Adaptive zoom only для компенсации бордюров, а если компенсация не используется, установите zoom smoothness равной 0. Это нужно поскольку стабилизатор зума не различает реальное зумирование от перемещения камеры вперед-назад.
Часто возникают проблемы из-за перемещения больших объектов в кадре. В этих случаях фильтр пытается следовать за большими объектами (обычно это фон). Опция discards blocks that move more than X pixels in wrong direction может до некоторой степени избавить от этого. Низкие значения делают это "следование" только за очень уж большими объектами, большие значения делают это "следование" средним по всем объектам (что снижает вероятность "следования" в ложном направлении). Вы можете также использовать image matching area для управления, за какими объектами нужно "следовать".
Deshaker хорошо работает для видео, снятого с короткими выдержками. В противном случае, вы можете увидеть эффект motion blur при отсутствии движения.
Видео снятое широкоугольным объективом может не очень хорошо выглядеть после фильтра. Избегайте использования широких углов для уменьшения угловых искажений.
Ручное управление
Иногда автоматическая стабилизация может не дать нужного вам результата. Это обычно случается когда объекты съемки небольшие и их движение не совпадает с движением крупных объектов. В процессе создания клипа вы можете захотеть использовать разные настройки первого прохода для различных частей клипа (или даже отдельных кадров). Вы можете использовать два способа:
Использовать опцию Append to file для продолжения записи в лог. Вы можете затем изменить настройки, прогнать несколько кадров, сменить снова, пройти опять и т.д. Номера кадров записываются в лог-файл, так что вы можете вернуться назад и восстановить несколько кадров. Если кадр записан несколько раз, во втором проходе используется последняя запись.
Вы можете редактировать лог вручную. Значения в каждой строке лога означают следующее (слева направо): номер кадра, x- и y- смещение (в пикселях), вращение (в градусах) и зум фактор. Вы можете удалять строки, для отсутствующих в файле кадров считается смещение 0, вращение 0, зум 1.
Интерлейсное видео
Deshaker поддерживает интерлейсное видео. Так что этот раздел отчасти не нужен. Но в любом случае, это еще один способ стабилизировать интерлейсное видео.
Используйте мой smooth deinterlacer (или другой) для генерации 50 или 60 FPS полноразмерного видео.
Установите в Deshaker прогрессивный тип видео (для обоих проходов).
Запустите получившееся видео через небольшой скрипт AVISynth:
AVISource("deshaked.avi")
SeparateFields()
SelectEvery(4, 1, 2) (или
SelectEvery(4, 0, 3)
определяется
порядком
полей)
Weave()
Если вы остановитесь на втором шаге, вы получите сглаженное 50 или 60 FPS полноразмерное видео, которое отлично будет выглядеть на компьютере. Однако его нельзя будет посмотреть на ТВ.