Commit b29c7bcb authored by Jarek Samic's avatar Jarek Samic Committed by Mark Thompson

lavfi: add deshake_opencl filter

parent 5b5746b1
...@@ -3454,6 +3454,7 @@ delogo_filter_deps="gpl" ...@@ -3454,6 +3454,7 @@ delogo_filter_deps="gpl"
denoise_vaapi_filter_deps="vaapi" denoise_vaapi_filter_deps="vaapi"
derain_filter_select="dnn" derain_filter_select="dnn"
deshake_filter_select="pixelutils" deshake_filter_select="pixelutils"
deshake_opencl_filter_deps="opencl"
dilation_opencl_filter_deps="opencl" dilation_opencl_filter_deps="opencl"
drawtext_filter_deps="libfreetype" drawtext_filter_deps="libfreetype"
drawtext_filter_suggest="libfontconfig libfribidi" drawtext_filter_suggest="libfontconfig libfribidi"
......
...@@ -19795,6 +19795,75 @@ Make every semi-green pixel in the input transparent with some slight blending: ...@@ -19795,6 +19795,75 @@ Make every semi-green pixel in the input transparent with some slight blending:
@end example @end example
@end itemize @end itemize
@section deshake_opencl
Feature-point based video stabilization filter.
The filter accepts the following options:
@table @option
@item tripod
Simulates a tripod by preventing any camera movement whatsoever from the original frame. Defaults to @code{0}.
@item debug
Whether or not additional debug info should be displayed, both in the processed output and in the console.
Note that in order to see console debug output you will also need to pass @code{-v verbose} to ffmpeg.
Viewing point matches in the output video is only supported for RGB input.
Defaults to @code{0}.
@item adaptive_crop
Whether or not to do a tiny bit of cropping at the borders to cut down on the amount of mirrored pixels.
Defaults to @code{1}.
@item refine_features
Whether or not feature points should be refined at a sub-pixel level.
This can be turned off for a slight performance gain at the cost of precision.
Defaults to @code{1}.
@item smooth_strength
The strength of the smoothing applied to the camera path from @code{0.0} to @code{1.0}.
@code{1.0} is the maximum smoothing strength while values less than that result in less smoothing.
@code{0.0} causes the filter to adaptively choose a smoothing strength on a per-frame basis.
Defaults to @code{0.0}.
@item smooth_window_multiplier
Controls the size of the smoothing window (the number of frames buffered to determine motion information from).
The size of the smoothing window is determined by multiplying the framerate of the video by this number.
Acceptable values range from @code{0.1} to @code{10.0}.
Larger values increase the amount of motion data available for determining how to smooth the camera path,
potentially improving smoothness, but also increase latency and memory usage.
Defaults to @code{2.0}.
@end table
@subsection Examples
@itemize
@item
Stabilize a video with a fixed, medium smoothing strength:
@example
-i INPUT -vf "hwupload, deshake_opencl=smooth_strength=0.5, hwdownload" OUTPUT
@end example
@item
Stabilize a video with debugging (both in console and in rendered video):
@example
-i INPUT -filter_complex "[0:v]format=rgba, hwupload, deshake_opencl=debug=1, hwdownload, format=rgba, format=yuv420p" -v verbose OUTPUT
@end example
@end itemize
@section nlmeans_opencl @section nlmeans_opencl
Non-local Means denoise filter through OpenCL, this filter accepts same options as @ref{nlmeans}. Non-local Means denoise filter through OpenCL, this filter accepts same options as @ref{nlmeans}.
......
...@@ -211,6 +211,8 @@ OBJS-$(CONFIG_DEINTERLACE_VAAPI_FILTER) += vf_deinterlace_vaapi.o vaapi_vpp ...@@ -211,6 +211,8 @@ OBJS-$(CONFIG_DEINTERLACE_VAAPI_FILTER) += vf_deinterlace_vaapi.o vaapi_vpp
OBJS-$(CONFIG_DEJUDDER_FILTER) += vf_dejudder.o OBJS-$(CONFIG_DEJUDDER_FILTER) += vf_dejudder.o
OBJS-$(CONFIG_DELOGO_FILTER) += vf_delogo.o OBJS-$(CONFIG_DELOGO_FILTER) += vf_delogo.o
OBJS-$(CONFIG_DENOISE_VAAPI_FILTER) += vf_misc_vaapi.o vaapi_vpp.o OBJS-$(CONFIG_DENOISE_VAAPI_FILTER) += vf_misc_vaapi.o vaapi_vpp.o
OBJS-$(CONFIG_DESHAKE_OPENCL_FILTER) += vf_deshake_opencl.o opencl.o \
opencl/deshake.o
OBJS-$(CONFIG_DESHAKE_FILTER) += vf_deshake.o OBJS-$(CONFIG_DESHAKE_FILTER) += vf_deshake.o
OBJS-$(CONFIG_DESPILL_FILTER) += vf_despill.o OBJS-$(CONFIG_DESPILL_FILTER) += vf_despill.o
OBJS-$(CONFIG_DETELECINE_FILTER) += vf_detelecine.o OBJS-$(CONFIG_DETELECINE_FILTER) += vf_detelecine.o
......
...@@ -200,6 +200,7 @@ extern AVFilter ff_vf_delogo; ...@@ -200,6 +200,7 @@ extern AVFilter ff_vf_delogo;
extern AVFilter ff_vf_denoise_vaapi; extern AVFilter ff_vf_denoise_vaapi;
extern AVFilter ff_vf_derain; extern AVFilter ff_vf_derain;
extern AVFilter ff_vf_deshake; extern AVFilter ff_vf_deshake;
extern AVFilter ff_vf_deshake_opencl;
extern AVFilter ff_vf_despill; extern AVFilter ff_vf_despill;
extern AVFilter ff_vf_detelecine; extern AVFilter ff_vf_detelecine;
extern AVFilter ff_vf_dilation; extern AVFilter ff_vf_dilation;
......
This diff is collapsed.
...@@ -23,6 +23,7 @@ extern const char *ff_opencl_source_avgblur; ...@@ -23,6 +23,7 @@ extern const char *ff_opencl_source_avgblur;
extern const char *ff_opencl_source_colorkey; extern const char *ff_opencl_source_colorkey;
extern const char *ff_opencl_source_colorspace_common; extern const char *ff_opencl_source_colorspace_common;
extern const char *ff_opencl_source_convolution; extern const char *ff_opencl_source_convolution;
extern const char *ff_opencl_source_deshake;
extern const char *ff_opencl_source_neighbor; extern const char *ff_opencl_source_neighbor;
extern const char *ff_opencl_source_nlmeans; extern const char *ff_opencl_source_nlmeans;
extern const char *ff_opencl_source_overlay; extern const char *ff_opencl_source_overlay;
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#define LIBAVFILTER_VERSION_MAJOR 7 #define LIBAVFILTER_VERSION_MAJOR 7
#define LIBAVFILTER_VERSION_MINOR 58 #define LIBAVFILTER_VERSION_MINOR 58
#define LIBAVFILTER_VERSION_MICRO 100 #define LIBAVFILTER_VERSION_MICRO 101
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment