FFmpeg | Однопроходная стабилизация видео (deshake)
от aNNiMON
Разберём фильтр deshake, который работает быстро, но устраняет только мелкое дрожание. О более мощной стабилизации пойдёт речь в следующей статье.
Даже без параметров фильтр выдаёт хороший результат.
Пример с использованием ffplay для наглядного сравнения (слева оригинал, справа результат работы фильтра):
Есть параметр edge с четырьмя значениями, влияющими на способ обработки границ:
0 или blank — очищает всё, что за краями
1 или original — помещает оригинальное видео под стабилизированное
2 или clamp — расширяет края
3 или mirror — отзеркаливает края (используется по умолчанию)
Параметрами x, y, w и h можно задать область поиска трансформаций. Это может пригодиться, если в кадре присутствует постоянная область, по которой можно отследить искажения.
По умолчанию все значения равны -1, что соответствует полному размеру кадра.
rx и ry позволяют задать на сколько пикселей можно сдвигать изображение для визуального выравнивания.
Значения должны быть от 0 до 64, по умолчанию 16.
blocksize позволяет задать размер блока для локального сканирования изменений. Если результрующее изображение в некоторых кадрах прыгает, следует изменить этот параметр. Значение по умолчанию — 8 пикселей.
Следующая статья →Даже без параметров фильтр выдаёт хороший результат.
- ffmpeg -i input.mp4 -vf deshake result.mp4
- ffplay -i input.mp4 -vf split[orig][proc];[proc]deshake[proc];[orig][proc]hstack
Есть параметр edge с четырьмя значениями, влияющими на способ обработки границ:
0 или blank — очищает всё, что за краями
1 или original — помещает оригинальное видео под стабилизированное
2 или clamp — расширяет края
3 или mirror — отзеркаливает края (используется по умолчанию)
- ffmpeg -i input.mp4 -vf deshake=edge=0 result.mp4
- ffmpeg -i input.mp4 -vf deshake=edge=original result.mp4
Параметрами x, y, w и h можно задать область поиска трансформаций. Это может пригодиться, если в кадре присутствует постоянная область, по которой можно отследить искажения.
По умолчанию все значения равны -1, что соответствует полному размеру кадра.
rx и ry позволяют задать на сколько пикселей можно сдвигать изображение для визуального выравнивания.
Значения должны быть от 0 до 64, по умолчанию 16.
blocksize позволяет задать размер блока для локального сканирования изменений. Если результрующее изображение в некоторых кадрах прыгает, следует изменить этот параметр. Значение по умолчанию — 8 пикселей.
- ffmpeg -i input.mp4 -vf deshake=edge=0:rx=32:ry=16 result.mp4
- ffmpeg -i input.mp4 -vf deshake=edge=blank:rx=32:ry=32:blocksize=16 result.mp4
Двухпроходная стабилизация видео (vidstab)