FFmpeg | Однопроходная стабилизация видео (deshake)

от
FFmpeg    deshake, устранение дрожания видео, стабилизация

Разберём фильтр deshake, который работает быстро, но устраняет только мелкое дрожание. О более мощной стабилизации пойдёт речь в следующей статье.


Даже без параметров фильтр выдаёт хороший результат.
  1. ffmpeg -i input.mp4 -vf deshake result.mp4
Пример с использованием ffplay для наглядного сравнения (слева оригинал, справа результат работы фильтра):
  1. ffplay -i input.mp4 -vf split[orig][proc];[proc]deshake[proc];[orig][proc]hstack


Есть параметр edge с четырьмя значениями, влияющими на способ обработки границ:
  0 или blank — очищает всё, что за краями
  1 или original — помещает оригинальное видео под стабилизированное
  2 или clamp — расширяет края
  3 или mirror — отзеркаливает края (используется по умолчанию)
deshake_edge.jpg

  1. ffmpeg -i input.mp4 -vf deshake=edge=0 result.mp4
  2. ffmpeg -i input.mp4 -vf deshake=edge=original result.mp4

Параметрами x, y, w и h можно задать область поиска трансформаций. Это может пригодиться, если в кадре присутствует постоянная область, по которой можно отследить искажения.
По умолчанию все значения равны -1, что соответствует полному размеру кадра.

rx и ry позволяют задать на сколько пикселей можно сдвигать изображение для визуального выравнивания.
Значения должны быть от 0 до 64, по умолчанию 16.

blocksize позволяет задать размер блока для локального сканирования изменений. Если результрующее изображение в некоторых кадрах прыгает, следует изменить этот параметр. Значение по умолчанию — 8 пикселей.

  1. ffmpeg -i input.mp4 -vf deshake=edge=0:rx=32:ry=16 result.mp4
  1. ffmpeg -i input.mp4 -vf deshake=edge=blank:rx=32:ry=32:blocksize=16 result.mp4
  • +1
  • views 3260