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

от
FFmpeg    vidstab, vidstabdetect, vidstabtransform, стабилизация видео, video stabilizing, stabilize

Двухпроходная стабилизация видео выполняется двумя фильтрами: vidstabdetect и vidstabtransform. Подробнее о них в этой статье (не забудьте посмотреть видео, там примеры нагляднее).


Содержание:
  - vidstabdetect
  - vidstabtransform
  - Пример с подобранными параметрами

vidstabdetectНа первом этапе при помощи фильтра vidstabdetect анализируется трансформация изображения в видео.
  1. ffmpeg -i input.mp4 -vf vidstabdetect -f null -
В этом случае, ffmpeg не будет возвращать результат преобразования, что и делают параметры -f null -, но сам фильтр сохранит результаты анализа в файл transforms.trf.
20210402_175218.png

Перед началом обработки, ffmpeg выведет информацию о текущих параметрах фильтра. Рассмотрим самые основные:
shakiness — принимает значения от 1 до 10, где 1 это минимальная тряска, а 10 — максимальная. По умолчанию используется значение 5.
stepsize — указывает, сколько пикселей будет использоваться в радиусе поиска трансформаций. По умолчанию имеет значение 6.
accuracy — влияет на точность и скорость обработки. 1 — быстрая неточная обработка и 15 — точная, используется по умолчанию.
result — позволяет задать имя результирующего файла трансформаций. По умолчанию это transforms.trf
show — задать режим наложения отладочной информации прямо на видео (значения от 0 до 2). При show=1 или show=2 уже придётся указать результирующий файл.
  1. ffmpeg -i input.mp4 -vf vidstabdetect=show=2 result.mp4
20210402_180533.jpg


vidstabtransformНа втором этапе при помощи фильтра vidstabtransform проводится стабилизация видео.
  1. ffmpeg -i input.mp4 -vf vidstabtransform result.mp4

Вот сравнение deshake (слева) и vidstabtransform с параметрами по умолчанию:
  1. ffmpeg -i input.mp4 -vf split[v1][v2];[v1]deshake[v1];[v2]vidstabtransform[v2];[v1][v2]hstack result.mp4


Основные параметры vidstabtransform:
smoothing — указывает, как сильно будет сглажено движение камеры. По умолчанию принимает значение 10, означающее, что для сглаживания будут использованы 10 кадров до и 10 кадров после текущего кадра.
Слева smoothing=2, справа smoothing=25

zoom — указывает, на сколько процентов будет увеличено или уменьшено изображение. Положительное значение позволит скрыть границы видео, из-за чего будет менее заметно, что применялась стабилизация. А отрицательное значение позволит стабилизировать видео без потери важных участков на границах.
Слева zoom=-10, справа zoom=25

crop — что делать с участками за пределами изображения. keep — использовать пиксели из прошлого кадра, black — закрасить пиксели чёрным.
input — позволяет задать имя входного файла трансформаций. По умолчанию это transforms.trf


Пример с подобранными параметрамиНа примере всё того же видео.
1. Минимизируем мелкую тряску.
  1. ffmpeg -i input.mp4 -vf vidstabdetect=shakiness=3:accuracy=15 -f null -
  2. ffmpeg -i input.mp4 -vf vidstabtransform=smoothing=3:zoom=-3 step1.mp4
2. Полученный результат стабилизируем с хорошим сглаживанием.
  1. ffmpeg -i step1.mp4 -vf vidstabdetect=shakiness=4:accuracy=15 -f null -
  2. ffmpeg -i step1.mp4 -vf vidstabtransform=smoothing=12:zoom=0 result.mp4
3. Сравниваем вариант по умолчанию с полученным результатом.
  1. ffmpeg -i input.mp4 -vf vidstabdetect=default.trf -f null -
  2. ffmpeg -i input.mp4 -i result.mp4 -filter_complex [0]vidstabtransform=input=default.trf[def];[def][1]hstack compare.mp4
Слева стабилизация с параметрами по умолчанию, а справа то, что получилось в результате подбора значений:


  • +2
  • views 3968