Add Nvidia Cuda and Cuda NPP sections for video filters. --- doc/filters.texi | 1545 +++++++++++++++++++++++----------------------- 1 file changed, 778 insertions(+), 767 deletions(-)
diff --git a/doc/filters.texi b/doc/filters.texi index b926b865ae..efa5e84f29 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -8619,45 +8619,6 @@ Set planes to filter. Default is first only. This filter supports the all above options as @ref{commands}. -@section bilateral_cuda -CUDA accelerated bilateral filter, an edge preserving filter. -This filter is mathematically accurate thanks to the use of GPU acceleration. -For best output quality, use one to one chroma subsampling, i.e. yuv444p format. - -The filter accepts the following options: -@table @option -@item sigmaS -Set sigma of gaussian function to calculate spatial weight, also called sigma space. -Allowed range is 0.1 to 512. Default is 0.1. - -@item sigmaR -Set sigma of gaussian function to calculate color range weight, also called sigma color. -Allowed range is 0.1 to 512. Default is 0.1. - -@item window_size -Set window size of the bilateral function to determine the number of neighbours to loop on. -If the number entered is even, one will be added automatically. -Allowed range is 1 to 255. Default is 1. -@end table -@subsection Examples - -@itemize -@item -Apply the bilateral filter on a video. - -@example -./ffmpeg -v verbose \ --hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \ --init_hw_device cuda \ --filter_complex \ -" \ -[0:v]scale_cuda=format=yuv444p[scaled_video]; -[scaled_video]bilateral_cuda=window_size=9:sigmaS=3.0:sigmaR=50.0" \ --an -sn -c:v h264_nvenc -cq 20 out.mp4 -@end example - -@end itemize - @section bitplanenoise Show and measure bit plane noise. @@ -9243,58 +9204,6 @@ Only deinterlace frames marked as interlaced. The default value is @code{all}. @end table -@section bwdif_cuda - -Deinterlace the input video using the @ref{bwdif} algorithm, but implemented -in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec -and/or nvenc. - -It accepts the following parameters: - -@table @option -@item mode -The interlacing mode to adopt. It accepts one of the following values: - -@table @option -@item 0, send_frame -Output one frame for each frame. -@item 1, send_field -Output one frame for each field. -@end table - -The default value is @code{send_field}. - -@item parity -The picture field parity assumed for the input interlaced video. It accepts one -of the following values: - -@table @option -@item 0, tff -Assume the top field is first. -@item 1, bff -Assume the bottom field is first. -@item -1, auto -Enable automatic detection of field parity. -@end table - -The default value is @code{auto}. -If the interlacing is unknown or the decoder does not export this information, -top field first will be assumed. - -@item deint -Specify which frames to deinterlace. Accepts one of the following -values: - -@table @option -@item 0, all -Deinterlace all frames. -@item 1, interlaced -Only deinterlace frames marked as interlaced. -@end table - -The default value is @code{all}. -@end table - @section ccrepack Repack CEA-708 closed captioning side data @@ -9408,48 +9317,6 @@ ffmpeg -f lavfi -i color=c=black:s=1280x720 -i video.mp4 -shortest -filter_compl @end example @end itemize -@section chromakey_cuda -CUDA accelerated YUV colorspace color/chroma keying. - -This filter works like normal chromakey filter but operates on CUDA frames. -for more details and parameters see @ref{chromakey}. - -@subsection Examples - -@itemize -@item -Make all the green pixels in the input video transparent and use it as an overlay for another video: - -@example -./ffmpeg \ - -hwaccel cuda -hwaccel_output_format cuda -i input_green.mp4 \ - -hwaccel cuda -hwaccel_output_format cuda -i base_video.mp4 \ - -init_hw_device cuda \ - -filter_complex \ - " \ - [0:v]chromakey_cuda=0x25302D:0.1:0.12:1[overlay_video]; \ - [1:v]scale_cuda=format=yuv420p[base]; \ - [base][overlay_video]overlay_cuda" \ - -an -sn -c:v h264_nvenc -cq 20 output.mp4 -@end example - -@item -Process two software sources, explicitly uploading the frames: - -@example -./ffmpeg -init_hw_device cuda=cuda -filter_hw_device cuda \ - -f lavfi -i color=size=800x600:color=white,format=yuv420p \ - -f lavfi -i yuvtestsrc=size=200x200,format=yuv420p \ - -filter_complex \ - " \ - [0]hwupload[under]; \ - [1]hwupload,chromakey_cuda=green:0.1:0.12[over]; \ - [under][over]overlay_cuda" \ - -c:v hevc_nvenc -cq 18 -preset slow output.mp4 -@end example - -@end itemize - @section chromanr Reduce chrominance noise. @@ -10427,38 +10294,6 @@ For example to convert the input to SMPTE-240M, use the command: colorspace=smpte240m @end example -@section colorspace_cuda - -CUDA accelerated implementation of the colorspace filter. - -It is by no means feature complete compared to the software colorspace filter, -and at the current time only supports color range conversion between jpeg/full -and mpeg/limited range. - -The filter accepts the following options: - -@table @option -@item range -Specify output color range. - -The accepted values are: -@table @samp -@item tv -TV (restricted) range - -@item mpeg -MPEG (restricted) range - -@item pc -PC (full) range - -@item jpeg -JPEG (full) range - -@end table - -@end table - @section colortemperature Adjust color temperature in video to simulate variations in ambient color temperature. @@ -17058,32 +16893,6 @@ ffmpeg -i distorted.mpg -i reference.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STAR @end example @end itemize -@section libvmaf_cuda - -This is the CUDA variant of the @ref{libvmaf} filter. It only accepts CUDA frames. - -It requires Netflix's vmaf library (libvmaf) as a pre-requisite. -After installing the library it can be enabled using: -@code{./configure --enable-nonfree --enable-ffnvcodec --enable-libvmaf}. - -@subsection Examples -@itemize - -@item -Basic usage showing CUVID hardware decoding and CUDA scaling with @ref{scale_cuda}: -@example -ffmpeg \ - -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i dis.obu \ - -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i ref.obu \ - -filter_complex " - [0:v]scale_cuda=format=yuv420p[dis]; \ - [1:v]scale_cuda=format=yuv420p[ref]; \ - [dis][ref]libvmaf_cuda=log_fmt=json:log_path=output.json - " \ - -f null - -@end example -@end itemize - @section limitdiff Apply limited difference filter using second and optionally third video stream. @@ -18977,129 +18786,51 @@ testsrc=s=100x100, split=4 [in0][in1][in2][in3]; @end itemize -@anchor{overlay_cuda} -@section overlay_cuda - -Overlay one video on top of another. - -This is the CUDA variant of the @ref{overlay} filter. -It only accepts CUDA frames. The underlying input pixel formats have to match. +@section owdenoise -It takes two inputs and has one output. The first input is the "main" -video on which the second input is overlaid. +Apply Overcomplete Wavelet denoiser. -It accepts the following parameters: +The filter accepts the following options: @table @option -@item x -@item y -Set expressions for the x and y coordinates of the overlaid video -on the main video. +@item depth +Set depth. -They can contain the following parameters: +Larger depth values will denoise lower frequency components more, but +slow down filtering. -@table @option +Must be an int in the range 8-16, default is @code{8}. -@item main_w, W -@item main_h, H -The main input width and height. +@item luma_strength, ls +Set luma strength. -@item overlay_w, w -@item overlay_h, h -The overlay input width and height. +Must be a double value in the range 0-1000, default is @code{1.0}. -@item x -@item y -The computed values for @var{x} and @var{y}. They are evaluated for -each new frame. +@item chroma_strength, cs +Set chroma strength. -@item n -The ordinal index of the main input frame, starting from 0. +Must be a double value in the range 0-1000, default is @code{1.0}. +@end table -@item pos -The byte offset position in the file of the main input frame, NAN if unknown. -Deprecated, do not use. +@anchor{pad} +@section pad -@item t -The timestamp of the main input frame, expressed in seconds, NAN if unknown. +Add paddings to the input image, and place the original input at the +provided @var{x}, @var{y} coordinates. -@end table +It accepts the following parameters: -Default value is "0" for both expressions. +@table @option +@item width, w +@item height, h +Specify an expression for the size of the output image with the +paddings added. If the value for @var{width} or @var{height} is 0, the +corresponding input size is used for the output. -@item eval -Set when the expressions for @option{x} and @option{y} are evaluated. +The @var{width} expression can reference the value set by the +@var{height} expression, and vice versa. -It accepts the following values: -@table @option -@item init -Evaluate expressions once during filter initialization or -when a command is processed. - -@item frame -Evaluate expressions for each incoming frame -@end table - -Default value is @option{frame}. - -@item eof_action -See @ref{framesync}. - -@item shortest -See @ref{framesync}. - -@item repeatlast -See @ref{framesync}. - -@end table - -This filter also supports the @ref{framesync} options. - -@section owdenoise - -Apply Overcomplete Wavelet denoiser. - -The filter accepts the following options: - -@table @option -@item depth -Set depth. - -Larger depth values will denoise lower frequency components more, but -slow down filtering. - -Must be an int in the range 8-16, default is @code{8}. - -@item luma_strength, ls -Set luma strength. - -Must be a double value in the range 0-1000, default is @code{1.0}. - -@item chroma_strength, cs -Set chroma strength. - -Must be a double value in the range 0-1000, default is @code{1.0}. -@end table - -@anchor{pad} -@section pad - -Add paddings to the input image, and place the original input at the -provided @var{x}, @var{y} coordinates. - -It accepts the following parameters: - -@table @option -@item width, w -@item height, h -Specify an expression for the size of the output image with the -paddings added. If the value for @var{width} or @var{height} is 0, the -corresponding input size is used for the output. - -The @var{width} expression can reference the value set by the -@var{height} expression, and vice versa. - -The default value of @var{width} and @var{height} is 0. +The default value of @var{width} and @var{height} is 0. @item x @item y @@ -21479,11 +21210,9 @@ If the specified expression is not valid, it is kept at its current value. @end table -@anchor{scale_cuda} -@section scale_cuda +@section scale_vt -Scale (resize) and convert (pixel format) the input video, using accelerated CUDA kernels. -Setting the output width and height works in the same way as for the @ref{scale} filter. +Scale and convert the color parameters using VTPixelTransferSession. The filter accepts the following options: @table @option @@ -21491,390 +21220,117 @@ The filter accepts the following options: @item h Set the output video dimension expression. Default value is the input dimension. -Allows for the same expressions as the @ref{scale} filter. +@item color_matrix +Set the output colorspace matrix. -@item interp_algo -Sets the algorithm used for scaling: +@item color_primaries +Set the output color primaries. -@table @var -@item nearest -Nearest neighbour +@item color_transfer +Set the output transfer characteristics. -Used by default if input parameters match the desired output. +@end table -@item bilinear -Bilinear +@section scharr +Apply scharr operator to input video stream. -@item bicubic -Bicubic +The filter accepts the following option: -This is the default. +@table @option +@item planes +Set which planes will be processed, unprocessed planes will be copied. +By default value 0xf, all planes will be processed. -@item lanczos -Lanczos +@item scale +Set value which will be multiplied with filtered result. +@item delta +Set value which will be added to filtered result. @end table -@item format -Controls the output pixel format. By default, or if none is specified, the input -pixel format is used. - -The filter does not support converting between YUV and RGB pixel formats. +@subsection Commands -@item passthrough -If set to 0, every frame is processed, even if no conversion is necessary. -This mode can be useful to use the filter as a buffer for a downstream -frame-consumer that exhausts the limited decoder frame pool. +This filter supports the all above options as @ref{commands}. -If set to 1, frames are passed through as-is if they match the desired output -parameters. This is the default behaviour. +@section scroll +Scroll input video horizontally and/or vertically by constant speed. -@item param -Algorithm-Specific parameter. +The filter accepts the following options: +@table @option +@item horizontal, h +Set the horizontal scrolling speed. Default is 0. Allowed range is from -1 to 1. +Negative values changes scrolling direction. -Affects the curves of the bicubic algorithm. +@item vertical, v +Set the vertical scrolling speed. Default is 0. Allowed range is from -1 to 1. +Negative values changes scrolling direction. -@item force_original_aspect_ratio -@item force_divisible_by -Work the same as the identical @ref{scale} filter options. +@item hpos +Set the initial horizontal scrolling position. Default is 0. Allowed range is from 0 to 1. +@item vpos +Set the initial vertical scrolling position. Default is 0. Allowed range is from 0 to 1. @end table -@subsection Examples - -@itemize -@item -Scale input to 720p, keeping aspect ratio and ensuring the output is yuv420p. -@example -scale_cuda=-2:720:format=yuv420p -@end example - -@item -Upscale to 4K using nearest neighbour algorithm. -@example -scale_cuda=4096:2160:interp_algo=nearest -@end example - -@item -Don't do any conversion or scaling, but copy all input frames into newly allocated ones. -This can be useful to deal with a filter and encode chain that otherwise exhausts the -decoders frame pool. -@example -scale_cuda=passthrough=0 -@end example -@end itemize - -@anchor{scale_npp} -@section scale_npp - -Use the NVIDIA Performance Primitives (libnpp) to perform scaling and/or pixel -format conversion on CUDA video frames. Setting the output width and height -works in the same way as for the @var{scale} filter. +@subsection Commands -The following additional options are accepted: +This filter supports the following @ref{commands}: @table @option -@item format -The pixel format of the output CUDA frames. If set to the string "same" (the -default), the input format will be kept. Note that automatic format negotiation -and conversion is not yet supported for hardware frames +@item horizontal, h +Set the horizontal scrolling speed. +@item vertical, v +Set the vertical scrolling speed. +@end table -@item interp_algo -The interpolation algorithm used for resizing. One of the following: -@table @option -@item nn -Nearest neighbour. +@anchor{scdet} +@section scdet -@item linear -@item cubic -@item cubic2p_bspline -2-parameter cubic (B=1, C=0) +Detect video scene change. -@item cubic2p_catmullrom -2-parameter cubic (B=0, C=1/2) +This filter sets frame metadata with mafd between frame, the scene score, and +forward the frame to the next filter, so they can use these metadata to detect +scene change or others. -@item cubic2p_b05c03 -2-parameter cubic (B=1/2, C=3/10) +In addition, this filter logs a message and sets frame metadata when it detects +a scene change by @option{threshold}. -@item super -Supersampling +@code{lavfi.scd.mafd} metadata keys are set with mafd for every frame. -@item lanczos -@end table +@code{lavfi.scd.score} metadata keys are set with scene change score for every frame +to detect scene change. -@item force_original_aspect_ratio -Enable decreasing or increasing output video width or height if necessary to -keep the original aspect ratio. Possible values: +@code{lavfi.scd.time} metadata keys are set with current filtered frame time which +detect scene change with @option{threshold}. -@table @samp -@item disable -Scale the video as specified and disable this feature. +The filter accepts the following options: -@item decrease -The output video dimensions will automatically be decreased if needed. +@table @option +@item threshold, t +Set the scene change detection threshold as a percentage of maximum change. Good +values are in the @code{[8.0, 14.0]} range. The range for @option{threshold} is +@code{[0., 100.]}. -@item increase -The output video dimensions will automatically be increased if needed. +Default value is @code{10.}. +@item sc_pass, s +Set the flag to pass scene change frames to the next filter. Default value is @code{0} +You can enable it if you want to get snapshot of scene change frames only. @end table -One useful instance of this option is that when you know a specific device's -maximum allowed resolution, you can use this to limit the output video to -that, while retaining the aspect ratio. For example, device A allows -1280x720 playback, and your video is 1920x800. Using this option (set it to -decrease) and specifying 1280x720 to the command line makes the output -1280x533. +@anchor{selectivecolor} +@section selectivecolor -Please note that this is a different thing than specifying -1 for @option{w} -or @option{h}, you still need to specify the output resolution for this option -to work. +Adjust cyan, magenta, yellow and black (CMYK) to certain ranges of colors (such +as "reds", "yellows", "greens", "cyans", ...). The adjustment range is defined +by the "purity" of the color (that is, how saturated it already is). -@item force_divisible_by -Ensures that both the output dimensions, width and height, are divisible by the -given integer when used together with @option{force_original_aspect_ratio}. This -works similar to using @code{-n} in the @option{w} and @option{h} options. +This filter is similar to the Adobe Photoshop Selective Color tool. -This option respects the value set for @option{force_original_aspect_ratio}, -increasing or decreasing the resolution accordingly. The video's aspect ratio -may be slightly modified. +The filter accepts the following options: -This option can be handy if you need to have a video fit within or exceed -a defined resolution using @option{force_original_aspect_ratio} but also have -encoder restrictions on width or height divisibility. - -@item eval -Specify when to evaluate @var{width} and @var{height} expression. It accepts the following values: - -@table @samp -@item init -Only evaluate expressions once during the filter initialization or when a command is processed. - -@item frame -Evaluate expressions for each incoming frame. - -@end table - -@end table - -The values of the @option{w} and @option{h} options are expressions -containing the following constants: - -@table @var -@item in_w -@item in_h -The input width and height - -@item iw -@item ih -These are the same as @var{in_w} and @var{in_h}. - -@item out_w -@item out_h -The output (scaled) width and height - -@item ow -@item oh -These are the same as @var{out_w} and @var{out_h} - -@item a -The same as @var{iw} / @var{ih} - -@item sar -input sample aspect ratio - -@item dar -The input display aspect ratio. Calculated from @code{(iw / ih) * sar}. - -@item n -The (sequential) number of the input frame, starting from 0. -Only available with @code{eval=frame}. - -@item t -The presentation timestamp of the input frame, expressed as a number of -seconds. Only available with @code{eval=frame}. - -@item pos -The position (byte offset) of the frame in the input stream, or NaN if -this information is unavailable and/or meaningless (for example in case of synthetic video). -Only available with @code{eval=frame}. -Deprecated, do not use. -@end table - -@section scale2ref_npp - -Use the NVIDIA Performance Primitives (libnpp) to scale (resize) the input -video, based on a reference video. - -See the @ref{scale_npp} filter for available options, scale2ref_npp supports the same -but uses the reference video instead of the main input as basis. scale2ref_npp -also supports the following additional constants for the @option{w} and -@option{h} options: - -@table @var -@item main_w -@item main_h -The main input video's width and height - -@item main_a -The same as @var{main_w} / @var{main_h} - -@item main_sar -The main input video's sample aspect ratio - -@item main_dar, mdar -The main input video's display aspect ratio. Calculated from -@code{(main_w / main_h) * main_sar}. - -@item main_n -The (sequential) number of the main input frame, starting from 0. -Only available with @code{eval=frame}. - -@item main_t -The presentation timestamp of the main input frame, expressed as a number of -seconds. Only available with @code{eval=frame}. - -@item main_pos -The position (byte offset) of the frame in the main input stream, or NaN if -this information is unavailable and/or meaningless (for example in case of synthetic video). -Only available with @code{eval=frame}. -@end table - -@subsection Examples - -@itemize -@item -Scale a subtitle stream (b) to match the main video (a) in size before overlaying -@example -'scale2ref_npp[b][a];[a][b]overlay_cuda' -@end example - -@item -Scale a logo to 1/10th the height of a video, while preserving its display aspect ratio. -@example -[logo-in][video-in]scale2ref_npp=w=oh*mdar:h=ih/10[logo-out][video-out] -@end example -@end itemize - -@section scale_vt - -Scale and convert the color parameters using VTPixelTransferSession. - -The filter accepts the following options: -@table @option -@item w -@item h -Set the output video dimension expression. Default value is the input dimension. - -@item color_matrix -Set the output colorspace matrix. - -@item color_primaries -Set the output color primaries. - -@item color_transfer -Set the output transfer characteristics. - -@end table - -@section scharr -Apply scharr operator to input video stream. - -The filter accepts the following option: - -@table @option -@item planes -Set which planes will be processed, unprocessed planes will be copied. -By default value 0xf, all planes will be processed. - -@item scale -Set value which will be multiplied with filtered result. - -@item delta -Set value which will be added to filtered result. -@end table - -@subsection Commands - -This filter supports the all above options as @ref{commands}. - -@section scroll -Scroll input video horizontally and/or vertically by constant speed. - -The filter accepts the following options: -@table @option -@item horizontal, h -Set the horizontal scrolling speed. Default is 0. Allowed range is from -1 to 1. -Negative values changes scrolling direction. - -@item vertical, v -Set the vertical scrolling speed. Default is 0. Allowed range is from -1 to 1. -Negative values changes scrolling direction. - -@item hpos -Set the initial horizontal scrolling position. Default is 0. Allowed range is from 0 to 1. - -@item vpos -Set the initial vertical scrolling position. Default is 0. Allowed range is from 0 to 1. -@end table - -@subsection Commands - -This filter supports the following @ref{commands}: -@table @option -@item horizontal, h -Set the horizontal scrolling speed. -@item vertical, v -Set the vertical scrolling speed. -@end table - -@anchor{scdet} -@section scdet - -Detect video scene change. - -This filter sets frame metadata with mafd between frame, the scene score, and -forward the frame to the next filter, so they can use these metadata to detect -scene change or others. - -In addition, this filter logs a message and sets frame metadata when it detects -a scene change by @option{threshold}. - -@code{lavfi.scd.mafd} metadata keys are set with mafd for every frame. - -@code{lavfi.scd.score} metadata keys are set with scene change score for every frame -to detect scene change. - -@code{lavfi.scd.time} metadata keys are set with current filtered frame time which -detect scene change with @option{threshold}. - -The filter accepts the following options: - -@table @option -@item threshold, t -Set the scene change detection threshold as a percentage of maximum change. Good -values are in the @code{[8.0, 14.0]} range. The range for @option{threshold} is -@code{[0., 100.]}. - -Default value is @code{10.}. - -@item sc_pass, s -Set the flag to pass scene change frames to the next filter. Default value is @code{0} -You can enable it if you want to get snapshot of scene change frames only. -@end table - -@anchor{selectivecolor} -@section selectivecolor - -Adjust cyan, magenta, yellow and black (CMYK) to certain ranges of colors (such -as "reds", "yellows", "greens", "cyans", ...). The adjustment range is defined -by the "purity" of the color (that is, how saturated it already is). - -This filter is similar to the Adobe Photoshop Selective Color tool. - -The filter accepts the following options: - -@table @option -@item correction_method -Select color correction method. +@table @option +@item correction_method +Select color correction method. Available values are: @table @samp @@ -22200,23 +21656,6 @@ Keep the same chroma location (default). @end table @end table -@section sharpen_npp -Use the NVIDIA Performance Primitives (libnpp) to perform image sharpening with -border control. - -The following additional options are accepted: -@table @option - -@item border_type -Type of sampling to be used ad frame borders. One of the following: -@table @option - -@item replicate -Replicate pixel values. - -@end table -@end table - @section shear Apply shear transform to input video. @@ -24304,49 +23743,8 @@ The command above can also be specified as: transpose=1:portrait @end example -@section transpose_npp - -Transpose rows with columns in the input video and optionally flip it. -For more in depth examples see the @ref{transpose} video filter, which shares mostly the same options. - -It accepts the following parameters: - -@table @option - -@item dir -Specify the transposition direction. - -Can assume the following values: -@table @samp -@item cclock_flip -Rotate by 90 degrees counterclockwise and vertically flip. (default) - -@item clock -Rotate by 90 degrees clockwise. - -@item cclock -Rotate by 90 degrees counterclockwise. - -@item clock_flip -Rotate by 90 degrees clockwise and vertically flip. -@end table - -@item passthrough -Do not apply the transposition if the input geometry matches the one -specified by the specified value. It accepts the following values: -@table @samp -@item none -Always apply transposition. (default) -@item portrait -Preserve portrait geometry (when @var{height} >= @var{width}). -@item landscape -Preserve landscape geometry (when @var{width} >= @var{height}). -@end table - -@end table - -@section trim -Trim the input so that the output contains one continuous subpart of the input. +@section trim +Trim the input so that the output contains one continuous subpart of the input. It accepts the following parameters: @table @option @@ -26362,64 +25760,6 @@ filter"). It accepts the following parameters: -@table @option - -@item mode -The interlacing mode to adopt. It accepts one of the following values: - -@table @option -@item 0, send_frame -Output one frame for each frame. -@item 1, send_field -Output one frame for each field. -@item 2, send_frame_nospatial -Like @code{send_frame}, but it skips the spatial interlacing check. -@item 3, send_field_nospatial -Like @code{send_field}, but it skips the spatial interlacing check. -@end table - -The default value is @code{send_frame}. - -@item parity -The picture field parity assumed for the input interlaced video. It accepts one -of the following values: - -@table @option -@item 0, tff -Assume the top field is first. -@item 1, bff -Assume the bottom field is first. -@item -1, auto -Enable automatic detection of field parity. -@end table - -The default value is @code{auto}. -If the interlacing is unknown or the decoder does not export this information, -top field first will be assumed. - -@item deint -Specify which frames to deinterlace. Accepts one of the following -values: - -@table @option -@item 0, all -Deinterlace all frames. -@item 1, interlaced -Only deinterlace frames marked as interlaced. -@end table - -The default value is @code{all}. -@end table - -@section yadif_cuda - -Deinterlace the input video using the @ref{yadif} algorithm, but implemented -in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec -and/or nvenc. - -It accepts the following parameters: - - @table @option @item mode @@ -26890,6 +26230,677 @@ value. @c man end VIDEO FILTERS +@chapter Cuda Video Filters +@c man begin Cuda Video Filters + +@section Cuda +Below is a description of the currently available Nvidia Cuda video filters. + +@subsection bilateral_cuda +CUDA accelerated bilateral filter, an edge preserving filter. +This filter is mathematically accurate thanks to the use of GPU acceleration. +For best output quality, use one to one chroma subsampling, i.e. yuv444p format. + +The filter accepts the following options: +@table @option +@item sigmaS +Set sigma of gaussian function to calculate spatial weight, also called sigma space. +Allowed range is 0.1 to 512. Default is 0.1. + +@item sigmaR +Set sigma of gaussian function to calculate color range weight, also called sigma color. +Allowed range is 0.1 to 512. Default is 0.1. + +@item window_size +Set window size of the bilateral function to determine the number of neighbours to loop on. +If the number entered is even, one will be added automatically. +Allowed range is 1 to 255. Default is 1. +@end table +@subsubsection Examples + +@itemize +@item +Apply the bilateral filter on a video. + +@example +./ffmpeg -v verbose \ +-hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \ +-init_hw_device cuda \ +-filter_complex \ +" \ +[0:v]scale_cuda=format=yuv444p[scaled_video]; +[scaled_video]bilateral_cuda=window_size=9:sigmaS=3.0:sigmaR=50.0" \ +-an -sn -c:v h264_nvenc -cq 20 out.mp4 +@end example + +@end itemize + +@subsection bwdif_cuda + +Deinterlace the input video using the @ref{bwdif} algorithm, but implemented +in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec +and/or nvenc. + +It accepts the following parameters: + +@table @option +@item mode +The interlacing mode to adopt. It accepts one of the following values: + +@table @option +@item 0, send_frame +Output one frame for each frame. +@item 1, send_field +Output one frame for each field. +@end table + +The default value is @code{send_field}. + +@item parity +The picture field parity assumed for the input interlaced video. It accepts one +of the following values: + +@table @option +@item 0, tff +Assume the top field is first. +@item 1, bff +Assume the bottom field is first. +@item -1, auto +Enable automatic detection of field parity. +@end table + +The default value is @code{auto}. +If the interlacing is unknown or the decoder does not export this information, +top field first will be assumed. + +@item deint +Specify which frames to deinterlace. Accepts one of the following +values: + +@table @option +@item 0, all +Deinterlace all frames. +@item 1, interlaced +Only deinterlace frames marked as interlaced. +@end table + +The default value is @code{all}. +@end table + +@subsection chromakey_cuda +CUDA accelerated YUV colorspace color/chroma keying. + +This filter works like normal chromakey filter but operates on CUDA frames. +for more details and parameters see @ref{chromakey}. + +@subsubsection Examples + +@itemize +@item +Make all the green pixels in the input video transparent and use it as an overlay for another video: + +@example +./ffmpeg \ + -hwaccel cuda -hwaccel_output_format cuda -i input_green.mp4 \ + -hwaccel cuda -hwaccel_output_format cuda -i base_video.mp4 \ + -init_hw_device cuda \ + -filter_complex \ + " \ + [0:v]chromakey_cuda=0x25302D:0.1:0.12:1[overlay_video]; \ + [1:v]scale_cuda=format=yuv420p[base]; \ + [base][overlay_video]overlay_cuda" \ + -an -sn -c:v h264_nvenc -cq 20 output.mp4 +@end example + +@item +Process two software sources, explicitly uploading the frames: + +@example +./ffmpeg -init_hw_device cuda=cuda -filter_hw_device cuda \ + -f lavfi -i color=size=800x600:color=white,format=yuv420p \ + -f lavfi -i yuvtestsrc=size=200x200,format=yuv420p \ + -filter_complex \ + " \ + [0]hwupload[under]; \ + [1]hwupload,chromakey_cuda=green:0.1:0.12[over]; \ + [under][over]overlay_cuda" \ + -c:v hevc_nvenc -cq 18 -preset slow output.mp4 +@end example + +@end itemize + +@subsection colorspace_cuda + +CUDA accelerated implementation of the colorspace filter. + +It is by no means feature complete compared to the software colorspace filter, +and at the current time only supports color range conversion between jpeg/full +and mpeg/limited range. + +The filter accepts the following options: + +@table @option +@item range +Specify output color range. + +The accepted values are: +@table @samp +@item tv +TV (restricted) range + +@item mpeg +MPEG (restricted) range + +@item pc +PC (full) range + +@item jpeg +JPEG (full) range + +@end table + +@end table + +@subsection libvmaf_cuda + +This is the CUDA variant of the @ref{libvmaf} filter. It only accepts CUDA frames. + +It requires Netflix's vmaf library (libvmaf) as a pre-requisite. +After installing the library it can be enabled using: +@code{./configure --enable-nonfree --enable-ffnvcodec --enable-libvmaf}. + +@subsubsection Examples +@itemize + +@item +Basic usage showing CUVID hardware decoding and CUDA scaling with @ref{scale_cuda}: +@example +ffmpeg \ + -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i dis.obu \ + -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i ref.obu \ + -filter_complex " + [0:v]scale_cuda=format=yuv420p[dis]; \ + [1:v]scale_cuda=format=yuv420p[ref]; \ + [dis][ref]libvmaf_cuda=log_fmt=json:log_path=output.json + " \ + -f null - +@end example +@end itemize + +@anchor{overlay_cuda} +@subsection overlay_cuda + +Overlay one video on top of another. + +This is the CUDA variant of the @ref{overlay} filter. +It only accepts CUDA frames. The underlying input pixel formats have to match. + +It takes two inputs and has one output. The first input is the "main" +video on which the second input is overlaid. + +It accepts the following parameters: + +@table @option +@item x +@item y +Set expressions for the x and y coordinates of the overlaid video +on the main video. + +They can contain the following parameters: + +@table @option + +@item main_w, W +@item main_h, H +The main input width and height. + +@item overlay_w, w +@item overlay_h, h +The overlay input width and height. + +@item x +@item y +The computed values for @var{x} and @var{y}. They are evaluated for +each new frame. + +@item n +The ordinal index of the main input frame, starting from 0. + +@item pos +The byte offset position in the file of the main input frame, NAN if unknown. +Deprecated, do not use. + +@item t +The timestamp of the main input frame, expressed in seconds, NAN if unknown. + +@end table + +Default value is "0" for both expressions. + +@item eval +Set when the expressions for @option{x} and @option{y} are evaluated. + +It accepts the following values: +@table @option +@item init +Evaluate expressions once during filter initialization or +when a command is processed. + +@item frame +Evaluate expressions for each incoming frame +@end table + +Default value is @option{frame}. + +@item eof_action +See @ref{framesync}. + +@item shortest +See @ref{framesync}. + +@item repeatlast +See @ref{framesync}. + +@end table + +This filter also supports the @ref{framesync} options. + +@anchor{scale_cuda} +@subsection scale_cuda + +Scale (resize) and convert (pixel format) the input video, using accelerated CUDA kernels. +Setting the output width and height works in the same way as for the @ref{scale} filter. + +The filter accepts the following options: +@table @option +@item w +@item h +Set the output video dimension expression. Default value is the input dimension. + +Allows for the same expressions as the @ref{scale} filter. + +@item interp_algo +Sets the algorithm used for scaling: + +@table @var +@item nearest +Nearest neighbour + +Used by default if input parameters match the desired output. + +@item bilinear +Bilinear + +@item bicubic +Bicubic + +This is the default. + +@item lanczos +Lanczos + +@end table + +@item format +Controls the output pixel format. By default, or if none is specified, the input +pixel format is used. + +The filter does not support converting between YUV and RGB pixel formats. + +@item passthrough +If set to 0, every frame is processed, even if no conversion is necessary. +This mode can be useful to use the filter as a buffer for a downstream +frame-consumer that exhausts the limited decoder frame pool. + +If set to 1, frames are passed through as-is if they match the desired output +parameters. This is the default behaviour. + +@item param +Algorithm-Specific parameter. + +Affects the curves of the bicubic algorithm. + +@item force_original_aspect_ratio +@item force_divisible_by +Work the same as the identical @ref{scale} filter options. + +@end table + +@subsubsection Examples + +@itemize +@item +Scale input to 720p, keeping aspect ratio and ensuring the output is yuv420p. +@example +scale_cuda=-2:720:format=yuv420p +@end example + +@item +Upscale to 4K using nearest neighbour algorithm. +@example +scale_cuda=4096:2160:interp_algo=nearest +@end example + +@item +Don't do any conversion or scaling, but copy all input frames into newly allocated ones. +This can be useful to deal with a filter and encode chain that otherwise exhausts the +decoders frame pool. +@example +scale_cuda=passthrough=0 +@end example +@end itemize + +@subsection yadif_cuda + +Deinterlace the input video using the @ref{yadif} algorithm, but implemented +in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec +and/or nvenc. + +It accepts the following parameters: + + +@table @option + +@item mode +The interlacing mode to adopt. It accepts one of the following values: + +@table @option +@item 0, send_frame +Output one frame for each frame. +@item 1, send_field +Output one frame for each field. +@item 2, send_frame_nospatial +Like @code{send_frame}, but it skips the spatial interlacing check. +@item 3, send_field_nospatial +Like @code{send_field}, but it skips the spatial interlacing check. +@end table + +The default value is @code{send_frame}. + +@item parity +The picture field parity assumed for the input interlaced video. It accepts one +of the following values: + +@table @option +@item 0, tff +Assume the top field is first. +@item 1, bff +Assume the bottom field is first. +@item -1, auto +Enable automatic detection of field parity. +@end table + +The default value is @code{auto}. +If the interlacing is unknown or the decoder does not export this information, +top field first will be assumed. + +@item deint +Specify which frames to deinterlace. Accepts one of the following +values: + +@table @option +@item 0, all +Deinterlace all frames. +@item 1, interlaced +Only deinterlace frames marked as interlaced. +@end table + +The default value is @code{all}. +@end table + +@section Cuda NPP +Below is a description of the currently available NVIDIA Performance Primitives (libnpp) video filters. + +@anchor{scale_npp} +@subsection scale_npp + +Use the NVIDIA Performance Primitives (libnpp) to perform scaling and/or pixel +format conversion on CUDA video frames. Setting the output width and height +works in the same way as for the @var{scale} filter. + +The following additional options are accepted: +@table @option +@item format +The pixel format of the output CUDA frames. If set to the string "same" (the +default), the input format will be kept. Note that automatic format negotiation +and conversion is not yet supported for hardware frames + +@item interp_algo +The interpolation algorithm used for resizing. One of the following: +@table @option +@item nn +Nearest neighbour. + +@item linear +@item cubic +@item cubic2p_bspline +2-parameter cubic (B=1, C=0) + +@item cubic2p_catmullrom +2-parameter cubic (B=0, C=1/2) + +@item cubic2p_b05c03 +2-parameter cubic (B=1/2, C=3/10) + +@item super +Supersampling + +@item lanczos +@end table + +@item force_original_aspect_ratio +Enable decreasing or increasing output video width or height if necessary to +keep the original aspect ratio. Possible values: + +@table @samp +@item disable +Scale the video as specified and disable this feature. + +@item decrease +The output video dimensions will automatically be decreased if needed. + +@item increase +The output video dimensions will automatically be increased if needed. + +@end table + +One useful instance of this option is that when you know a specific device's +maximum allowed resolution, you can use this to limit the output video to +that, while retaining the aspect ratio. For example, device A allows +1280x720 playback, and your video is 1920x800. Using this option (set it to +decrease) and specifying 1280x720 to the command line makes the output +1280x533. + +Please note that this is a different thing than specifying -1 for @option{w} +or @option{h}, you still need to specify the output resolution for this option +to work. + +@item force_divisible_by +Ensures that both the output dimensions, width and height, are divisible by the +given integer when used together with @option{force_original_aspect_ratio}. This +works similar to using @code{-n} in the @option{w} and @option{h} options. + +This option respects the value set for @option{force_original_aspect_ratio}, +increasing or decreasing the resolution accordingly. The video's aspect ratio +may be slightly modified. + +This option can be handy if you need to have a video fit within or exceed +a defined resolution using @option{force_original_aspect_ratio} but also have +encoder restrictions on width or height divisibility. + +@item eval +Specify when to evaluate @var{width} and @var{height} expression. It accepts the following values: + +@table @samp +@item init +Only evaluate expressions once during the filter initialization or when a command is processed. + +@item frame +Evaluate expressions for each incoming frame. + +@end table + +@end table + +The values of the @option{w} and @option{h} options are expressions +containing the following constants: + +@table @var +@item in_w +@item in_h +The input width and height + +@item iw +@item ih +These are the same as @var{in_w} and @var{in_h}. + +@item out_w +@item out_h +The output (scaled) width and height + +@item ow +@item oh +These are the same as @var{out_w} and @var{out_h} + +@item a +The same as @var{iw} / @var{ih} + +@item sar +input sample aspect ratio + +@item dar +The input display aspect ratio. Calculated from @code{(iw / ih) * sar}. + +@item n +The (sequential) number of the input frame, starting from 0. +Only available with @code{eval=frame}. + +@item t +The presentation timestamp of the input frame, expressed as a number of +seconds. Only available with @code{eval=frame}. + +@item pos +The position (byte offset) of the frame in the input stream, or NaN if +this information is unavailable and/or meaningless (for example in case of synthetic video). +Only available with @code{eval=frame}. +Deprecated, do not use. +@end table + +@subsection scale2ref_npp + +Use the NVIDIA Performance Primitives (libnpp) to scale (resize) the input +video, based on a reference video. + +See the @ref{scale_npp} filter for available options, scale2ref_npp supports the same +but uses the reference video instead of the main input as basis. scale2ref_npp +also supports the following additional constants for the @option{w} and +@option{h} options: + +@table @var +@item main_w +@item main_h +The main input video's width and height + +@item main_a +The same as @var{main_w} / @var{main_h} + +@item main_sar +The main input video's sample aspect ratio + +@item main_dar, mdar +The main input video's display aspect ratio. Calculated from +@code{(main_w / main_h) * main_sar}. + +@item main_n +The (sequential) number of the main input frame, starting from 0. +Only available with @code{eval=frame}. + +@item main_t +The presentation timestamp of the main input frame, expressed as a number of +seconds. Only available with @code{eval=frame}. + +@item main_pos +The position (byte offset) of the frame in the main input stream, or NaN if +this information is unavailable and/or meaningless (for example in case of synthetic video). +Only available with @code{eval=frame}. +@end table + +@subsubsection Examples + +@itemize +@item +Scale a subtitle stream (b) to match the main video (a) in size before overlaying +@example +'scale2ref_npp[b][a];[a][b]overlay_cuda' +@end example + +@item +Scale a logo to 1/10th the height of a video, while preserving its display aspect ratio. +@example +[logo-in][video-in]scale2ref_npp=w=oh*mdar:h=ih/10[logo-out][video-out] +@end example +@end itemize + +@subsection sharpen_npp +Use the NVIDIA Performance Primitives (libnpp) to perform image sharpening with +border control. + +The following additional options are accepted: +@table @option + +@item border_type +Type of sampling to be used ad frame borders. One of the following: +@table @option + +@item replicate +Replicate pixel values. + +@end table +@end table + +@subsection transpose_npp + +Transpose rows with columns in the input video and optionally flip it. +For more in depth examples see the @ref{transpose} video filter, which shares mostly the same options. + +It accepts the following parameters: + +@table @option + +@item dir +Specify the transposition direction. + +Can assume the following values: +@table @samp +@item cclock_flip +Rotate by 90 degrees counterclockwise and vertically flip. (default) + +@item clock +Rotate by 90 degrees clockwise. + +@item cclock +Rotate by 90 degrees counterclockwise. + +@item clock_flip +Rotate by 90 degrees clockwise and vertically flip. +@end table + +@item passthrough +Do not apply the transposition if the input geometry matches the one +specified by the specified value. It accepts the following values: +@table @samp +@item none +Always apply transposition. (default) +@item portrait +Preserve portrait geometry (when @var{height} >= @var{width}). +@item landscape +Preserve landscape geometry (when @var{width} >= @var{height}). +@end table + +@end table + +@c man end Cuda Video Filters + @chapter OpenCL Video Filters @c man begin OPENCL VIDEO FILTERS -- 2.39.5 (Apple Git-154) _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".