@chapter Filtering Introduction
@c man begin FILTERING INTRODUCTION

Filtering in FFmpeg is enabled through the libavfilter library.

In libavfilter, a filter can have multiple inputs and multiple
outputs.
To illustrate the sorts of things that are possible, we consider the
following filtergraph.

@verbatim
                [main]
input --> split ---------------------> overlay --> output
            |                             ^
            |[tmp]                  [flip]|
            +-----> crop --> vflip -------+
@end verbatim

This filtergraph splits the input stream in two streams, then sends one
stream through the crop filter and the vflip filter, before merging it
back with the other stream by overlaying it on top. You can use the
following command to achieve this:

@example
ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
@end example

The result will be that the top half of the video is mirrored
onto the bottom half of the output video.

Filters in the same linear chain are separated by commas, and distinct
linear chains of filters are separated by semicolons. In our example,
@var{crop,vflip} are in one linear chain, @var{split} and
@var{overlay} are separately in another. The points where the linear
chains join are labelled by names enclosed in square brackets. In the
example, the split filter generates two outputs that are associated to
the labels @var{[main]} and @var{[tmp]}.

The stream sent to the second output of @var{split}, labelled as
@var{[tmp]}, is processed through the @var{crop} filter, which crops
away the lower half part of the video, and then vertically flipped. The
@var{overlay} filter takes in input the first unchanged output of the
split filter (which was labelled as @var{[main]}), and overlay on its
lower half the output generated by the @var{crop,vflip} filterchain.

Some filters take in input a list of parameters: they are specified
after the filter name and an equal sign, and are separated from each other
by a colon.

There exist so-called @var{source filters} that do not have an
audio/video input, and @var{sink filters} that will not have audio/video
output.

@c man end FILTERING INTRODUCTION

@chapter graph2dot
@c man begin GRAPH2DOT

The @file{graph2dot} program included in the FFmpeg @file{tools}
directory can be used to parse a filtergraph description and issue a
corresponding textual representation in the dot language.

Invoke the command:
@example
graph2dot -h
@end example

to see how to use @file{graph2dot}.

You can then pass the dot description to the @file{dot} program (from
the graphviz suite of programs) and obtain a graphical representation
of the filtergraph.

For example the sequence of commands:
@example
echo @var{GRAPH_DESCRIPTION} | \
tools/graph2dot -o graph.tmp && \
dot -Tpng graph.tmp -o graph.png && \
display graph.png
@end example

can be used to create and display an image representing the graph
described by the @var{GRAPH_DESCRIPTION} string. Note that this string must be
a complete self-contained graph, with its inputs and outputs explicitly defined.
For example if your command line is of the form:
@example
ffmpeg -i infile -vf scale=640:360 outfile
@end example
your @var{GRAPH_DESCRIPTION} string will need to be of the form:
@example
nullsrc,scale=640:360,nullsink
@end example
you may also need to set the @var{nullsrc} parameters and add a @var{format}
filter in order to simulate a specific input file.

@c man end GRAPH2DOT

@chapter Filtergraph description
@c man begin FILTERGRAPH DESCRIPTION

A filtergraph is a directed graph of connected filters. It can contain
cycles, and there can be multiple links between a pair of
filters. Each link has one input pad on one side connecting it to one
filter from which it takes its input, and one output pad on the other
side connecting it to one filter accepting its output.

Each filter in a filtergraph is an instance of a filter class
registered in the application, which defines the features and the
number of input and output pads of the filter.

A filter with no input pads is called a "source", and a filter with no
output pads is called a "sink".

@anchor{Filtergraph syntax}
@section Filtergraph syntax

A filtergraph has a textual representation, which is recognized by the
@option{-filter}/@option{-vf}/@option{-af} and
@option{-filter_complex} options in @command{ffmpeg} and
@option{-vf}/@option{-af} in @command{ffplay}, and by the
@code{avfilter_graph_parse_ptr()} function defined in
@file{libavfilter/avfilter.h}.

A filterchain consists of a sequence of connected filters, each one
connected to the previous one in the sequence. A filterchain is
represented by a list of ","-separated filter descriptions.

A filtergraph consists of a sequence of filterchains. A sequence of
filterchains is represented by a list of ";"-separated filterchain
descriptions.

A filter is represented by a string of the form:
[@var{in_link_1}]...[@var{in_link_N}]@var{filter_name}@@@var{id}=@var{arguments}[@var{out_link_1}]...[@var{out_link_M}]

@var{filter_name} is the name of the filter class of which the
described filter is an instance of, and has to be the name of one of
the filter classes registered in the program optionally followed by "@@@var{id}".
The name of the filter class is optionally followed by a string
"=@var{arguments}".

@var{arguments} is a string which contains the parameters used to
initialize the filter instance. It may have one of two forms:
@itemize

@item
A ':'-separated list of @var{key=value} pairs.

@item
A ':'-separated list of @var{value}. In this case, the keys are assumed to be
the option names in the order they are declared. E.g. the @code{fade} filter
declares three options in this order -- @option{type}, @option{start_frame} and
@option{nb_frames}. Then the parameter list @var{in:0:30} means that the value
@var{in} is assigned to the option @option{type}, @var{0} to
@option{start_frame} and @var{30} to @option{nb_frames}.

@item
A ':'-separated list of mixed direct @var{value} and long @var{key=value}
pairs. The direct @var{value} must precede the @var{key=value} pairs, and
follow the same constraints order of the previous point. The following
@var{key=value} pairs can be set in any preferred order.

@end itemize

If the option value itself is a list of items (e.g. the @code{format} filter
takes a list of pixel formats), the items in the list are usually separated by
@samp{|}.

The list of arguments can be quoted using the character @samp{'} as initial
and ending mark, and the character @samp{\} for escaping the characters
within the quoted text; otherwise the argument string is considered
terminated when the next special character (belonging to the set
@samp{[]=;,}) is encountered.

The name and arguments of the filter are optionally preceded and
followed by a list of link labels.
A link label allows one to name a link and associate it to a filter output
or input pad. The preceding labels @var{in_link_1}
... @var{in_link_N}, are associated to the filter input pads,
the following labels @var{out_link_1} ... @var{out_link_M}, are
associated to the output pads.

When two link labels with the same name are found in the
filtergraph, a link between the corresponding input and output pad is
created.

If an output pad is not labelled, it is linked by default to the first
unlabelled input pad of the next filter in the filterchain.
For example in the filterchain
@example
nullsrc, split[L1], [L2]overlay, nullsink
@end example
the split filter instance has two output pads, and the overlay filter
instance two input pads. The first output pad of split is labelled
"L1", the first input pad of overlay is labelled "L2", and the second
output pad of split is linked to the second input pad of overlay,
which are both unlabelled.

In a filter description, if the input label of the first filter is not
specified, "in" is assumed; if the output label of the last filter is not
specified, "out" is assumed.

In a complete filterchain all the unlabelled filter input and output
pads must be connected. A filtergraph is considered valid if all the
filter input and output pads of all the filterchains are connected.

Libavfilter will automatically insert @ref{scale} filters where format
conversion is required. It is possible to specify swscale flags
for those automatically inserted scalers by prepending
@code{sws_flags=@var{flags};}
to the filtergraph description.

Here is a BNF description of the filtergraph syntax:
@example
@var{NAME}             ::= sequence of alphanumeric characters and '_'
@var{FILTER_NAME}      ::= @var{NAME}["@@"@var{NAME}]
@var{LINKLABEL}        ::= "[" @var{NAME} "]"
@var{LINKLABELS}       ::= @var{LINKLABEL} [@var{LINKLABELS}]
@var{FILTER_ARGUMENTS} ::= sequence of chars (possibly quoted)
@var{FILTER}           ::= [@var{LINKLABELS}] @var{FILTER_NAME} ["=" @var{FILTER_ARGUMENTS}] [@var{LINKLABELS}]
@var{FILTERCHAIN}      ::= @var{FILTER} [,@var{FILTERCHAIN}]
@var{FILTERGRAPH}      ::= [sws_flags=@var{flags};] @var{FILTERCHAIN} [;@var{FILTERGRAPH}]
@end example

@anchor{filtergraph escaping}
@section Notes on filtergraph escaping

Filtergraph description composition entails several levels of
escaping. See @ref{quoting_and_escaping,,the "Quoting and escaping"
section in the ffmpeg-utils(1) manual,ffmpeg-utils} for more
information about the employed escaping procedure.

A first level escaping affects the content of each filter option
value, which may contain the special character @code{:} used to
separate values, or one of the escaping characters @code{\'}.

A second level escaping affects the whole filter description, which
may contain the escaping characters @code{\'} or the special
characters @code{[],;} used by the filtergraph description.

Finally, when you specify a filtergraph on a shell commandline, you
need to perform a third level escaping for the shell special
characters contained within it.

For example, consider the following string to be embedded in
the @ref{drawtext} filter description @option{text} value:
@example
this is a 'string': may contain one, or more, special characters
@end example

This string contains the @code{'} special escaping character, and the
@code{:} special character, so it needs to be escaped in this way:
@example
text=this is a \'string\'\: may contain one, or more, special characters
@end example

A second level of escaping is required when embedding the filter
description in a filtergraph description, in order to escape all the
filtergraph special characters. Thus the example above becomes:
@example
drawtext=text=this is a \\\'string\\\'\\: may contain one\, or more\, special characters
@end example
(note that in addition to the @code{\'} escaping special characters,
also @code{,} needs to be escaped).

Finally an additional level of escaping is needed when writing the
filtergraph description in a shell command, which depends on the
escaping rules of the adopted shell. For example, assuming that
@code{\} is special and needs to be escaped with another @code{\}, the
previous string will finally result in:
@example
-vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters"
@end example

@chapter Timeline editing

Some filters support a generic @option{enable} option. For the filters
supporting timeline editing, this option can be set to an expression which is
evaluated before sending a frame to the filter. If the evaluation is non-zero,
the filter will be enabled, otherwise the frame will be sent unchanged to the
next filter in the filtergraph.

The expression accepts the following values:
@table @samp
@item t
timestamp expressed in seconds, NAN if the input timestamp is unknown

@item n
sequential number of the input frame, starting from 0

@item pos
the position in the file of the input frame, NAN if unknown

@item w
@item h
width and height of the input frame if video
@end table

Additionally, these filters support an @option{enable} command that can be used
to re-define the expression.

Like any other filtering option, the @option{enable} option follows the same
rules.

For example, to enable a blur filter (@ref{smartblur}) from 10 seconds to 3
minutes, and a @ref{curves} filter starting at 3 seconds:
@example
smartblur = enable='between(t,10,3*60)',
curves    = enable='gte(t,3)' : preset=cross_process
@end example

See @code{ffmpeg -filters} to view which filters have timeline support.

@c man end FILTERGRAPH DESCRIPTION

@anchor{commands}
@chapter Changing options at runtime with a command

Some options can be changed during the operation of the filter using
a command. These options are marked 'T' on the output of
@command{ffmpeg} @option{-h filter=<name of filter>}.
The name of the command is the name of the option and the argument is
the new value.

@anchor{framesync}
@chapter Options for filters with several inputs (framesync)
@c man begin OPTIONS FOR FILTERS WITH SEVERAL INPUTS

Some filters with several inputs support a common set of options.
These options can only be set by name, not with the short notation.

@table @option
@item eof_action
The action to take when EOF is encountered on the secondary input; it accepts
one of the following values:

@table @option
@item repeat
Repeat the last frame (the default).
@item endall
End both streams.
@item pass
Pass the main input through.
@end table

@item shortest
If set to 1, force the output to terminate when the shortest input
terminates. Default value is 0.

@item repeatlast
If set to 1, force the filter to extend the last frame of secondary streams
until the end of the primary stream. A value of 0 disables this behavior.
Default value is 1.
@end table

@c man end OPTIONS FOR FILTERS WITH SEVERAL INPUTS

@chapter Audio Filters
@c man begin AUDIO FILTERS

When you configure your FFmpeg build, you can disable any of the
existing filters using @code{--disable-filters}.
The configure output will show the audio filters included in your
build.

Below is a description of the currently available audio filters.

@section acompressor

A compressor is mainly used to reduce the dynamic range of a signal.
Especially modern music is mostly compressed at a high ratio to
improve the overall loudness. It's done to get the highest attention
of a listener, "fatten" the sound and bring more "power" to the track.
If a signal is compressed too much it may sound dull or "dead"
afterwards or it may start to "pump" (which could be a powerful effect
but can also destroy a track completely).
The right compression is the key to reach a professional sound and is
the high art of mixing and mastering. Because of its complex settings
it may take a long time to get the right feeling for this kind of effect.

Compression is done by detecting the volume above a chosen level
@code{threshold} and dividing it by the factor set with @code{ratio}.
So if you set the threshold to -12dB and your signal reaches -6dB a ratio
of 2:1 will result in a signal at -9dB. Because an exact manipulation of
the signal would cause distortion of the waveform the reduction can be
levelled over the time. This is done by setting "Attack" and "Release".
@code{attack} determines how long the signal has to rise above the threshold
before any reduction will occur and @code{release} sets the time the signal
has to fall below the threshold to reduce the reduction again. Shorter signals
than the chosen attack time will be left untouched.
The overall reduction of the signal can be made up afterwards with the
@code{makeup} setting. So compressing the peaks of a signal about 6dB and
raising the makeup to this level results in a signal twice as loud than the
source. To gain a softer entry in the compression the @code{knee} flattens the
hard edge at the threshold in the range of the chosen decibels.

The filter accepts the following options:

@table @option
@item level_in
Set input gain. Default is 1. Range is between 0.015625 and 64.

@item mode
Set mode of compressor operation. Can be @code{upward} or @code{downward}.
Default is @code{downward}.

@item threshold
If a signal of stream rises above this level it will affect the gain
reduction.
By default it is 0.125. Range is between 0.00097563 and 1.

@item ratio
Set a ratio by which the signal is reduced. 1:2 means that if the level
rose 4dB above the threshold, it will be only 2dB above after the reduction.
Default is 2. Range is between 1 and 20.

@item attack
Amount of milliseconds the signal has to rise above the threshold before gain
reduction starts. Default is 20. Range is between 0.01 and 2000.

@item release
Amount of milliseconds the signal has to fall below the threshold before
reduction is decreased again. Default is 250. Range is between 0.01 and 9000.

@item makeup
Set the amount by how much signal will be amplified after processing.
Default is 1. Range is from 1 to 64.

@item knee
Curve the sharp knee around the threshold to enter gain reduction more softly.
Default is 2.82843. Range is between 1 and 8.

@item link
Choose if the @code{average} level between all channels of input stream
or the louder(@code{maximum}) channel of input stream affects the
reduction. Default is @code{average}.

@item detection
Should the exact signal be taken in case of @code{peak} or an RMS one in case
of @code{rms}. Default is @code{rms} which is mostly smoother.

@item mix
How much to use compressed signal in output. Default is 1.
Range is between 0 and 1.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section acontrast
Simple audio dynamic range compression/expansion filter.

The filter accepts the following options:

@table @option
@item contrast
Set contrast. Default is 33. Allowed range is between 0 and 100.
@end table

@section acopy

Copy the input audio source unchanged to the output. This is mainly useful for
testing purposes.

@section acrossfade

Apply cross fade from one input audio stream to another input audio stream.
The cross fade is applied for specified duration near the end of first stream.

The filter accepts the following options:

@table @option
@item nb_samples, ns
Specify the number of samples for which the cross fade effect has to last.
At the end of the cross fade effect the first input audio will be completely
silent. Default is 44100.

@item duration, d
Specify the duration of the cross fade effect. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.
By default the duration is determined by @var{nb_samples}.
If set this option is used instead of @var{nb_samples}.

@item overlap, o
Should first stream end overlap with second stream start. Default is enabled.

@item curve1
Set curve for cross fade transition for first stream.

@item curve2
Set curve for cross fade transition for second stream.

For description of available curve types see @ref{afade} filter description.
@end table

@subsection Examples

@itemize
@item
Cross fade from one input to another:
@example
ffmpeg -i first.flac -i second.flac -filter_complex acrossfade=d=10:c1=exp:c2=exp output.flac
@end example

@item
Cross fade from one input to another but without overlapping:
@example
ffmpeg -i first.flac -i second.flac -filter_complex acrossfade=d=10:o=0:c1=exp:c2=exp output.flac
@end example
@end itemize

@section acrossover
Split audio stream into several bands.

This filter splits audio stream into two or more frequency ranges.
Summing all streams back will give flat output.

The filter accepts the following options:

@table @option
@item split
Set split frequencies. Those must be positive and increasing.

@item order
Set filter order for each band split. This controls filter roll-off or steepness
of filter transfer function.
Available values are:

@table @samp
@item 2nd
12 dB per octave.
@item 4th
24 dB per octave.
@item 6th
36 dB per octave.
@item 8th
48 dB per octave.
@item 10th
60 dB per octave.
@item 12th
72 dB per octave.
@item 14th
84 dB per octave.
@item 16th
96 dB per octave.
@item 18th
108 dB per octave.
@item 20th
120 dB per octave.
@end table

Default is @var{4th}.

@item level
Set input gain level. Allowed range is from 0 to 1. Default value is 1.

@item gains
Set output gain for each band. Default value is 1 for all bands.
@end table

@subsection Examples

@itemize
@item
Split input audio stream into two bands (low and high) with split frequency of 1500 Hz,
each band will be in separate stream:
@example
ffmpeg -i in.flac -filter_complex 'acrossover=split=1500[LOW][HIGH]' -map '[LOW]' low.wav -map '[HIGH]' high.wav
@end example

@item
Same as above, but with higher filter order:
@example
ffmpeg -i in.flac -filter_complex 'acrossover=split=1500:order=8th[LOW][HIGH]' -map '[LOW]' low.wav -map '[HIGH]' high.wav
@end example

@item
Same as above, but also with additional middle band (frequencies between 1500 and 8000):
@example
ffmpeg -i in.flac -filter_complex 'acrossover=split=1500 8000:order=8th[LOW][MID][HIGH]' -map '[LOW]' low.wav -map '[MID]' mid.wav -map '[HIGH]' high.wav
@end example
@end itemize

@section acrusher

Reduce audio bit resolution.

This filter is bit crusher with enhanced functionality. A bit crusher
is used to audibly reduce number of bits an audio signal is sampled
with. This doesn't change the bit depth at all, it just produces the
effect. Material reduced in bit depth sounds more harsh and "digital".
This filter is able to even round to continuous values instead of discrete
bit depths.
Additionally it has a D/C offset which results in different crushing of
the lower and the upper half of the signal.
An Anti-Aliasing setting is able to produce "softer" crushing sounds.

Another feature of this filter is the logarithmic mode.
This setting switches from linear distances between bits to logarithmic ones.
The result is a much more "natural" sounding crusher which doesn't gate low
signals for example. The human ear has a logarithmic perception,
so this kind of crushing is much more pleasant.
Logarithmic crushing is also able to get anti-aliased.

The filter accepts the following options:

@table @option
@item level_in
Set level in.

@item level_out
Set level out.

@item bits
Set bit reduction.

@item mix
Set mixing amount.

@item mode
Can be linear: @code{lin} or logarithmic: @code{log}.

@item dc
Set DC.

@item aa
Set anti-aliasing.

@item samples
Set sample reduction.

@item lfo
Enable LFO. By default disabled.

@item lforange
Set LFO range.

@item lforate
Set LFO rate.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section acue

Delay audio filtering until a given wallclock timestamp. See the @ref{cue}
filter.

@section adeclick
Remove impulsive noise from input audio.

Samples detected as impulsive noise are replaced by interpolated samples using
autoregressive modelling.

@table @option
@item window, w
Set window size, in milliseconds. Allowed range is from @code{10} to
@code{100}. Default value is @code{55} milliseconds.
This sets size of window which will be processed at once.

@item overlap, o
Set window overlap, in percentage of window size. Allowed range is from
@code{50} to @code{95}. Default value is @code{75} percent.
Setting this to a very high value increases impulsive noise removal but makes
whole process much slower.

@item arorder, a
Set autoregression order, in percentage of window size. Allowed range is from
@code{0} to @code{25}. Default value is @code{2} percent. This option also
controls quality of interpolated samples using neighbour good samples.

@item threshold, t
Set threshold value. Allowed range is from @code{1} to @code{100}.
Default value is @code{2}.
This controls the strength of impulsive noise which is going to be removed.
The lower value, the more samples will be detected as impulsive noise.

@item burst, b
Set burst fusion, in percentage of window size. Allowed range is @code{0} to
@code{10}. Default value is @code{2}.
If any two samples detected as noise are spaced less than this value then any
sample between those two samples will be also detected as noise.

@item method, m
Set overlap method.

It accepts the following values:
@table @option
@item add, a
Select overlap-add method. Even not interpolated samples are slightly
changed with this method.

@item save, s
Select overlap-save method. Not interpolated samples remain unchanged.
@end table

Default value is @code{a}.
@end table

@section adeclip
Remove clipped samples from input audio.

Samples detected as clipped are replaced by interpolated samples using
autoregressive modelling.

@table @option
@item window, w
Set window size, in milliseconds. Allowed range is from @code{10} to @code{100}.
Default value is @code{55} milliseconds.
This sets size of window which will be processed at once.

@item overlap, o
Set window overlap, in percentage of window size. Allowed range is from @code{50}
to @code{95}. Default value is @code{75} percent.

@item arorder, a
Set autoregression order, in percentage of window size. Allowed range is from
@code{0} to @code{25}. Default value is @code{8} percent. This option also controls
quality of interpolated samples using neighbour good samples.

@item threshold, t
Set threshold value. Allowed range is from @code{1} to @code{100}.
Default value is @code{10}. Higher values make clip detection less aggressive.

@item hsize, n
Set size of histogram used to detect clips. Allowed range is from @code{100} to @code{9999}.
Default value is @code{1000}. Higher values make clip detection less aggressive.

@item method, m
Set overlap method.

It accepts the following values:
@table @option
@item add, a
Select overlap-add method. Even not interpolated samples are slightly changed
with this method.

@item save, s
Select overlap-save method. Not interpolated samples remain unchanged.
@end table

Default value is @code{a}.
@end table

@section adelay

Delay one or more audio channels.

Samples in delayed channel are filled with silence.

The filter accepts the following option:

@table @option
@item delays
Set list of delays in milliseconds for each channel separated by '|'.
Unused delays will be silently ignored. If number of given delays is
smaller than number of channels all remaining channels will not be delayed.
If you want to delay exact number of samples, append 'S' to number.
If you want instead to delay in seconds, append 's' to number.

@item all
Use last set delay for all remaining channels. By default is disabled.
This option if enabled changes how option @code{delays} is interpreted.
@end table

@subsection Examples

@itemize
@item
Delay first channel by 1.5 seconds, the third channel by 0.5 seconds and leave
the second channel (and any other channels that may be present) unchanged.
@example
adelay=1500|0|500
@end example

@item
Delay second channel by 500 samples, the third channel by 700 samples and leave
the first channel (and any other channels that may be present) unchanged.
@example
adelay=0|500S|700S
@end example

@item
Delay all channels by same number of samples:
@example
adelay=delays=64S:all=1
@end example
@end itemize

@section adenorm
Remedy denormals in audio by adding extremely low-level noise.

This filter shall be placed before any filter that can produce denormals.

A description of the accepted parameters follows.

@table @option
@item level
Set level of added noise in dB. Default is @code{-351}.
Allowed range is from -451 to -90.

@item type
Set type of added noise.

@table @option
@item dc
Add DC signal.
@item ac
Add AC signal.
@item square
Add square signal.
@item pulse
Add pulse signal.
@end table

Default is @code{dc}.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section aderivative, aintegral

Compute derivative/integral of audio stream.

Applying both filters one after another produces original audio.

@section aecho

Apply echoing to the input audio.

Echoes are reflected sound and can occur naturally amongst mountains
(and sometimes large buildings) when talking or shouting; digital echo
effects emulate this behaviour and are often used to help fill out the
sound of a single instrument or vocal. The time difference between the
original signal and the reflection is the @code{delay}, and the
loudness of the reflected signal is the @code{decay}.
Multiple echoes can have different delays and decays.

A description of the accepted parameters follows.

@table @option
@item in_gain
Set input gain of reflected signal. Default is @code{0.6}.

@item out_gain
Set output gain of reflected signal. Default is @code{0.3}.

@item delays
Set list of time intervals in milliseconds between original signal and reflections
separated by '|'. Allowed range for each @code{delay} is @code{(0 - 90000.0]}.
Default is @code{1000}.

@item decays
Set list of loudness of reflected signals separated by '|'.
Allowed range for each @code{decay} is @code{(0 - 1.0]}.
Default is @code{0.5}.
@end table

@subsection Examples

@itemize
@item
Make it sound as if there are twice as many instruments as are actually playing:
@example
aecho=0.8:0.88:60:0.4
@end example

@item
If delay is very short, then it sounds like a (metallic) robot playing music:
@example
aecho=0.8:0.88:6:0.4
@end example

@item
A longer delay will sound like an open air concert in the mountains:
@example
aecho=0.8:0.9:1000:0.3
@end example

@item
Same as above but with one more mountain:
@example
aecho=0.8:0.9:1000|1800:0.3|0.25
@end example
@end itemize

@section aemphasis
Audio emphasis filter creates or restores material directly taken from LPs or
emphased CDs with different filter curves. E.g. to store music on vinyl the
signal has to be altered by a filter first to even out the disadvantages of
this recording medium.
Once the material is played back the inverse filter has to be applied to
restore the distortion of the frequency response.

The filter accepts the following options:

@table @option
@item level_in
Set input gain.

@item level_out
Set output gain.

@item mode
Set filter mode. For restoring material use @code{reproduction} mode, otherwise
use @code{production} mode. Default is @code{reproduction} mode.

@item type
Set filter type. Selects medium. Can be one of the following:

@table @option
@item col
select Columbia.
@item emi
select EMI.
@item bsi
select BSI (78RPM).
@item riaa
select RIAA.
@item cd
select Compact Disc (CD).
@item 50fm
select 50µs (FM).
@item 75fm
select 75µs (FM).
@item 50kf
select 50µs (FM-KF).
@item 75kf
select 75µs (FM-KF).
@end table
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section aeval

Modify an audio signal according to the specified expressions.

This filter accepts one or more expressions (one for each channel),
which are evaluated and used to modify a corresponding audio signal.

It accepts the following parameters:

@table @option
@item exprs
Set the '|'-separated expressions list for each separate channel. If
the number of input channels is greater than the number of
expressions, the last specified expression is used for the remaining
output channels.

@item channel_layout, c
Set output channel layout. If not specified, the channel layout is
specified by the number of expressions. If set to @samp{same}, it will
use by default the same input channel layout.
@end table

Each expression in @var{exprs} can contain the following constants and functions:

@table @option
@item ch
channel number of the current expression

@item n
number of the evaluated sample, starting from 0

@item s
sample rate

@item t
time of the evaluated sample expressed in seconds

@item nb_in_channels
@item nb_out_channels
input and output number of channels

@item val(CH)
the value of input channel with number @var{CH}
@end table

Note: this filter is slow. For faster processing you should use a
dedicated filter.

@subsection Examples

@itemize
@item
Half volume:
@example
aeval=val(ch)/2:c=same
@end example

@item
Invert phase of the second channel:
@example
aeval=val(0)|-val(1)
@end example
@end itemize

@section aexciter

An exciter is used to produce high sound that is not present in the
original signal. This is done by creating harmonic distortions of the
signal which are restricted in range and added to the original signal.
An Exciter raises the upper end of an audio signal without simply raising
the higher frequencies like an equalizer would do to create a more
"crisp" or "brilliant" sound.

The filter accepts the following options:

@table @option
@item level_in
Set input level prior processing of signal.
Allowed range is from 0 to 64.
Default value is 1.

@item level_out
Set output level after processing of signal.
Allowed range is from 0 to 64.
Default value is 1.

@item amount
Set the amount of harmonics added to original signal.
Allowed range is from 0 to 64.
Default value is 1.

@item drive
Set the amount of newly created harmonics.
Allowed range is from 0.1 to 10.
Default value is 8.5.

@item blend
Set the octave of newly created harmonics.
Allowed range is from -10 to 10.
Default value is 0.

@item freq
Set the lower frequency limit of producing harmonics in Hz.
Allowed range is from 2000 to 12000 Hz.
Default is 7500 Hz.

@item ceil
Set the upper frequency limit of producing harmonics.
Allowed range is from 9999 to 20000 Hz.
If value is lower than 10000 Hz no limit is applied.

@item listen
Mute the original signal and output only added harmonics.
By default is disabled.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@anchor{afade}
@section afade

Apply fade-in/out effect to input audio.

A description of the accepted parameters follows.

@table @option
@item type, t
Specify the effect type, can be either @code{in} for fade-in, or
@code{out} for a fade-out effect. Default is @code{in}.

@item start_sample, ss
Specify the number of the start sample for starting to apply the fade
effect. Default is 0.

@item nb_samples, ns
Specify the number of samples for which the fade effect has to last. At
the end of the fade-in effect the output audio will have the same
volume as the input audio, at the end of the fade-out transition
the output audio will be silence. Default is 44100.

@item start_time, st
Specify the start time of the fade effect. Default is 0.
The value must be specified as a time duration; see
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.
If set this option is used instead of @var{start_sample}.

@item duration, d
Specify the duration of the fade effect. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.
At the end of the fade-in effect the output audio will have the same
volume as the input audio, at the end of the fade-out transition
the output audio will be silence.
By default the duration is determined by @var{nb_samples}.
If set this option is used instead of @var{nb_samples}.

@item curve
Set curve for fade transition.

It accepts the following values:
@table @option
@item tri
select triangular, linear slope (default)
@item qsin
select quarter of sine wave
@item hsin
select half of sine wave
@item esin
select exponential sine wave
@item log
select logarithmic
@item ipar
select inverted parabola
@item qua
select quadratic
@item cub
select cubic
@item squ
select square root
@item cbr
select cubic root
@item par
select parabola
@item exp
select exponential
@item iqsin
select inverted quarter of sine wave
@item ihsin
select inverted half of sine wave
@item dese
select double-exponential seat
@item desi
select double-exponential sigmoid
@item losi
select logistic sigmoid
@item sinc
select sine cardinal function
@item isinc
select inverted sine cardinal function
@item nofade
no fade applied
@end table
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@subsection Examples

@itemize
@item
Fade in first 15 seconds of audio:
@example
afade=t=in:ss=0:d=15
@end example

@item
Fade out last 25 seconds of a 900 seconds audio:
@example
afade=t=out:st=875:d=25
@end example
@end itemize

@section afftdn
Denoise audio samples with FFT.

A description of the accepted parameters follows.

@table @option
@item nr
Set the noise reduction in dB, allowed range is 0.01 to 97.
Default value is 12 dB.

@item nf
Set the noise floor in dB, allowed range is -80 to -20.
Default value is -50 dB.

@item nt
Set the noise type.

It accepts the following values:
@table @option
@item w
Select white noise.

@item v
Select vinyl noise.

@item s
Select shellac noise.

@item c
Select custom noise, defined in @code{bn} option.

Default value is white noise.
@end table

@item bn
Set custom band noise for every one of 15 bands.
Bands are separated by ' ' or '|'.

@item rf
Set the residual floor in dB, allowed range is -80 to -20.
Default value is -38 dB.

@item tn
Enable noise tracking. By default is disabled.
With this enabled, noise floor is automatically adjusted.

@item tr
Enable residual tracking. By default is disabled.

@item om
Set the output mode.

It accepts the following values:
@table @option
@item i
Pass input unchanged.

@item o
Pass noise filtered out.

@item n
Pass only noise.

Default value is @var{o}.
@end table
@end table

@subsection Commands

This filter supports the following commands:
@table @option
@item sample_noise, sn
Start or stop measuring noise profile.
Syntax for the command is : "start" or "stop" string.
After measuring noise profile is stopped it will be
automatically applied in filtering.

@item noise_reduction, nr
Change noise reduction. Argument is single float number.
Syntax for the command is : "@var{noise_reduction}"

@item noise_floor, nf
Change noise floor. Argument is single float number.
Syntax for the command is : "@var{noise_floor}"

@item output_mode, om
Change output mode operation.
Syntax for the command is : "i", "o" or "n" string.
@end table

@section afftfilt
Apply arbitrary expressions to samples in frequency domain.

@table @option
@item real
Set frequency domain real expression for each separate channel separated
by '|'. Default is "re".
If the number of input channels is greater than the number of
expressions, the last specified expression is used for the remaining
output channels.

@item imag
Set frequency domain imaginary expression for each separate channel
separated by '|'. Default is "im".

Each expression in @var{real} and @var{imag} can contain the following
constants and functions:

@table @option
@item sr
sample rate

@item b
current frequency bin number

@item nb
number of available bins

@item ch
channel number of the current expression

@item chs
number of channels

@item pts
current frame pts

@item re
current real part of frequency bin of current channel

@item im
current imaginary part of frequency bin of current channel

@item real(b, ch)
Return the value of real part of frequency bin at location (@var{bin},@var{channel})

@item imag(b, ch)
Return the value of imaginary part of frequency bin at location (@var{bin},@var{channel})
@end table

@item win_size
Set window size. Allowed range is from 16 to 131072.
Default is @code{4096}

@item win_func
Set window function. Default is @code{hann}.

@item overlap
Set window overlap. If set to 1, the recommended overlap for selected
window function will be picked. Default is @code{0.75}.
@end table

@subsection Examples

@itemize
@item
Leave almost only low frequencies in audio:
@example
afftfilt="'real=re * (1-clip((b/nb)*b,0,1))':imag='im * (1-clip((b/nb)*b,0,1))'"
@end example

@item
Apply robotize effect:
@example
afftfilt="real='hypot(re,im)*sin(0)':imag='hypot(re,im)*cos(0)':win_size=512:overlap=0.75"
@end example

@item
Apply whisper effect:
@example
afftfilt="real='hypot(re,im)*cos((random(0)*2-1)*2*3.14)':imag='hypot(re,im)*sin((random(1)*2-1)*2*3.14)':win_size=128:overlap=0.8"
@end example
@end itemize

@anchor{afir}
@section afir

Apply an arbitrary Finite Impulse Response filter.

This filter is designed for applying long FIR filters,
up to 60 seconds long.

It can be used as component for digital crossover filters,
room equalization, cross talk cancellation, wavefield synthesis,
auralization, ambiophonics, ambisonics and spatialization.

This filter uses the streams higher than first one as FIR coefficients.
If the non-first stream holds a single channel, it will be used
for all input channels in the first stream, otherwise
the number of channels in the non-first stream must be same as
the number of channels in the first stream.

It accepts the following parameters:

@table @option
@item dry
Set dry gain. This sets input gain.

@item wet
Set wet gain. This sets final output gain.

@item length
Set Impulse Response filter length. Default is 1, which means whole IR is processed.

@item gtype
Enable applying gain measured from power of IR.

Set which approach to use for auto gain measurement.

@table @option
@item none
Do not apply any gain.

@item peak
select peak gain, very conservative approach. This is default value.

@item dc
select DC gain, limited application.

@item gn
select gain to noise approach, this is most popular one.
@end table

@item irgain
Set gain to be applied to IR coefficients before filtering.
Allowed range is 0 to 1. This gain is applied after any gain applied with @var{gtype} option.

@item irfmt
Set format of IR stream. Can be @code{mono} or @code{input}.
Default is @code{input}.

@item maxir
Set max allowed Impulse Response filter duration in seconds. Default is 30 seconds.
Allowed range is 0.1 to 60 seconds.

@item response
Show IR frequency response, magnitude(magenta), phase(green) and group delay(yellow) in additional video stream.
By default it is disabled.

@item channel
Set for which IR channel to display frequency response. By default is first channel
displayed. This option is used only when @var{response} is enabled.

@item size
Set video stream size. This option is used only when @var{response} is enabled.

@item rate
Set video stream frame rate. This option is used only when @var{response} is enabled.

@item minp
Set minimal partition size used for convolution. Default is @var{8192}.
Allowed range is from @var{1} to @var{32768}.
Lower values decreases latency at cost of higher CPU usage.

@item maxp
Set maximal partition size used for convolution. Default is @var{8192}.
Allowed range is from @var{8} to @var{32768}.
Lower values may increase CPU usage.

@item nbirs
Set number of input impulse responses streams which will be switchable at runtime.
Allowed range is from @var{1} to @var{32}. Default is @var{1}.

@item ir
Set IR stream which will be used for convolution, starting from @var{0}, should always be
lower than supplied value by @code{nbirs} option. Default is @var{0}.
This option can be changed at runtime via @ref{commands}.
@end table

@subsection Examples

@itemize
@item
Apply reverb to stream using mono IR file as second input, complete command using ffmpeg:
@example
ffmpeg -i input.wav -i middle_tunnel_1way_mono.wav -lavfi afir output.wav
@end example
@end itemize

@anchor{aformat}
@section aformat

Set output format constraints for the input audio. The framework will
negotiate the most appropriate format to minimize conversions.

It accepts the following parameters:
@table @option

@item sample_fmts, f
A '|'-separated list of requested sample formats.

@item sample_rates, r
A '|'-separated list of requested sample rates.

@item channel_layouts, cl
A '|'-separated list of requested channel layouts.

See @ref{channel layout syntax,,the Channel Layout section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the required syntax.
@end table

If a parameter is omitted, all values are allowed.

Force the output to either unsigned 8-bit or signed 16-bit stereo
@example
aformat=sample_fmts=u8|s16:channel_layouts=stereo
@end example

@section afreqshift
Apply frequency shift to input audio samples.

The filter accepts the following options:

@table @option
@item shift
Specify frequency shift. Allowed range is -INT_MAX to INT_MAX.
Default value is 0.0.

@item level
Set output gain applied to final output. Allowed range is from 0.0 to 1.0.
Default value is 1.0.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section agate

A gate is mainly used to reduce lower parts of a signal. This kind of signal
processing reduces disturbing noise between useful signals.

Gating is done by detecting the volume below a chosen level @var{threshold}
and dividing it by the factor set with @var{ratio}. The bottom of the noise
floor is set via @var{range}. Because an exact manipulation of the signal
would cause distortion of the waveform the reduction can be levelled over
time. This is done by setting @var{attack} and @var{release}.

@var{attack} determines how long the signal has to fall below the threshold
before any reduction will occur and @var{release} sets the time the signal
has to rise above the threshold to reduce the reduction again.
Shorter signals than the chosen attack time will be left untouched.

@table @option
@item level_in
Set input level before filtering.
Default is 1. Allowed range is from 0.015625 to 64.

@item mode
Set the mode of operation. Can be @code{upward} or @code{downward}.
Default is @code{downward}. If set to @code{upward} mode, higher parts of signal
will be amplified, expanding dynamic range in upward direction.
Otherwise, in case of @code{downward} lower parts of signal will be reduced.

@item range
Set the level of gain reduction when the signal is below the threshold.
Default is 0.06125. Allowed range is from 0 to 1.
Setting this to 0 disables reduction and then filter behaves like expander.

@item threshold
If a signal rises above this level the gain reduction is released.
Default is 0.125. Allowed range is from 0 to 1.

@item ratio
Set a ratio by which the signal is reduced.
Default is 2. Allowed range is from 1 to 9000.

@item attack
Amount of milliseconds the signal has to rise above the threshold before gain
reduction stops.
Default is 20 milliseconds. Allowed range is from 0.01 to 9000.

@item release
Amount of milliseconds the signal has to fall below the threshold before the
reduction is increased again. Default is 250 milliseconds.
Allowed range is from 0.01 to 9000.

@item makeup
Set amount of amplification of signal after processing.
Default is 1. Allowed range is from 1 to 64.

@item knee
Curve the sharp knee around the threshold to enter gain reduction more softly.
Default is 2.828427125. Allowed range is from 1 to 8.

@item detection
Choose if exact signal should be taken for detection or an RMS like one.
Default is @code{rms}. Can be @code{peak} or @code{rms}.

@item link
Choose if the average level between all channels or the louder channel affects
the reduction.
Default is @code{average}. Can be @code{average} or @code{maximum}.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section aiir

Apply an arbitrary Infinite Impulse Response filter.

It accepts the following parameters:

@table @option
@item zeros, z
Set B/numerator/zeros/reflection coefficients.

@item poles, p
Set A/denominator/poles/ladder coefficients.

@item gains, k
Set channels gains.

@item dry_gain
Set input gain.

@item wet_gain
Set output gain.

@item format, f
Set coefficients format.

@table @samp
@item ll
lattice-ladder function
@item sf
analog transfer function
@item tf
digital transfer function
@item zp
Z-plane zeros/poles, cartesian (default)
@item pr
Z-plane zeros/poles, polar radians
@item pd
Z-plane zeros/poles, polar degrees
@item sp
S-plane zeros/poles
@end table

@item process, r
Set type of processing.

@table @samp
@item d
direct processing
@item s
serial processing
@item p
parallel processing
@end table

@item precision, e
Set filtering precision.

@table @samp
@item dbl
double-precision floating-point (default)
@item flt
single-precision floating-point
@item i32
32-bit integers
@item i16
16-bit integers
@end table

@item normalize, n
Normalize filter coefficients, by default is enabled.
Enabling it will normalize magnitude response at DC to 0dB.

@item mix
How much to use filtered signal in output. Default is 1.
Range is between 0 and 1.

@item response
Show IR frequency response, magnitude(magenta), phase(green) and group delay(yellow) in additional video stream.
By default it is disabled.

@item channel
Set for which IR channel to display frequency response. By default is first channel
displayed. This option is used only when @var{response} is enabled.

@item size
Set video stream size. This option is used only when @var{response} is enabled.
@end table

Coefficients in @code{tf} and @code{sf} format are separated by spaces and are in ascending
order.

Coefficients in @code{zp} format are separated by spaces and order of coefficients
doesn't matter. Coefficients in @code{zp} format are complex numbers with @var{i}
imaginary unit.

Different coefficients and gains can be provided for every channel, in such case
use '|' to separate coefficients or gains. Last provided coefficients will be
used for all remaining channels.

@subsection Examples

@itemize
@item
Apply 2 pole elliptic notch at around 5000Hz for 48000 Hz sample rate:
@example
aiir=k=1:z=7.957584807809675810E-1 -2.575128568908332300 3.674839853930788710 -2.57512875289799137 7.957586296317130880E-1:p=1 -2.86950072432325953 3.63022088054647218 -2.28075678147272232 6.361362326477423500E-1:f=tf:r=d
@end example

@item
Same as above but in @code{zp} format:
@example
aiir=k=0.79575848078096756:z=0.80918701+0.58773007i 0.80918701-0.58773007i 0.80884700+0.58784055i 0.80884700-0.58784055i:p=0.63892345+0.59951235i 0.63892345-0.59951235i 0.79582691+0.44198673i 0.79582691-0.44198673i:f=zp:r=s
@end example

@item
Apply 3-rd order analog normalized Butterworth low-pass filter, using analog transfer function format:
@example
aiir=z=1.3057 0 0 0:p=1.3057 2.3892 2.1860 1:f=sf:r=d
@end example
@end itemize

@section alimiter

The limiter prevents an input signal from rising over a desired threshold.
This limiter uses lookahead technology to prevent your signal from distorting.
It means that there is a small delay after the signal is processed. Keep in mind
that the delay it produces is the attack time you set.

The filter accepts the following options:

@table @option
@item level_in
Set input gain. Default is 1.

@item level_out
Set output gain. Default is 1.

@item limit
Don't let signals above this level pass the limiter. Default is 1.

@item attack
The limiter will reach its attenuation level in this amount of time in
milliseconds. Default is 5 milliseconds.

@item release
Come back from limiting to attenuation 1.0 in this amount of milliseconds.
Default is 50 milliseconds.

@item asc
When gain reduction is always needed ASC takes care of releasing to an
average reduction level rather than reaching a reduction of 0 in the release
time.

@item asc_level
Select how much the release time is affected by ASC, 0 means nearly no changes
in release time while 1 produces higher release times.

@item level
Auto level output signal. Default is enabled.
This normalizes audio back to 0dB if enabled.
@end table

Depending on picked setting it is recommended to upsample input 2x or 4x times
with @ref{aresample} before applying this filter.

@section allpass

Apply a two-pole all-pass filter with central frequency (in Hz)
@var{frequency}, and filter-width @var{width}.
An all-pass filter changes the audio's frequency to phase relationship
without changing its frequency to amplitude relationship.

The filter accepts the following options:

@table @option
@item frequency, f
Set frequency in Hz.

@item width_type, t
Set method to specify band-width of filter.
@table @option
@item h
Hz
@item q
Q-Factor
@item o
octave
@item s
slope
@item k
kHz
@end table

@item width, w
Specify the band-width of a filter in width_type units.

@item mix, m
How much to use filtered signal in output. Default is 1.
Range is between 0 and 1.

@item channels, c
Specify which channels to filter, by default all available are filtered.

@item normalize, n
Normalize biquad coefficients, by default is disabled.
Enabling it will normalize magnitude response at DC to 0dB.

@item order, o
Set the filter order, can be 1 or 2. Default is 2.

@item transform, a
Set transform type of IIR filter.
@table @option
@item di
@item dii
@item tdii
@item latt
@end table

@item precision, r
Set precison of filtering.
@table @option
@item auto
Pick automatic sample format depending on surround filters.
@item s16
Always use signed 16-bit.
@item s32
Always use signed 32-bit.
@item f32
Always use float 32-bit.
@item f64
Always use float 64-bit.
@end table
@end table

@subsection Commands

This filter supports the following commands:
@table @option
@item frequency, f
Change allpass frequency.
Syntax for the command is : "@var{frequency}"

@item width_type, t
Change allpass width_type.
Syntax for the command is : "@var{width_type}"

@item width, w
Change allpass width.
Syntax for the command is : "@var{width}"

@item mix, m
Change allpass mix.
Syntax for the command is : "@var{mix}"
@end table

@section aloop

Loop audio samples.

The filter accepts the following options:

@table @option
@item loop
Set the number of loops. Setting this value to -1 will result in infinite loops.
Default is 0.

@item size
Set maximal number of samples. Default is 0.

@item start
Set first sample of loop. Default is 0.
@end table

@anchor{amerge}
@section amerge

Merge two or more audio streams into a single multi-channel stream.

The filter accepts the following options:

@table @option

@item inputs
Set the number of inputs. Default is 2.

@end table

If the channel layouts of the inputs are disjoint, and therefore compatible,
the channel layout of the output will be set accordingly and the channels
will be reordered as necessary. If the channel layouts of the inputs are not
disjoint, the output will have all the channels of the first input then all
the channels of the second input, in that order, and the channel layout of
the output will be the default value corresponding to the total number of
channels.

For example, if the first input is in 2.1 (FL+FR+LF) and the second input
is FC+BL+BR, then the output will be in 5.1, with the channels in the
following order: a1, a2, b1, a3, b2, b3 (a1 is the first channel of the
first input, b1 is the first channel of the second input).

On the other hand, if both input are in stereo, the output channels will be
in the default order: a1, a2, b1, b2, and the channel layout will be
arbitrarily set to 4.0, which may or may not be the expected value.

All inputs must have the same sample rate, and format.

If inputs do not have the same duration, the output will stop with the
shortest.

@subsection Examples

@itemize
@item
Merge two mono files into a stereo stream:
@example
amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
@end example

@item
Multiple merges assuming 1 video stream and 6 audio streams in @file{input.mkv}:
@example
ffmpeg -i input.mkv -filter_complex "[0:1][0:2][0:3][0:4][0:5][0:6] amerge=inputs=6" -c:a pcm_s16le output.mkv
@end example
@end itemize

@section amix

Mixes multiple audio inputs into a single output.

Note that this filter only supports float samples (the @var{amerge}
and @var{pan} audio filters support many formats). If the @var{amix}
input has integer samples then @ref{aresample} will be automatically
inserted to perform the conversion to float samples.

For example
@example
ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT
@end example
will mix 3 input audio streams to a single output with the same duration as the
first input and a dropout transition time of 3 seconds.

It accepts the following parameters:
@table @option

@item inputs
The number of inputs. If unspecified, it defaults to 2.

@item duration
How to determine the end-of-stream.
@table @option

@item longest
The duration of the longest input. (default)

@item shortest
The duration of the shortest input.

@item first
The duration of the first input.

@end table

@item dropout_transition
The transition time, in seconds, for volume renormalization when an input
stream ends. The default value is 2 seconds.

@item weights
Specify weight of each input audio stream as sequence.
Each weight is separated by space. By default all inputs have same weight.

@item normalize
Always scale inputs instead of only doing summation of samples.
Beware of heavy clipping if inputs are not normalized prior or after filtering
by this filter if this option is disabled. By default is enabled.
@end table

@subsection Commands

This filter supports the following commands:
@table @option
@item weights
@item sum
Syntax is same as option with same name.
@end table

@section amultiply

Multiply first audio stream with second audio stream and store result
in output audio stream. Multiplication is done by multiplying each
sample from first stream with sample at same position from second stream.

With this element-wise multiplication one can create amplitude fades and
amplitude modulations.

@section anequalizer

High-order parametric multiband equalizer for each channel.

It accepts the following parameters:
@table @option
@item params

This option string is in format:
"c@var{chn} f=@var{cf} w=@var{w} g=@var{g} t=@var{f} | ..."
Each equalizer band is separated by '|'.

@table @option
@item chn
Set channel number to which equalization will be applied.
If input doesn't have that channel the entry is ignored.

@item f
Set central frequency for band.
If input doesn't have that frequency the entry is ignored.

@item w
Set band width in Hertz.

@item g
Set band gain in dB.

@item t
Set filter type for band, optional, can be:

@table @samp
@item 0
Butterworth, this is default.

@item 1
Chebyshev type 1.

@item 2
Chebyshev type 2.
@end table
@end table

@item curves
With this option activated frequency response of anequalizer is displayed
in video stream.

@item size
Set video stream size. Only useful if curves option is activated.

@item mgain
Set max gain that will be displayed. Only useful if curves option is activated.
Setting this to a reasonable value makes it possible to display gain which is derived from
neighbour bands which are too close to each other and thus produce higher gain
when both are activated.

@item fscale
Set frequency scale used to draw frequency response in video output.
Can be linear or logarithmic. Default is logarithmic.

@item colors
Set color for each channel curve which is going to be displayed in video stream.
This is list of color names separated by space or by '|'.
Unrecognised or missing colors will be replaced by white color.
@end table

@subsection Examples

@itemize
@item
Lower gain by 10 of central frequency 200Hz and width 100 Hz
for first 2 channels using Chebyshev type 1 filter:
@example
anequalizer=c0 f=200 w=100 g=-10 t=1|c1 f=200 w=100 g=-10 t=1
@end example
@end itemize

@subsection Commands

This filter supports the following commands:
@table @option
@item change
Alter existing filter parameters.
Syntax for the commands is : "@var{fN}|f=@var{freq}|w=@var{width}|g=@var{gain}"

@var{fN} is existing filter number, starting from 0, if no such filter is available
error is returned.
@var{freq} set new frequency parameter.
@var{width} set new width parameter in Hertz.
@var{gain} set new gain parameter in dB.

Full filter invocation with asendcmd may look like this:
asendcmd=c='4.0 anequalizer change 0|f=200|w=50|g=1',anequalizer=...
@end table

@section anlmdn

Reduce broadband noise in audio samples using Non-Local Means algorithm.

Each sample is adjusted by looking for other samples with similar contexts. This
context similarity is defined by comparing their surrounding patches of size
@option{p}. Patches are searched in an area of @option{r} around the sample.

The filter accepts the following options:

@table @option
@item s
Set denoising strength. Allowed range is from 0.00001 to 10. Default value is 0.00001.

@item p
Set patch radius duration. Allowed range is from 1 to 100 milliseconds.
Default value is 2 milliseconds.

@item r
Set research radius duration. Allowed range is from 2 to 300 milliseconds.
Default value is 6 milliseconds.

@item o
Set the output mode.

It accepts the following values:
@table @option
@item i
Pass input unchanged.

@item o
Pass noise filtered out.

@item n
Pass only noise.

Default value is @var{o}.
@end table

@item m
Set smooth factor. Default value is @var{11}. Allowed range is from @var{1} to @var{15}.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section anlms
Apply Normalized Least-Mean-Squares algorithm to the first audio stream using the second audio stream.

This adaptive filter is used to mimic a desired filter by finding the filter coefficients that
relate to producing the least mean square of the error signal (difference between the desired,
2nd input audio stream and the actual signal, the 1st input audio stream).

A description of the accepted options follows.

@table @option
@item order
Set filter order.

@item mu
Set filter mu.

@item eps
Set the filter eps.

@item leakage
Set the filter leakage.

@item out_mode
It accepts the following values:
@table @option
@item i
Pass the 1st input.

@item d
Pass the 2nd input.

@item o
Pass filtered samples.

@item n
Pass difference between desired and filtered samples.

Default value is @var{o}.
@end table
@end table

@subsection Examples

@itemize
@item
One of many usages of this filter is noise reduction, input audio is filtered
with same samples that are delayed by fixed amount, one such example for stereo audio is:
@example
asplit[a][b],[a]adelay=32S|32S[a],[b][a]anlms=order=128:leakage=0.0005:mu=.5:out_mode=o
@end example
@end itemize

@subsection Commands

This filter supports the same commands as options, excluding option @code{order}.

@section anull

Pass the audio source unchanged to the output.

@section apad

Pad the end of an audio stream with silence.

This can be used together with @command{ffmpeg} @option{-shortest} to
extend audio streams to the same length as the video stream.

A description of the accepted options follows.

@table @option
@item packet_size
Set silence packet size. Default value is 4096.

@item pad_len
Set the number of samples of silence to add to the end. After the
value is reached, the stream is terminated. This option is mutually
exclusive with @option{whole_len}.

@item whole_len
Set the minimum total number of samples in the output audio stream. If
the value is longer than the input audio length, silence is added to
the end, until the value is reached. This option is mutually exclusive
with @option{pad_len}.

@item pad_dur
Specify the duration of samples of silence to add. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax. Used only if set to non-zero value.

@item whole_dur
Specify the minimum total duration in the output audio stream. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax. Used only if set to non-zero value. If the value is longer than
the input audio length, silence is added to the end, until the value is reached.
This option is mutually exclusive with @option{pad_dur}
@end table

If neither the @option{pad_len} nor the @option{whole_len} nor @option{pad_dur}
nor @option{whole_dur} option is set, the filter will add silence to the end of
the input stream indefinitely.

@subsection Examples

@itemize
@item
Add 1024 samples of silence to the end of the input:
@example
apad=pad_len=1024
@end example

@item
Make sure the audio output will contain at least 10000 samples, pad
the input with silence if required:
@example
apad=whole_len=10000
@end example

@item
Use @command{ffmpeg} to pad the audio input with silence, so that the
video stream will always result the shortest and will be converted
until the end in the output file when using the @option{shortest}
option:
@example
ffmpeg -i VIDEO -i AUDIO -filter_complex "[1:0]apad" -shortest OUTPUT
@end example
@end itemize

@section aphaser
Add a phasing effect to the input audio.

A phaser filter creates series of peaks and troughs in the frequency spectrum.
The position of the peaks and troughs are modulated so that they vary over time, creating a sweeping effect.

A description of the accepted parameters follows.

@table @option
@item in_gain
Set input gain. Default is 0.4.

@item out_gain
Set output gain. Default is 0.74

@item delay
Set delay in milliseconds. Default is 3.0.

@item decay
Set decay. Default is 0.4.

@item speed
Set modulation speed in Hz. Default is 0.5.

@item type
Set modulation type. Default is triangular.

It accepts the following values:
@table @samp
@item triangular, t
@item sinusoidal, s
@end table
@end table

@section aphaseshift
Apply phase shift to input audio samples.

The filter accepts the following options:

@table @option
@item shift
Specify phase shift. Allowed range is from -1.0 to 1.0.
Default value is 0.0.

@item level
Set output gain applied to final output. Allowed range is from 0.0 to 1.0.
Default value is 1.0.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section apulsator

Audio pulsator is something between an autopanner and a tremolo.
But it can produce funny stereo effects as well. Pulsator changes the volume
of the left and right channel based on a LFO (low frequency oscillator) with
different waveforms and shifted phases.
This filter have the ability to define an offset between left and right
channel. An offset of 0 means that both LFO shapes match each other.
The left and right channel are altered equally - a conventional tremolo.
An offset of 50% means that the shape of the right channel is exactly shifted
in phase (or moved backwards about half of the frequency) - pulsator acts as
an autopanner. At 1 both curves match again. Every setting in between moves the
phase shift gapless between all stages and produces some "bypassing" sounds with
sine and triangle waveforms. The more you set the offset near 1 (starting from
the 0.5) the faster the signal passes from the left to the right speaker.

The filter accepts the following options:

@table @option
@item level_in
Set input gain. By default it is 1. Range is [0.015625 - 64].

@item level_out
Set output gain. By default it is 1. Range is [0.015625 - 64].

@item mode
Set waveform shape the LFO will use. Can be one of: sine, triangle, square,
sawup or sawdown. Default is sine.

@item amount
Set modulation. Define how much of original signal is affected by the LFO.

@item offset_l
Set left channel offset. Default is 0. Allowed range is [0 - 1].

@item offset_r
Set right channel offset. Default is 0.5. Allowed range is [0 - 1].

@item width
Set pulse width. Default is 1. Allowed range is [0 - 2].

@item timing
Set possible timing mode. Can be one of: bpm, ms or hz. Default is hz.

@item bpm
Set bpm. Default is 120. Allowed range is [30 - 300]. Only used if timing
is set to bpm.

@item ms
Set ms. Default is 500. Allowed range is [10 - 2000]. Only used if timing
is set to ms.

@item hz
Set frequency in Hz. Default is 2. Allowed range is [0.01 - 100]. Only used
if timing is set to hz.
@end table

@anchor{aresample}
@section aresample

Resample the input audio to the specified parameters, using the
libswresample library. If none are specified then the filter will
automatically convert between its input and output.

This filter is also able to stretch/squeeze the audio data to make it match
the timestamps or to inject silence / cut out audio to make it match the
timestamps, do a combination of both or do neither.

The filter accepts the syntax
[@var{sample_rate}:]@var{resampler_options}, where @var{sample_rate}
expresses a sample rate and @var{resampler_options} is a list of
@var{key}=@var{value} pairs, separated by ":". See the
@ref{Resampler Options,,"Resampler Options" section in the
ffmpeg-resampler(1) manual,ffmpeg-resampler}
for the complete list of supported options.

@subsection Examples

@itemize
@item
Resample the input audio to 44100Hz:
@example
aresample=44100
@end example

@item
Stretch/squeeze samples to the given timestamps, with a maximum of 1000
samples per second compensation:
@example
aresample=async=1000
@end example
@end itemize

@section areverse

Reverse an audio clip.

Warning: This filter requires memory to buffer the entire clip, so trimming
is suggested.

@subsection Examples

@itemize
@item
Take the first 5 seconds of a clip, and reverse it.
@example
atrim=end=5,areverse
@end example
@end itemize

@section arnndn

Reduce noise from speech using Recurrent Neural Networks.

This filter accepts the following options:

@table @option
@item model, m
Set train model file to load. This option is always required.

@item mix
Set how much to mix filtered samples into final output.
Allowed range is from -1 to 1. Default value is 1.
Negative values are special, they set how much to keep filtered noise
in the final filter output. Set this option to -1 to hear actual
noise removed from input signal.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section asetnsamples

Set the number of samples per each output audio frame.

The last output packet may contain a different number of samples, as
the filter will flush all the remaining samples when the input audio
signals its end.

The filter accepts the following options:

@table @option

@item nb_out_samples, n
Set the number of frames per each output audio frame. The number is
intended as the number of samples @emph{per each channel}.
Default value is 1024.

@item pad, p
If set to 1, the filter will pad the last audio frame with zeroes, so
that the last frame will contain the same number of samples as the
previous ones. Default value is 1.
@end table

For example, to set the number of per-frame samples to 1234 and
disable padding for the last frame, use:
@example
asetnsamples=n=1234:p=0
@end example

@section asetrate

Set the sample rate without altering the PCM data.
This will result in a change of speed and pitch.

The filter accepts the following options:

@table @option
@item sample_rate, r
Set the output sample rate. Default is 44100 Hz.
@end table

@section ashowinfo

Show a line containing various information for each input audio frame.
The input audio is not modified.

The shown line contains a sequence of key/value pairs of the form
@var{key}:@var{value}.

The following values are shown in the output:

@table @option
@item n
The (sequential) number of the input frame, starting from 0.

@item pts
The presentation timestamp of the input frame, in time base units; the time base
depends on the filter input pad, and is usually 1/@var{sample_rate}.

@item pts_time
The presentation timestamp of the input frame in seconds.

@item pos
position of the frame in the input stream, -1 if this information in
unavailable and/or meaningless (for example in case of synthetic audio)

@item fmt
The sample format.

@item chlayout
The channel layout.

@item rate
The sample rate for the audio frame.

@item nb_samples
The number of samples (per channel) in the frame.

@item checksum
The Adler-32 checksum (printed in hexadecimal) of the audio data. For planar
audio, the data is treated as if all the planes were concatenated.

@item plane_checksums
A list of Adler-32 checksums for each data plane.
@end table

@section asoftclip
Apply audio soft clipping.

Soft clipping is a type of distortion effect where the amplitude of a signal is saturated
along a smooth curve, rather than the abrupt shape of hard-clipping.

This filter accepts the following options:

@table @option
@item type
Set type of soft-clipping.

It accepts the following values:
@table @option
@item hard
@item tanh
@item atan
@item cubic
@item exp
@item alg
@item quintic
@item sin
@item erf
@end table

@item threshold
Set threshold from where to start clipping. Default value is 0dB or 1.

@item output
Set gain applied to output. Default value is 0dB or 1.

@item param
Set additional parameter which controls sigmoid function.

@item oversample
Set oversampling factor.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section asr
Automatic Speech Recognition

This filter uses PocketSphinx for speech recognition. To enable
compilation of this filter, you need to configure FFmpeg with
@code{--enable-pocketsphinx}.

It accepts the following options:

@table @option
@item rate
Set sampling rate of input audio. Defaults is @code{16000}.
This need to match speech models, otherwise one will get poor results.

@item hmm
Set dictionary containing acoustic model files.

@item dict
Set pronunciation dictionary.

@item lm
Set language model file.

@item lmctl
Set language model set.

@item lmname
Set which language model to use.

@item logfn
Set output for log messages.
@end table

The filter exports recognized speech as the frame metadata @code{lavfi.asr.text}.

@anchor{astats}
@section astats

Display time domain statistical information about the audio channels.
Statistics are calculated and displayed for each audio channel and,
where applicable, an overall figure is also given.

It accepts the following option:
@table @option
@item length
Short window length in seconds, used for peak and trough RMS measurement.
Default is @code{0.05} (50 milliseconds). Allowed range is @code{[0.01 - 10]}.

@item metadata

Set metadata injection. All the metadata keys are prefixed with @code{lavfi.astats.X},
where @code{X} is channel number starting from 1 or string @code{Overall}. Default is
disabled.

Available keys for each channel are:
DC_offset
Min_level
Max_level
Min_difference
Max_difference
Mean_difference
RMS_difference
Peak_level
RMS_peak
RMS_trough
Crest_factor
Flat_factor
Peak_count
Noise_floor
Noise_floor_count
Bit_depth
Dynamic_range
Zero_crossings
Zero_crossings_rate
Number_of_NaNs
Number_of_Infs
Number_of_denormals

and for Overall:
DC_offset
Min_level
Max_level
Min_difference
Max_difference
Mean_difference
RMS_difference
Peak_level
RMS_level
RMS_peak
RMS_trough
Flat_factor
Peak_count
Noise_floor
Noise_floor_count
Bit_depth
Number_of_samples
Number_of_NaNs
Number_of_Infs
Number_of_denormals

For example full key look like this @code{lavfi.astats.1.DC_offset} or
this @code{lavfi.astats.Overall.Peak_count}.

For description what each key means read below.

@item reset
Set number of frame after which stats are going to be recalculated.
Default is disabled.

@item measure_perchannel
Select the entries which need to be measured per channel. The metadata keys can
be used as flags, default is @option{all} which measures everything.
@option{none} disables all per channel measurement.

@item measure_overall
Select the entries which need to be measured overall. The metadata keys can
be used as flags, default is @option{all} which measures everything.
@option{none} disables all overall measurement.

@end table

A description of each shown parameter follows:

@table @option
@item DC offset
Mean amplitude displacement from zero.

@item Min level
Minimal sample level.

@item Max level
Maximal sample level.

@item Min difference
Minimal difference between two consecutive samples.

@item Max difference
Maximal difference between two consecutive samples.

@item Mean difference
Mean difference between two consecutive samples.
The average of each difference between two consecutive samples.

@item RMS difference
Root Mean Square difference between two consecutive samples.

@item Peak level dB
@item RMS level dB
Standard peak and RMS level measured in dBFS.

@item RMS peak dB
@item RMS trough dB
Peak and trough values for RMS level measured over a short window.

@item Crest factor
Standard ratio of peak to RMS level (note: not in dB).

@item Flat factor
Flatness (i.e. consecutive samples with the same value) of the signal at its peak levels
(i.e. either @var{Min level} or @var{Max level}).

@item Peak count
Number of occasions (not the number of samples) that the signal attained either
@var{Min level} or @var{Max level}.

@item Noise floor dB
Minimum local peak measured in dBFS over a short window.

@item Noise floor count
Number of occasions (not the number of samples) that the signal attained
@var{Noise floor}.

@item Bit depth
Overall bit depth of audio. Number of bits used for each sample.

@item Dynamic range
Measured dynamic range of audio in dB.

@item Zero crossings
Number of points where the waveform crosses the zero level axis.

@item Zero crossings rate
Rate of Zero crossings and number of audio samples.
@end table

@section asubboost
Boost subwoofer frequencies.

The filter accepts the following options:

@table @option
@item dry
Set dry gain, how much of original signal is kept. Allowed range is from 0 to 1.
Default value is 0.7.

@item wet
Set wet gain, how much of filtered signal is kept. Allowed range is from 0 to 1.
Default value is 0.7.

@item decay
Set delay line decay gain value. Allowed range is from 0 to 1.
Default value is 0.7.

@item feedback
Set delay line feedback gain value. Allowed range is from 0 to 1.
Default value is 0.9.

@item cutoff
Set cutoff frequency in Hertz. Allowed range is 50 to 900.
Default value is 100.

@item slope
Set slope amount for cutoff frequency. Allowed range is 0.0001 to 1.
Default value is 0.5.

@item delay
Set delay. Allowed range is from 1 to 100.
Default value is 20.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section asubcut
Cut subwoofer frequencies.

This filter allows to set custom, steeper
roll off than highpass filter, and thus is able to more attenuate
frequency content in stop-band.

The filter accepts the following options:

@table @option
@item cutoff
Set cutoff frequency in Hertz. Allowed range is 2 to 200.
Default value is 20.

@item order
Set filter order. Available values are from 3 to 20.
Default value is 10.

@item level
Set input gain level. Allowed range is from 0 to 1. Default value is 1.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section asupercut
Cut super frequencies.

The filter accepts the following options:

@table @option
@item cutoff
Set cutoff frequency in Hertz. Allowed range is 20000 to 192000.
Default value is 20000.

@item order
Set filter order. Available values are from 3 to 20.
Default value is 10.

@item level
Set input gain level. Allowed range is from 0 to 1. Default value is 1.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section asuperpass
Apply high order Butterworth band-pass filter.

The filter accepts the following options:

@table @option
@item centerf
Set center frequency in Hertz. Allowed range is 2 to 999999.
Default value is 1000.

@item order
Set filter order. Available values are from 4 to 20.
Default value is 4.

@item qfactor
Set Q-factor. Allowed range is from 0.01 to 100. Default value is 1.

@item level
Set input gain level. Allowed range is from 0 to 2. Default value is 1.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section asuperstop
Apply high order Butterworth band-stop filter.

The filter accepts the following options:

@table @option
@item centerf
Set center frequency in Hertz. Allowed range is 2 to 999999.
Default value is 1000.

@item order
Set filter order. Available values are from 4 to 20.
Default value is 4.

@item qfactor
Set Q-factor. Allowed range is from 0.01 to 100. Default value is 1.

@item level
Set input gain level. Allowed range is from 0 to 2. Default value is 1.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section atempo

Adjust audio tempo.

The filter accepts exactly one parameter, the audio tempo. If not
specified then the filter will assume nominal 1.0 tempo. Tempo must
be in the [0.5, 100.0] range.

Note that tempo greater than 2 will skip some samples rather than
blend them in.  If for any reason this is a concern it is always
possible to daisy-chain several instances of atempo to achieve the
desired product tempo.

@subsection Examples

@itemize
@item
Slow down audio to 80% tempo:
@example
atempo=0.8
@end example

@item
To speed up audio to 300% tempo:
@example
atempo=3
@end example

@item
To speed up audio to 300% tempo by daisy-chaining two atempo instances:
@example
atempo=sqrt(3),atempo=sqrt(3)
@end example
@end itemize

@subsection Commands

This filter supports the following commands:
@table @option
@item tempo
Change filter tempo scale factor.
Syntax for the command is : "@var{tempo}"
@end table

@section atrim

Trim the input so that the output contains one continuous subpart of the input.

It accepts the following parameters:
@table @option
@item start
Timestamp (in seconds) of the start of the section to keep. I.e. the audio
sample with the timestamp @var{start} will be the first sample in the output.

@item end
Specify time of the first audio sample that will be dropped, i.e. the
audio sample immediately preceding the one with the timestamp @var{end} will be
the last sample in the output.

@item start_pts
Same as @var{start}, except this option sets the start timestamp in samples
instead of seconds.

@item end_pts
Same as @var{end}, except this option sets the end timestamp in samples instead
of seconds.

@item duration
The maximum duration of the output in seconds.

@item start_sample
The number of the first sample that should be output.

@item end_sample
The number of the first sample that should be dropped.
@end table

@option{start}, @option{end}, and @option{duration} are expressed as time
duration specifications; see
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}.

Note that the first two sets of the start/end options and the @option{duration}
option look at the frame timestamp, while the _sample options simply count the
samples that pass through the filter. So start/end_pts and start/end_sample will
give different results when the timestamps are wrong, inexact or do not start at
zero. Also note that this filter does not modify the timestamps. If you wish
to have the output timestamps start at zero, insert the asetpts filter after the
atrim filter.

If multiple start or end options are set, this filter tries to be greedy and
keep all samples that match at least one of the specified constraints. To keep
only the part that matches all the constraints at once, chain multiple atrim
filters.

The defaults are such that all the input is kept. So it is possible to set e.g.
just the end values to keep everything before the specified time.

Examples:
@itemize
@item
Drop everything except the second minute of input:
@example
ffmpeg -i INPUT -af atrim=60:120
@end example

@item
Keep only the first 1000 samples:
@example
ffmpeg -i INPUT -af atrim=end_sample=1000
@end example

@end itemize

@section axcorrelate
Calculate normalized cross-correlation between two input audio streams.

Resulted samples are always between -1 and 1 inclusive.
If result is 1 it means two input samples are highly correlated in that selected segment.
Result 0 means they are not correlated at all.
If result is -1 it means two input samples are out of phase, which means they cancel each
other.

The filter accepts the following options:

@table @option
@item size
Set size of segment over which cross-correlation is calculated.
Default is 256. Allowed range is from 2 to 131072.

@item algo
Set algorithm for cross-correlation. Can be @code{slow} or @code{fast}.
Default is @code{slow}. Fast algorithm assumes mean values over any given segment
are always zero and thus need much less calculations to make.
This is generally not true, but is valid for typical audio streams.
@end table

@subsection Examples

@itemize
@item
Calculate correlation between channels in stereo audio stream:
@example
ffmpeg -i stereo.wav -af channelsplit,axcorrelate=size=1024:algo=fast correlation.wav
@end example
@end itemize

@section bandpass

Apply a two-pole Butterworth band-pass filter with central
frequency @var{frequency}, and (3dB-point) band-width width.
The @var{csg} option selects a constant skirt gain (peak gain = Q)
instead of the default: constant 0dB peak gain.
The filter roll off at 6dB per octave (20dB per decade).

The filter accepts the following options:

@table @option
@item frequency, f
Set the filter's central frequency. Default is @code{3000}.

@item csg
Constant skirt gain if set to 1. Defaults to 0.

@item width_type, t
Set method to specify band-width of filter.
@table @option
@item h
Hz
@item q
Q-Factor
@item o
octave
@item s
slope
@item k
kHz
@end table

@item width, w
Specify the band-width of a filter in width_type units.

@item mix, m
How much to use filtered signal in output. Default is 1.
Range is between 0 and 1.

@item channels, c
Specify which channels to filter, by default all available are filtered.

@item normalize, n
Normalize biquad coefficients, by default is disabled.
Enabling it will normalize magnitude response at DC to 0dB.

@item transform, a
Set transform type of IIR filter.
@table @option
@item di
@item dii
@item tdii
@item latt
@end table

@item precision, r
Set precison of filtering.
@table @option
@item auto
Pick automatic sample format depending on surround filters.
@item s16
Always use signed 16-bit.
@item s32
Always use signed 32-bit.
@item f32
Always use float 32-bit.
@item f64
Always use float 64-bit.
@end table
@end table

@subsection Commands

This filter supports the following commands:
@table @option
@item frequency, f
Change bandpass frequency.
Syntax for the command is : "@var{frequency}"

@item width_type, t
Change bandpass width_type.
Syntax for the command is : "@var{width_type}"

@item width, w
Change bandpass width.
Syntax for the command is : "@var{width}"

@item mix, m
Change bandpass mix.
Syntax for the command is : "@var{mix}"
@end table

@section bandreject

Apply a two-pole Butterworth band-reject filter with central
frequency @var{frequency}, and (3dB-point) band-width @var{width}.
The filter roll off at 6dB per octave (20dB per decade).

The filter accepts the following options:

@table @option
@item frequency, f
Set the filter's central frequency. Default is @code{3000}.

@item width_type, t
Set method to specify band-width of filter.
@table @option
@item h
Hz
@item q
Q-Factor
@item o
octave
@item s
slope
@item k
kHz
@end table

@item width, w
Specify the band-width of a filter in width_type units.

@item mix, m
How much to use filtered signal in output. Default is 1.
Range is between 0 and 1.

@item channels, c
Specify which channels to filter, by default all available are filtered.

@item normalize, n
Normalize biquad coefficients, by default is disabled.
Enabling it will normalize magnitude response at DC to 0dB.

@item transform, a
Set transform type of IIR filter.
@table @option
@item di
@item dii
@item tdii
@item latt
@end table

@item precision, r
Set precison of filtering.
@table @option
@item auto
Pick automatic sample format depending on surround filters.
@item s16
Always use signed 16-bit.
@item s32
Always use signed 32-bit.
@item f32
Always use float 32-bit.
@item f64
Always use float 64-bit.
@end table
@end table

@subsection Commands

This filter supports the following commands:
@table @option
@item frequency, f
Change bandreject frequency.
Syntax for the command is : "@var{frequency}"

@item width_type, t
Change bandreject width_type.
Syntax for the command is : "@var{width_type}"

@item width, w
Change bandreject width.
Syntax for the command is : "@var{width}"

@item mix, m
Change bandreject mix.
Syntax for the command is : "@var{mix}"
@end table

@section bass, lowshelf

Boost or cut the bass (lower) frequencies of the audio using a two-pole
shelving filter with a response similar to that of a standard
hi-fi's tone-controls. This is also known as shelving equalisation (EQ).

The filter accepts the following options:

@table @option
@item gain, g
Give the gain at 0 Hz. Its useful range is about -20
(for a large cut) to +20 (for a large boost).
Beware of clipping when using a positive gain.

@item frequency, f
Set the filter's central frequency and so can be used
to extend or reduce the frequency range to be boosted or cut.
The default value is @code{100} Hz.

@item width_type, t
Set method to specify band-width of filter.
@table @option
@item h
Hz
@item q
Q-Factor
@item o
octave
@item s
slope
@item k
kHz
@end table

@item width, w
Determine how steep is the filter's shelf transition.

@item poles, p
Set number of poles. Default is 2.

@item mix, m
How much to use filtered signal in output. Default is 1.
Range is between 0 and 1.

@item channels, c
Specify which channels to filter, by default all available are filtered.

@item normalize, n
Normalize biquad coefficients, by default is disabled.
Enabling it will normalize magnitude response at DC to 0dB.

@item transform, a
Set transform type of IIR filter.
@table @option
@item di
@item dii
@item tdii
@item latt
@end table

@item precision, r
Set precison of filtering.
@table @option
@item auto
Pick automatic sample format depending on surround filters.
@item s16
Always use signed 16-bit.
@item s32
Always use signed 32-bit.
@item f32
Always use float 32-bit.
@item f64
Always use float 64-bit.
@end table
@end table

@subsection Commands

This filter supports the following commands:
@table @option
@item frequency, f
Change bass frequency.
Syntax for the command is : "@var{frequency}"

@item width_type, t
Change bass width_type.
Syntax for the command is : "@var{width_type}"

@item width, w
Change bass width.
Syntax for the command is : "@var{width}"

@item gain, g
Change bass gain.
Syntax for the command is : "@var{gain}"

@item mix, m
Change bass mix.
Syntax for the command is : "@var{mix}"
@end table

@section biquad

Apply a biquad IIR filter with the given coefficients.
Where @var{b0}, @var{b1}, @var{b2} and @var{a0}, @var{a1}, @var{a2}
are the numerator and denominator coefficients respectively.
and @var{channels}, @var{c} specify which channels to filter, by default all
available are filtered.

@subsection Commands

This filter supports the following commands:
@table @option
@item a0
@item a1
@item a2
@item b0
@item b1
@item b2
Change biquad parameter.
Syntax for the command is : "@var{value}"

@item mix, m
How much to use filtered signal in output. Default is 1.
Range is between 0 and 1.

@item channels, c
Specify which channels to filter, by default all available are filtered.

@item normalize, n
Normalize biquad coefficients, by default is disabled.
Enabling it will normalize magnitude response at DC to 0dB.

@item transform, a
Set transform type of IIR filter.
@table @option
@item di
@item dii
@item tdii
@item latt
@end table

@item precision, r
Set precison of filtering.
@table @option
@item auto
Pick automatic sample format depending on surround filters.
@item s16
Always use signed 16-bit.
@item s32
Always use signed 32-bit.
@item f32
Always use float 32-bit.
@item f64
Always use float 64-bit.
@end table
@end table

@section bs2b
Bauer stereo to binaural transformation, which improves headphone listening of
stereo audio records.

To enable compilation of this filter you need to configure FFmpeg with
@code{--enable-libbs2b}.

It accepts the following parameters:
@table @option

@item profile
Pre-defined crossfeed level.
@table @option

@item default
Default level (fcut=700, feed=50).

@item cmoy
Chu Moy circuit (fcut=700, feed=60).

@item jmeier
Jan Meier circuit (fcut=650, feed=95).

@end table

@item fcut
Cut frequency (in Hz).

@item feed
Feed level (in Hz).

@end table

@section channelmap

Remap input channels to new locations.

It accepts the following parameters:
@table @option
@item map
Map channels from input to output. The argument is a '|'-separated list of
mappings, each in the @code{@var{in_channel}-@var{out_channel}} or
@var{in_channel} form. @var{in_channel} can be either the name of the input
channel (e.g. FL for front left) or its index in the input channel layout.
@var{out_channel} is the name of the output channel or its index in the output
channel layout. If @var{out_channel} is not given then it is implicitly an
index, starting with zero and increasing by one for each mapping.

@item channel_layout
The channel layout of the output stream.
@end table

If no mapping is present, the filter will implicitly map input channels to
output channels, preserving indices.

@subsection Examples

@itemize
@item
For example, assuming a 5.1+downmix input MOV file,
@example
ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
@end example
will create an output WAV file tagged as stereo from the downmix channels of
the input.

@item
To fix a 5.1 WAV improperly encoded in AAC's native channel order
@example
ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:5.1' out.wav
@end example
@end itemize

@section channelsplit

Split each channel from an input audio stream into a separate output stream.

It accepts the following parameters:
@table @option
@item channel_layout
The channel layout of the input stream. The default is "stereo".
@item channels
A channel layout describing the channels to be extracted as separate output streams
or "all" to extract each input channel as a separate stream. The default is "all".

Choosing channels not present in channel layout in the input will result in an error.
@end table

@subsection Examples

@itemize
@item
For example, assuming a stereo input MP3 file,
@example
ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv
@end example
will create an output Matroska file with two audio streams, one containing only
the left channel and the other the right channel.

@item
Split a 5.1 WAV file into per-channel files:
@example
ffmpeg -i in.wav -filter_complex
'channelsplit=channel_layout=5.1[FL][FR][FC][LFE][SL][SR]'
-map '[FL]' front_left.wav -map '[FR]' front_right.wav -map '[FC]'
front_center.wav -map '[LFE]' lfe.wav -map '[SL]' side_left.wav -map '[SR]'
side_right.wav
@end example

@item
Extract only LFE from a 5.1 WAV file:
@example
ffmpeg -i in.wav -filter_complex 'channelsplit=channel_layout=5.1:channels=LFE[LFE]'
-map '[LFE]' lfe.wav
@end example
@end itemize

@section chorus
Add a chorus effect to the audio.

Can make a single vocal sound like a chorus, but can also be applied to instrumentation.

Chorus resembles an echo effect with a short delay, but whereas with echo the delay is
constant, with chorus, it is varied using using sinusoidal or triangular modulation.
The modulation depth defines the range the modulated delay is played before or after
the delay. Hence the delayed sound will sound slower or faster, that is the delayed
sound tuned around the original one, like in a chorus where some vocals are slightly
off key.

It accepts the following parameters:
@table @option
@item in_gain
Set input gain. Default is 0.4.

@item out_gain
Set output gain. Default is 0.4.

@item delays
Set delays. A typical delay is around 40ms to 60ms.

@item decays
Set decays.

@item speeds
Set speeds.

@item depths
Set depths.
@end table

@subsection Examples

@itemize
@item
A single delay:
@example
chorus=0.7:0.9:55:0.4:0.25:2
@end example

@item
Two delays:
@example
chorus=0.6:0.9:50|60:0.4|0.32:0.25|0.4:2|1.3
@end example

@item
Fuller sounding chorus with three delays:
@example
chorus=0.5:0.9:50|60|40:0.4|0.32|0.3:0.25|0.4|0.3:2|2.3|1.3
@end example
@end itemize

@section compand
Compress or expand the audio's dynamic range.

It accepts the following parameters:

@table @option

@item attacks
@item decays
A list of times in seconds for each channel over which the instantaneous level
of the input signal is averaged to determine its volume. @var{attacks} refers to
increase of volume and @var{decays} refers to decrease of volume. For most
situations, the attack time (response to the audio getting louder) should be
shorter than the decay time, because the human ear is more sensitive to sudden
loud audio than sudden soft audio. A typical value for attack is 0.3 seconds and
a typical value for decay is 0.8 seconds.
If specified number of attacks & decays is lower than number of channels, the last
set attack/decay will be used for all remaining channels.

@item points
A list of points for the transfer function, specified in dB relative to the
maximum possible signal amplitude. Each key points list must be defined using
the following syntax: @code{x0/y0|x1/y1|x2/y2|....} or
@code{x0/y0 x1/y1 x2/y2 ....}

The input values must be in strictly increasing order but the transfer function
does not have to be monotonically rising. The point @code{0/0} is assumed but
may be overridden (by @code{0/out-dBn}). Typical values for the transfer
function are @code{-70/-70|-60/-20|1/0}.

@item soft-knee
Set the curve radius in dB for all joints. It defaults to 0.01.

@item gain
Set the additional gain in dB to be applied at all points on the transfer
function. This allows for easy adjustment of the overall gain.
It defaults to 0.

@item volume
Set an initial volume, in dB, to be assumed for each channel when filtering
starts. This permits the user to supply a nominal level initially, so that, for
example, a very large gain is not applied to initial signal levels before the
companding has begun to operate. A typical value for audio which is initially
quiet is -90 dB. It defaults to 0.

@item delay
Set a delay, in seconds. The input audio is analyzed immediately, but audio is
delayed before being fed to the volume adjuster. Specifying a delay
approximately equal to the attack/decay times allows the filter to effectively
operate in predictive rather than reactive mode. It defaults to 0.

@end table

@subsection Examples

@itemize
@item
Make music with both quiet and loud passages suitable for listening to in a
noisy environment:
@example
compand=.3|.3:1|1:-90/-60|-60/-40|-40/-30|-20/-20:6:0:-90:0.2
@end example

Another example for audio with whisper and explosion parts:
@example
compand=0|0:1|1:-90/-900|-70/-70|-30/-9|0/-3:6:0:0:0
@end example

@item
A noise gate for when the noise is at a lower level than the signal:
@example
compand=.1|.1:.2|.2:-900/-900|-50.1/-900|-50/-50:.01:0:-90:.1
@end example

@item
Here is another noise gate, this time for when the noise is at a higher level
than the signal (making it, in some ways, similar to squelch):
@example
compand=.1|.1:.1|.1:-45.1/-45.1|-45/-900|0/-900:.01:45:-90:.1
@end example

@item
2:1 compression starting at -6dB:
@example
compand=points=-80/-80|-6/-6|0/-3.8|20/3.5
@end example

@item
2:1 compression starting at -9dB:
@example
compand=points=-80/-80|-9/-9|0/-5.3|20/2.9
@end example

@item
2:1 compression starting at -12dB:
@example
compand=points=-80/-80|-12/-12|0/-6.8|20/1.9
@end example

@item
2:1 compression starting at -18dB:
@example
compand=points=-80/-80|-18/-18|0/-9.8|20/0.7
@end example

@item
3:1 compression starting at -15dB:
@example
compand=points=-80/-80|-15/-15|0/-10.8|20/-5.2
@end example

@item
Compressor/Gate:
@example
compand=points=-80/-105|-62/-80|-15.4/-15.4|0/-12|20/-7.6
@end example

@item
Expander:
@example
compand=attacks=0:points=-80/-169|-54/-80|-49.5/-64.6|-41.1/-41.1|-25.8/-15|-10.8/-4.5|0/0|20/8.3
@end example

@item
Hard limiter at -6dB:
@example
compand=attacks=0:points=-80/-80|-6/-6|20/-6
@end example

@item
Hard limiter at -12dB:
@example
compand=attacks=0:points=-80/-80|-12/-12|20/-12
@end example

@item
Hard noise gate at -35 dB:
@example
compand=attacks=0:points=-80/-115|-35.1/-80|-35/-35|20/20
@end example

@item
Soft limiter:
@example
compand=attacks=0:points=-80/-80|-12.4/-12.4|-6/-8|0/-6.8|20/-2.8
@end example
@end itemize

@section compensationdelay

Compensation Delay Line is a metric based delay to compensate differing
positions of microphones or speakers.

For example, you have recorded guitar with two microphones placed in
different locations. Because the front of sound wave has fixed speed in
normal conditions, the phasing of microphones can vary and depends on
their location and interposition. The best sound mix can be achieved when
these microphones are in phase (synchronized). Note that a distance of
~30 cm between microphones makes one microphone capture the signal in
antiphase to the other microphone. That makes the final mix sound moody.
This filter helps to solve phasing problems by adding different delays
to each microphone track and make them synchronized.

The best result can be reached when you take one track as base and
synchronize other tracks one by one with it.
Remember that synchronization/delay tolerance depends on sample rate, too.
Higher sample rates will give more tolerance.

The filter accepts the following parameters:

@table @option
@item mm
Set millimeters distance. This is compensation distance for fine tuning.
Default is 0.

@item cm
Set cm distance. This is compensation distance for tightening distance setup.
Default is 0.

@item m
Set meters distance. This is compensation distance for hard distance setup.
Default is 0.

@item dry
Set dry amount. Amount of unprocessed (dry) signal.
Default is 0.

@item wet
Set wet amount. Amount of processed (wet) signal.
Default is 1.

@item temp
Set temperature in degrees Celsius. This is the temperature of the environment.
Default is 20.
@end table

@section crossfeed
Apply headphone crossfeed filter.

Crossfeed is the process of blending the left and right channels of stereo
audio recording.
It is mainly used to reduce extreme stereo separation of low frequencies.

The intent is to produce more speaker like sound to the listener.

The filter accepts the following options:

@table @option
@item strength
Set strength of crossfeed. Default is 0.2. Allowed range is from 0 to 1.
This sets gain of low shelf filter for side part of stereo image.
Default is -6dB. Max allowed is -30db when strength is set to 1.

@item range
Set soundstage wideness. Default is 0.5. Allowed range is from 0 to 1.
This sets cut off frequency of low shelf filter. Default is cut off near
1550 Hz. With range set to 1 cut off frequency is set to 2100 Hz.

@item slope
Set curve slope of low shelf filter. Default is 0.5.
Allowed range is from 0.01 to 1.

@item level_in
Set input gain. Default is 0.9.

@item level_out
Set output gain. Default is 1.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section crystalizer
Simple algorithm for audio noise sharpening.

This filter linearly increases differences betweeen each audio sample.

The filter accepts the following options:

@table @option
@item i
Sets the intensity of effect (default: 2.0). Must be in range between -10.0 to 0
(unchanged sound) to 10.0 (maximum effect).
To inverse filtering use negative value.

@item c
Enable clipping. By default is enabled.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section dcshift
Apply a DC shift to the audio.

This can be useful to remove a DC offset (caused perhaps by a hardware problem
in the recording chain) from the audio. The effect of a DC offset is reduced
headroom and hence volume. The @ref{astats} filter can be used to determine if
a signal has a DC offset.

@table @option
@item shift
Set the DC shift, allowed range is [-1, 1]. It indicates the amount to shift
the audio.

@item limitergain
Optional. It should have a value much less than 1 (e.g. 0.05 or 0.02) and is
used to prevent clipping.
@end table

@section deesser

Apply de-essing to the audio samples.

@table @option
@item i
Set intensity for triggering de-essing. Allowed range is from 0 to 1.
Default is 0.

@item m
Set amount of ducking on treble part of sound. Allowed range is from 0 to 1.
Default is 0.5.

@item f
How much of original frequency content to keep when de-essing. Allowed range is from 0 to 1.
Default is 0.5.

@item s
Set the output mode.

It accepts the following values:
@table @option
@item i
Pass input unchanged.

@item o
Pass ess filtered out.

@item e
Pass only ess.

Default value is @var{o}.
@end table

@end table

@section drmeter
Measure audio dynamic range.

DR values of 14 and higher is found in very dynamic material. DR of 8 to 13
is found in transition material. And anything less that 8 have very poor dynamics
and is very compressed.

The filter accepts the following options:

@table @option
@item length
Set window length in seconds used to split audio into segments of equal length.
Default is 3 seconds.
@end table

@section dynaudnorm
Dynamic Audio Normalizer.

This filter applies a certain amount of gain to the input audio in order
to bring its peak magnitude to a target level (e.g. 0 dBFS). However, in
contrast to more "simple" normalization algorithms, the Dynamic Audio
Normalizer *dynamically* re-adjusts the gain factor to the input audio.
This allows for applying extra gain to the "quiet" sections of the audio
while avoiding distortions or clipping the "loud" sections. In other words:
The Dynamic Audio Normalizer will "even out" the volume of quiet and loud
sections, in the sense that the volume of each section is brought to the
same target level. Note, however, that the Dynamic Audio Normalizer achieves
this goal *without* applying "dynamic range compressing". It will retain 100%
of the dynamic range *within* each section of the audio file.

@table @option
@item framelen, f
Set the frame length in milliseconds. In range from 10 to 8000 milliseconds.
Default is 500 milliseconds.
The Dynamic Audio Normalizer processes the input audio in small chunks,
referred to as frames. This is required, because a peak magnitude has no
meaning for just a single sample value. Instead, we need to determine the
peak magnitude for a contiguous sequence of sample values. While a "standard"
normalizer would simply use the peak magnitude of the complete file, the
Dynamic Audio Normalizer determines the peak magnitude individually for each
frame. The length of a frame is specified in milliseconds. By default, the
Dynamic Audio Normalizer uses a frame length of 500 milliseconds, which has
been found to give good results with most files.
Note that the exact frame length, in number of samples, will be determined
automatically, based on the sampling rate of the individual input audio file.

@item gausssize, g
Set the Gaussian filter window size. In range from 3 to 301, must be odd
number. Default is 31.
Probably the most important parameter of the Dynamic Audio Normalizer is the
@code{window size} of the Gaussian smoothing filter. The filter's window size
is specified in frames, centered around the current frame. For the sake of
simplicity, this must be an odd number. Consequently, the default value of 31
takes into account the current frame, as well as the 15 preceding frames and
the 15 subsequent frames. Using a larger window results in a stronger
smoothing effect and thus in less gain variation, i.e. slower gain
adaptation. Conversely, using a smaller window results in a weaker smoothing
effect and thus in more gain variation, i.e. faster gain adaptation.
In other words, the more you increase this value, the more the Dynamic Audio
Normalizer will behave like a "traditional" normalization filter. On the
contrary, the more you decrease this value, the more the Dynamic Audio
Normalizer will behave like a dynamic range compressor.

@item peak, p
Set the target peak value. This specifies the highest permissible magnitude
level for the normalized audio input. This filter will try to approach the
target peak magnitude as closely as possible, but at the same time it also
makes sure that the normalized signal will never exceed the peak magnitude.
A frame's maximum local gain factor is imposed directly by the target peak
magnitude. The default value is 0.95 and thus leaves a headroom of 5%*.
It is not recommended to go above this value.

@item maxgain, m
Set the maximum gain factor. In range from 1.0 to 100.0. Default is 10.0.
The Dynamic Audio Normalizer determines the maximum possible (local) gain
factor for each input frame, i.e. the maximum gain factor that does not
result in clipping or distortion. The maximum gain factor is determined by
the frame's highest magnitude sample. However, the Dynamic Audio Normalizer
additionally bounds the frame's maximum gain factor by a predetermined
(global) maximum gain factor. This is done in order to avoid excessive gain
factors in "silent" or almost silent frames. By default, the maximum gain
factor is 10.0, For most inputs the default value should be sufficient and
it usually is not recommended to increase this value. Though, for input
with an extremely low overall volume level, it may be necessary to allow even
higher gain factors. Note, however, that the Dynamic Audio Normalizer does
not simply apply a "hard" threshold (i.e. cut off values above the threshold).
Instead, a "sigmoid" threshold function will be applied. This way, the
gain factors will smoothly approach the threshold value, but never exceed that
value.

@item targetrms, r
Set the target RMS. In range from 0.0 to 1.0. Default is 0.0 - disabled.
By default, the Dynamic Audio Normalizer performs "peak" normalization.
This means that the maximum local gain factor for each frame is defined
(only) by the frame's highest magnitude sample. This way, the samples can
be amplified as much as possible without exceeding the maximum signal
level, i.e. without clipping. Optionally, however, the Dynamic Audio
Normalizer can also take into account the frame's root mean square,
abbreviated RMS. In electrical engineering, the RMS is commonly used to
determine the power of a time-varying signal. It is therefore considered
that the RMS is a better approximation of the "perceived loudness" than
just looking at the signal's peak magnitude. Consequently, by adjusting all
frames to a constant RMS value, a uniform "perceived loudness" can be
established. If a target RMS value has been specified, a frame's local gain
factor is defined as the factor that would result in exactly that RMS value.
Note, however, that the maximum local gain factor is still restricted by the
frame's highest magnitude sample, in order to prevent clipping.

@item coupling, n
Enable channels coupling. By default is enabled.
By default, the Dynamic Audio Normalizer will amplify all channels by the same
amount. This means the same gain factor will be applied to all channels, i.e.
the maximum possible gain factor is determined by the "loudest" channel.
However, in some recordings, it may happen that the volume of the different
channels is uneven, e.g. one channel may be "quieter" than the other one(s).
In this case, this option can be used to disable the channel coupling. This way,
the gain factor will be determined independently for each channel, depending
only on the individual channel's highest magnitude sample. This allows for
harmonizing the volume of the different channels.

@item correctdc, c
Enable DC bias correction. By default is disabled.
An audio signal (in the time domain) is a sequence of sample values.
In the Dynamic Audio Normalizer these sample values are represented in the
-1.0 to 1.0 range, regardless of the original input format. Normally, the
audio signal, or "waveform", should be centered around the zero point.
That means if we calculate the mean value of all samples in a file, or in a
single frame, then the result should be 0.0 or at least very close to that
value. If, however, there is a significant deviation of the mean value from
0.0, in either positive or negative direction, this is referred to as a
DC bias or DC offset. Since a DC bias is clearly undesirable, the Dynamic
Audio Normalizer provides optional DC bias correction.
With DC bias correction enabled, the Dynamic Audio Normalizer will determine
the mean value, or "DC correction" offset, of each input frame and subtract
that value from all of the frame's sample values which ensures those samples
are centered around 0.0 again. Also, in order to avoid "gaps" at the frame
boundaries, the DC correction offset values will be interpolated smoothly
between neighbouring frames.

@item altboundary, b
Enable alternative boundary mode. By default is disabled.
The Dynamic Audio Normalizer takes into account a certain neighbourhood
around each frame. This includes the preceding frames as well as the
subsequent frames. However, for the "boundary" frames, located at the very
beginning and at the very end of the audio file, not all neighbouring
frames are available. In particular, for the first few frames in the audio
file, the preceding frames are not known. And, similarly, for the last few
frames in the audio file, the subsequent frames are not known. Thus, the
question arises which gain factors should be assumed for the missing frames
in the "boundary" region. The Dynamic Audio Normalizer implements two modes
to deal with this situation. The default boundary mode assumes a gain factor
of exactly 1.0 for the missing frames, resulting in a smooth "fade in" and
"fade out" at the beginning and at the end of the input, respectively.

@item compress, s
Set the compress factor. In range from 0.0 to 30.0. Default is 0.0.
By default, the Dynamic Audio Normalizer does not apply "traditional"
compression. This means that signal peaks will not be pruned and thus the
full dynamic range will be retained within each local neighbourhood. However,
in some cases it may be desirable to combine the Dynamic Audio Normalizer's
normalization algorithm with a more "traditional" compression.
For this purpose, the Dynamic Audio Normalizer provides an optional compression
(thresholding) function. If (and only if) the compression feature is enabled,
all input frames will be processed by a soft knee thresholding function prior
to the actual normalization process. Put simply, the thresholding function is
going to prune all samples whose magnitude exceeds a certain threshold value.
However, the Dynamic Audio Normalizer does not simply apply a fixed threshold
value. Instead, the threshold value will be adjusted for each individual
frame.
In general, smaller parameters result in stronger compression, and vice versa.
Values below 3.0 are not recommended, because audible distortion may appear.

@item threshold, t
Set the target threshold value. This specifies the lowest permissible
magnitude level for the audio input which will be normalized.
If input frame volume is above this value frame will be normalized.
Otherwise frame may not be normalized at all. The default value is set
to 0, which means all input frames will be normalized.
This option is mostly useful if digital noise is not wanted to be amplified.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section earwax

Make audio easier to listen to on headphones.

This filter adds `cues' to 44.1kHz stereo (i.e. audio CD format) audio
so that when listened to on headphones the stereo image is moved from
inside your head (standard for headphones) to outside and in front of
the listener (standard for speakers).

Ported from SoX.

@section equalizer

Apply a two-pole peaking equalisation (EQ) filter. With this
filter, the signal-level at and around a selected frequency can
be increased or decreased, whilst (unlike bandpass and bandreject
filters) that at all other frequencies is unchanged.

In order to produce complex equalisation curves, this filter can
be given several times, each with a different central frequency.

The filter accepts the following options:

@table @option
@item frequency, f
Set the filter's central frequency in Hz.

@item width_type, t
Set method to specify band-width of filter.
@table @option
@item h
Hz
@item q
Q-Factor
@item o
octave
@item s
slope
@item k
kHz
@end table

@item width, w
Specify the band-width of a filter in width_type units.

@item gain, g
Set the required gain or attenuation in dB.
Beware of clipping when using a positive gain.

@item mix, m
How much to use filtered signal in output. Default is 1.
Range is between 0 and 1.

@item channels, c
Specify which channels to filter, by default all available are filtered.

@item normalize, n
Normalize biquad coefficients, by default is disabled.
Enabling it will normalize magnitude response at DC to 0dB.

@item transform, a
Set transform type of IIR filter.
@table @option
@item di
@item dii
@item tdii
@item latt
@end table

@item precision, r
Set precison of filtering.
@table @option
@item auto
Pick automatic sample format depending on surround filters.
@item s16
Always use signed 16-bit.
@item s32
Always use signed 32-bit.
@item f32
Always use float 32-bit.
@item f64
Always use float 64-bit.
@end table
@end table

@subsection Examples
@itemize
@item
Attenuate 10 dB at 1000 Hz, with a bandwidth of 200 Hz:
@example
equalizer=f=1000:t=h:width=200:g=-10
@end example

@item
Apply 2 dB gain at 1000 Hz with Q 1 and attenuate 5 dB at 100 Hz with Q 2:
@example
equalizer=f=1000:t=q:w=1:g=2,equalizer=f=100:t=q:w=2:g=-5
@end example
@end itemize

@subsection Commands

This filter supports the following commands:
@table @option
@item frequency, f
Change equalizer frequency.
Syntax for the command is : "@var{frequency}"

@item width_type, t
Change equalizer width_type.
Syntax for the command is : "@var{width_type}"

@item width, w
Change equalizer width.
Syntax for the command is : "@var{width}"

@item gain, g
Change equalizer gain.
Syntax for the command is : "@var{gain}"

@item mix, m
Change equalizer mix.
Syntax for the command is : "@var{mix}"
@end table

@section extrastereo

Linearly increases the difference between left and right channels which
adds some sort of "live" effect to playback.

The filter accepts the following options:

@table @option
@item m
Sets the difference coefficient (default: 2.5). 0.0 means mono sound
(average of both channels), with 1.0 sound will be unchanged, with
-1.0 left and right channels will be swapped.

@item c
Enable clipping. By default is enabled.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section firequalizer
Apply FIR Equalization using arbitrary frequency response.

The filter accepts the following option:

@table @option
@item gain
Set gain curve equation (in dB). The expression can contain variables:
@table @option
@item f
the evaluated frequency
@item sr
sample rate
@item ch
channel number, set to 0 when multichannels evaluation is disabled
@item chid
channel id, see libavutil/channel_layout.h, set to the first channel id when
multichannels evaluation is disabled
@item chs
number of channels
@item chlayout
channel_layout, see libavutil/channel_layout.h

@end table
and functions:
@table @option
@item gain_interpolate(f)
interpolate gain on frequency f based on gain_entry
@item cubic_interpolate(f)
same as gain_interpolate, but smoother
@end table
This option is also available as command. Default is @code{gain_interpolate(f)}.

@item gain_entry
Set gain entry for gain_interpolate function. The expression can
contain functions:
@table @option
@item entry(f, g)
store gain entry at frequency f with value g
@end table
This option is also available as command.

@item delay
Set filter delay in seconds. Higher value means more accurate.
Default is @code{0.01}.

@item accuracy
Set filter accuracy in Hz. Lower value means more accurate.
Default is @code{5}.

@item wfunc
Set window function. Acceptable values are:
@table @option
@item rectangular
rectangular window, useful when gain curve is already smooth
@item hann
hann window (default)
@item hamming
hamming window
@item blackman
blackman window
@item nuttall3
3-terms continuous 1st derivative nuttall window
@item mnuttall3
minimum 3-terms discontinuous nuttall window
@item nuttall
4-terms continuous 1st derivative nuttall window
@item bnuttall
minimum 4-terms discontinuous nuttall (blackman-nuttall) window
@item bharris
blackman-harris window
@item tukey
tukey window
@end table

@item fixed
If enabled, use fixed number of audio samples. This improves speed when
filtering with large delay. Default is disabled.

@item multi
Enable multichannels evaluation on gain. Default is disabled.

@item zero_phase
Enable zero phase mode by subtracting timestamp to compensate delay.
Default is disabled.

@item scale
Set scale used by gain. Acceptable values are:
@table @option
@item linlin
linear frequency, linear gain
@item linlog
linear frequency, logarithmic (in dB) gain (default)
@item loglin
logarithmic (in octave scale where 20 Hz is 0) frequency, linear gain
@item loglog
logarithmic frequency, logarithmic gain
@end table

@item dumpfile
Set file for dumping, suitable for gnuplot.

@item dumpscale
Set scale for dumpfile. Acceptable values are same with scale option.
Default is linlog.

@item fft2
Enable 2-channel convolution using complex FFT. This improves speed significantly.
Default is disabled.

@item min_phase
Enable minimum phase impulse response. Default is disabled.
@end table

@subsection Examples
@itemize
@item
lowpass at 1000 Hz:
@example
firequalizer=gain='if(lt(f,1000), 0, -INF)'
@end example
@item
lowpass at 1000 Hz with gain_entry:
@example
firequalizer=gain_entry='entry(1000,0); entry(1001, -INF)'
@end example
@item
custom equalization:
@example
firequalizer=gain_entry='entry(100,0); entry(400, -4); entry(1000, -6); entry(2000, 0)'
@end example
@item
higher delay with zero phase to compensate delay:
@example
firequalizer=delay=0.1:fixed=on:zero_phase=on
@end example
@item
lowpass on left channel, highpass on right channel:
@example
firequalizer=gain='if(eq(chid,1), gain_interpolate(f), if(eq(chid,2), gain_interpolate(1e6+f), 0))'
:gain_entry='entry(1000, 0); entry(1001,-INF); entry(1e6+1000,0)':multi=on
@end example
@end itemize

@section flanger
Apply a flanging effect to the audio.

The filter accepts the following options:

@table @option
@item delay
Set base delay in milliseconds. Range from 0 to 30. Default value is 0.

@item depth
Set added sweep delay in milliseconds. Range from 0 to 10. Default value is 2.

@item regen
Set percentage regeneration (delayed signal feedback). Range from -95 to 95.
Default value is 0.

@item width
Set percentage of delayed signal mixed with original. Range from 0 to 100.
Default value is 71.

@item speed
Set sweeps per second (Hz). Range from 0.1 to 10. Default value is 0.5.

@item shape
Set swept wave shape, can be @var{triangular} or @var{sinusoidal}.
Default value is @var{sinusoidal}.

@item phase
Set swept wave percentage-shift for multi channel. Range from 0 to 100.
Default value is 25.

@item interp
Set delay-line interpolation, @var{linear} or @var{quadratic}.
Default is @var{linear}.
@end table

@section haas
Apply Haas effect to audio.

Note that this makes most sense to apply on mono signals.
With this filter applied to mono signals it give some directionality and
stretches its stereo image.

The filter accepts the following options:

@table @option
@item level_in
Set input level. By default is @var{1}, or 0dB

@item level_out
Set output level. By default is @var{1}, or 0dB.

@item side_gain
Set gain applied to side part of signal. By default is @var{1}.

@item middle_source
Set kind of middle source. Can be one of the following:

@table @samp
@item left
Pick left channel.

@item right
Pick right channel.

@item mid
Pick middle part signal of stereo image.

@item side
Pick side part signal of stereo image.
@end table

@item middle_phase
Change middle phase. By default is disabled.

@item left_delay
Set left channel delay. By default is @var{2.05} milliseconds.

@item left_balance
Set left channel balance. By default is @var{-1}.

@item left_gain
Set left channel gain. By default is @var{1}.

@item left_phase
Change left phase. By default is disabled.

@item right_delay
Set right channel delay. By defaults is @var{2.12} milliseconds.

@item right_balance
Set right channel balance. By default is @var{1}.

@item right_gain
Set right channel gain. By default is @var{1}.

@item right_phase
Change right phase. By default is enabled.
@end table

@section hdcd

Decodes High Definition Compatible Digital (HDCD) data. A 16-bit PCM stream with
embedded HDCD codes is expanded into a 20-bit PCM stream.

The filter supports the Peak Extend and Low-level Gain Adjustment features
of HDCD, and detects the Transient Filter flag.

@example
ffmpeg -i HDCD16.flac -af hdcd OUT24.flac
@end example

When using the filter with wav, note the default encoding for wav is 16-bit,
so the resulting 20-bit stream will be truncated back to 16-bit. Use something
like @command{-acodec pcm_s24le} after the filter to get 24-bit PCM output.
@example
ffmpeg -i HDCD16.wav -af hdcd OUT16.wav
ffmpeg -i HDCD16.wav -af hdcd -c:a pcm_s24le OUT24.wav
@end example

The filter accepts the following options:

@table @option
@item disable_autoconvert
Disable any automatic format conversion or resampling in the filter graph.

@item process_stereo
Process the stereo channels together. If target_gain does not match between
channels, consider it invalid and use the last valid target_gain.

@item cdt_ms
Set the code detect timer period in ms.

@item force_pe
Always extend peaks above -3dBFS even if PE isn't signaled.

@item analyze_mode
Replace audio with a solid tone and adjust the amplitude to signal some
specific aspect of the decoding process. The output file can be loaded in
an audio editor alongside the original to aid analysis.

@code{analyze_mode=pe:force_pe=true} can be used to see all samples above the PE level.

Modes are:
@table @samp
@item 0, off
Disabled
@item 1, lle
Gain adjustment level at each sample
@item 2, pe
Samples where peak extend occurs
@item 3, cdt
Samples where the code detect timer is active
@item 4, tgm
Samples where the target gain does not match between channels
@end table
@end table

@section headphone

Apply head-related transfer functions (HRTFs) to create virtual
loudspeakers around the user for binaural listening via headphones.
The HRIRs are provided via additional streams, for each channel
one stereo input stream is needed.

The filter accepts the following options:

@table @option
@item map
Set mapping of input streams for convolution.
The argument is a '|'-separated list of channel names in order as they
are given as additional stream inputs for filter.
This also specify number of input streams. Number of input streams
must be not less than number of channels in first stream plus one.

@item gain
Set gain applied to audio. Value is in dB. Default is 0.

@item type
Set processing type. Can be @var{time} or @var{freq}. @var{time} is
processing audio in time domain which is slow.
@var{freq} is processing audio in frequency domain which is fast.
Default is @var{freq}.

@item lfe
Set custom gain for LFE channels. Value is in dB. Default is 0.

@item size
Set size of frame in number of samples which will be processed at once.
Default value is @var{1024}. Allowed range is from 1024 to 96000.

@item hrir
Set format of hrir stream.
Default value is @var{stereo}. Alternative value is @var{multich}.
If value is set to @var{stereo}, number of additional streams should
be greater or equal to number of input channels in first input stream.
Also each additional stream should have stereo number of channels.
If value is set to @var{multich}, number of additional streams should
be exactly one. Also number of input channels of additional stream
should be equal or greater than twice number of channels of first input
stream.
@end table

@subsection Examples

@itemize
@item
Full example using wav files as coefficients with amovie filters for 7.1 downmix,
each amovie filter use stereo file with IR coefficients as input.
The files give coefficients for each position of virtual loudspeaker:
@example
ffmpeg -i input.wav
-filter_complex "amovie=azi_270_ele_0_DFC.wav[sr];amovie=azi_90_ele_0_DFC.wav[sl];amovie=azi_225_ele_0_DFC.wav[br];amovie=azi_135_ele_0_DFC.wav[bl];amovie=azi_0_ele_0_DFC.wav,asplit[fc][lfe];amovie=azi_35_ele_0_DFC.wav[fl];amovie=azi_325_ele_0_DFC.wav[fr];[0:a][fl][fr][fc][lfe][bl][br][sl][sr]headphone=FL|FR|FC|LFE|BL|BR|SL|SR"
output.wav
@end example

@item
Full example using wav files as coefficients with amovie filters for 7.1 downmix,
but now in @var{multich} @var{hrir} format.
@example
ffmpeg -i input.wav -filter_complex "amovie=minp.wav[hrirs];[0:a][hrirs]headphone=map=FL|FR|FC|LFE|BL|BR|SL|SR:hrir=multich"
output.wav
@end example
@end itemize

@section highpass

Apply a high-pass filter with 3dB point frequency.
The filter can be either single-pole, or double-pole (the default).
The filter roll off at 6dB per pole per octave (20dB per pole per decade).

The filter accepts the following options:

@table @option
@item frequency, f
Set frequency in Hz. Default is 3000.

@item poles, p
Set number of poles. Default is 2.

@item width_type, t
Set method to specify band-width of filter.
@table @option
@item h
Hz
@item q
Q-Factor
@item o
octave
@item s
slope
@item k
kHz
@end table

@item width, w
Specify the band-width of a filter in width_type units.
Applies only to double-pole filter.
The default is 0.707q and gives a Butterworth response.

@item mix, m
How much to use filtered signal in output. Default is 1.
Range is between 0 and 1.

@item channels, c
Specify which channels to filter, by default all available are filtered.

@item normalize, n
Normalize biquad coefficients, by default is disabled.
Enabling it will normalize magnitude response at DC to 0dB.

@item transform, a
Set transform type of IIR filter.
@table @option
@item di
@item dii
@item tdii
@item latt
@end table

@item precision, r
Set precison of filtering.
@table @option
@item auto
Pick automatic sample format depending on surround filters.
@item s16
Always use signed 16-bit.
@item s32
Always use signed 32-bit.
@item f32
Always use float 32-bit.
@item f64
Always use float 64-bit.
@end table
@end table

@subsection Commands

This filter supports the following commands:
@table @option
@item frequency, f
Change highpass frequency.
Syntax for the command is : "@var{frequency}"

@item width_type, t
Change highpass width_type.
Syntax for the command is : "@var{width_type}"

@item width, w
Change highpass width.
Syntax for the command is : "@var{width}"

@item mix, m
Change highpass mix.
Syntax for the command is : "@var{mix}"
@end table

@section join

Join multiple input streams into one multi-channel stream.

It accepts the following parameters:
@table @option

@item inputs
The number of input streams. It defaults to 2.

@item channel_layout
The desired output channel layout. It defaults to stereo.

@item map
Map channels from inputs to output. The argument is a '|'-separated list of
mappings, each in the @code{@var{input_idx}.@var{in_channel}-@var{out_channel}}
form. @var{input_idx} is the 0-based index of the input stream. @var{in_channel}
can be either the name of the input channel (e.g. FL for front left) or its
index in the specified input stream. @var{out_channel} is the name of the output
channel.
@end table

The filter will attempt to guess the mappings when they are not specified
explicitly. It does so by first trying to find an unused matching input channel
and if that fails it picks the first unused input channel.

Join 3 inputs (with properly set channel layouts):
@example
ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT
@end example

Build a 5.1 output from 6 single-channel streams:
@example
ffmpeg -i fl -i fr -i fc -i sl -i sr -i lfe -filter_complex
'join=inputs=6:channel_layout=5.1:map=0.0-FL|1.0-FR|2.0-FC|3.0-SL|4.0-SR|5.0-LFE'
out
@end example

@section ladspa

Load a LADSPA (Linux Audio Developer's Simple Plugin API) plugin.

To enable compilation of this filter you need to configure FFmpeg with
@code{--enable-ladspa}.

@table @option
@item file, f
Specifies the name of LADSPA plugin library to load. If the environment
variable @env{LADSPA_PATH} is defined, the LADSPA plugin is searched in
each one of the directories specified by the colon separated list in
@env{LADSPA_PATH}, otherwise in the standard LADSPA paths, which are in
this order: @file{HOME/.ladspa/lib/}, @file{/usr/local/lib/ladspa/},
@file{/usr/lib/ladspa/}.

@item plugin, p
Specifies the plugin within the library. Some libraries contain only
one plugin, but others contain many of them. If this is not set filter
will list all available plugins within the specified library.

@item controls, c
Set the '|' separated list of controls which are zero or more floating point
values that determine the behavior of the loaded plugin (for example delay,
threshold or gain).
Controls need to be defined using the following syntax:
c0=@var{value0}|c1=@var{value1}|c2=@var{value2}|..., where
@var{valuei} is the value set on the @var{i}-th control.
Alternatively they can be also defined using the following syntax:
@var{value0}|@var{value1}|@var{value2}|..., where
@var{valuei} is the value set on the @var{i}-th control.
If @option{controls} is set to @code{help}, all available controls and
their valid ranges are printed.

@item sample_rate, s
Specify the sample rate, default to 44100. Only used if plugin have
zero inputs.

@item nb_samples, n
Set the number of samples per channel per each output frame, default
is 1024. Only used if plugin have zero inputs.

@item duration, d
Set the minimum duration of the sourced audio. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.
Note that the resulting duration may be greater than the specified duration,
as the generated audio is always cut at the end of a complete frame.
If not specified, or the expressed duration is negative, the audio is
supposed to be generated forever.
Only used if plugin have zero inputs.

@item latency, l
Enable latency compensation, by default is disabled.
Only used if plugin have inputs.
@end table

@subsection Examples

@itemize
@item
List all available plugins within amp (LADSPA example plugin) library:
@example
ladspa=file=amp
@end example

@item
List all available controls and their valid ranges for @code{vcf_notch}
plugin from @code{VCF} library:
@example
ladspa=f=vcf:p=vcf_notch:c=help
@end example

@item
Simulate low quality audio equipment using @code{Computer Music Toolkit} (CMT)
plugin library:
@example
ladspa=file=cmt:plugin=lofi:controls=c0=22|c1=12|c2=12
@end example

@item
Add reverberation to the audio using TAP-plugins
(Tom's Audio Processing plugins):
@example
ladspa=file=tap_reverb:tap_reverb
@end example

@item
Generate white noise, with 0.2 amplitude:
@example
ladspa=file=cmt:noise_source_white:c=c0=.2
@end example

@item
Generate 20 bpm clicks using plugin @code{C* Click - Metronome} from the
@code{C* Audio Plugin Suite} (CAPS) library:
@example
ladspa=file=caps:Click:c=c1=20'
@end example

@item
Apply @code{C* Eq10X2 - Stereo 10-band equaliser} effect:
@example
ladspa=caps:Eq10X2:c=c0=-48|c9=-24|c3=12|c4=2
@end example

@item
Increase volume by 20dB using fast lookahead limiter from Steve Harris
@code{SWH Plugins} collection:
@example
ladspa=fast_lookahead_limiter_1913:fastLookaheadLimiter:20|0|2
@end example

@item
Attenuate low frequencies using Multiband EQ from Steve Harris
@code{SWH Plugins} collection:
@example
ladspa=mbeq_1197:mbeq:-24|-24|-24|0|0|0|0|0|0|0|0|0|0|0|0
@end example

@item
Reduce stereo image using @code{Narrower} from the @code{C* Audio Plugin Suite}
(CAPS) library:
@example
ladspa=caps:Narrower
@end example

@item
Another white noise, now using @code{C* Audio Plugin Suite} (CAPS) library:
@example
ladspa=caps:White:.2
@end example

@item
Some fractal noise, using @code{C* Audio Plugin Suite} (CAPS) library:
@example
ladspa=caps:Fractal:c=c1=1
@end example

@item
Dynamic volume normalization using @code{VLevel} plugin:
@example
ladspa=vlevel-ladspa:vlevel_mono
@end example
@end itemize

@subsection Commands

This filter supports the following commands:
@table @option
@item cN
Modify the @var{N}-th control value.

If the specified value is not valid, it is ignored and prior one is kept.
@end table

@section loudnorm

EBU R128 loudness normalization. Includes both dynamic and linear normalization modes.
Support for both single pass (livestreams, files) and double pass (files) modes.
This algorithm can target IL, LRA, and maximum true peak. In dynamic mode, to accurately
detect true peaks, the audio stream will be upsampled to 192 kHz.
Use the @code{-ar} option or @code{aresample} filter to explicitly set an output sample rate.

The filter accepts the following options:

@table @option
@item I, i
Set integrated loudness target.
Range is -70.0 - -5.0. Default value is -24.0.

@item LRA, lra
Set loudness range target.
Range is 1.0 - 20.0. Default value is 7.0.

@item TP, tp
Set maximum true peak.
Range is -9.0 - +0.0. Default value is -2.0.

@item measured_I, measured_i
Measured IL of input file.
Range is -99.0 - +0.0.

@item measured_LRA, measured_lra
Measured LRA of input file.
Range is  0.0 - 99.0.

@item measured_TP, measured_tp
Measured true peak of input file.
Range is  -99.0 - +99.0.

@item measured_thresh
Measured threshold of input file.
Range is -99.0 - +0.0.

@item offset
Set offset gain. Gain is applied before the true-peak limiter.
Range is  -99.0 - +99.0. Default is +0.0.

@item linear
Normalize by linearly scaling the source audio.
@code{measured_I}, @code{measured_LRA}, @code{measured_TP},
and @code{measured_thresh} must all be specified. Target LRA shouldn't
be lower than source LRA and the change in integrated loudness shouldn't
result in a true peak which exceeds the target TP. If any of these
conditions aren't met, normalization mode will revert to @var{dynamic}.
Options are @code{true} or @code{false}. Default is @code{true}.

@item dual_mono
Treat mono input files as "dual-mono". If a mono file is intended for playback
on a stereo system, its EBU R128 measurement will be perceptually incorrect.
If set to @code{true}, this option will compensate for this effect.
Multi-channel input files are not affected by this option.
Options are true or false. Default is false.

@item print_format
Set print format for stats. Options are summary, json, or none.
Default value is none.
@end table

@section lowpass

Apply a low-pass filter with 3dB point frequency.
The filter can be either single-pole or double-pole (the default).
The filter roll off at 6dB per pole per octave (20dB per pole per decade).

The filter accepts the following options:

@table @option
@item frequency, f
Set frequency in Hz. Default is 500.

@item poles, p
Set number of poles. Default is 2.

@item width_type, t
Set method to specify band-width of filter.
@table @option
@item h
Hz
@item q
Q-Factor
@item o
octave
@item s
slope
@item k
kHz
@end table

@item width, w
Specify the band-width of a filter in width_type units.
Applies only to double-pole filter.
The default is 0.707q and gives a Butterworth response.

@item mix, m
How much to use filtered signal in output. Default is 1.
Range is between 0 and 1.

@item channels, c
Specify which channels to filter, by default all available are filtered.

@item normalize, n
Normalize biquad coefficients, by default is disabled.
Enabling it will normalize magnitude response at DC to 0dB.

@item transform, a
Set transform type of IIR filter.
@table @option
@item di
@item dii
@item tdii
@item latt
@end table

@item precision, r
Set precison of filtering.
@table @option
@item auto
Pick automatic sample format depending on surround filters.
@item s16
Always use signed 16-bit.
@item s32
Always use signed 32-bit.
@item f32
Always use float 32-bit.
@item f64
Always use float 64-bit.
@end table
@end table

@subsection Examples
@itemize
@item
Lowpass only LFE channel, it LFE is not present it does nothing:
@example
lowpass=c=LFE
@end example
@end itemize

@subsection Commands

This filter supports the following commands:
@table @option
@item frequency, f
Change lowpass frequency.
Syntax for the command is : "@var{frequency}"

@item width_type, t
Change lowpass width_type.
Syntax for the command is : "@var{width_type}"

@item width, w
Change lowpass width.
Syntax for the command is : "@var{width}"

@item mix, m
Change lowpass mix.
Syntax for the command is : "@var{mix}"
@end table

@section lv2

Load a LV2 (LADSPA Version 2) plugin.

To enable compilation of this filter you need to configure FFmpeg with
@code{--enable-lv2}.

@table @option
@item plugin, p
Specifies the plugin URI. You may need to escape ':'.

@item controls, c
Set the '|' separated list of controls which are zero or more floating point
values that determine the behavior of the loaded plugin (for example delay,
threshold or gain).
If @option{controls} is set to @code{help}, all available controls and
their valid ranges are printed.

@item sample_rate, s
Specify the sample rate, default to 44100. Only used if plugin have
zero inputs.

@item nb_samples, n
Set the number of samples per channel per each output frame, default
is 1024. Only used if plugin have zero inputs.

@item duration, d
Set the minimum duration of the sourced audio. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.
Note that the resulting duration may be greater than the specified duration,
as the generated audio is always cut at the end of a complete frame.
If not specified, or the expressed duration is negative, the audio is
supposed to be generated forever.
Only used if plugin have zero inputs.
@end table

@subsection Examples

@itemize
@item
Apply bass enhancer plugin from Calf:
@example
lv2=p=http\\\\://calf.sourceforge.net/plugins/BassEnhancer:c=amount=2
@end example

@item
Apply vinyl plugin from Calf:
@example
lv2=p=http\\\\://calf.sourceforge.net/plugins/Vinyl:c=drone=0.2|aging=0.5
@end example

@item
Apply bit crusher plugin from ArtyFX:
@example
lv2=p=http\\\\://www.openavproductions.com/artyfx#bitta:c=crush=0.3
@end example
@end itemize

@section mcompand
Multiband Compress or expand the audio's dynamic range.

The input audio is divided into bands using 4th order Linkwitz-Riley IIRs.
This is akin to the crossover of a loudspeaker, and results in flat frequency
response when absent compander action.

It accepts the following parameters:

@table @option
@item args
This option syntax is:
attack,decay,[attack,decay..] soft-knee points crossover_frequency [delay [initial_volume [gain]]] | attack,decay ...
For explanation of each item refer to compand filter documentation.
@end table

@anchor{pan}
@section pan

Mix channels with specific gain levels. The filter accepts the output
channel layout followed by a set of channels definitions.

This filter is also designed to efficiently remap the channels of an audio
stream.

The filter accepts parameters of the form:
"@var{l}|@var{outdef}|@var{outdef}|..."

@table @option
@item l
output channel layout or number of channels

@item outdef
output channel specification, of the form:
"@var{out_name}=[@var{gain}*]@var{in_name}[(+-)[@var{gain}*]@var{in_name}...]"

@item out_name
output channel to define, either a channel name (FL, FR, etc.) or a channel
number (c0, c1, etc.)

@item gain
multiplicative coefficient for the channel, 1 leaving the volume unchanged

@item in_name
input channel to use, see out_name for details; it is not possible to mix
named and numbered input channels
@end table

If the `=' in a channel specification is replaced by `<', then the gains for
that specification will be renormalized so that the total is 1, thus
avoiding clipping noise.

@subsection Mixing examples

For example, if you want to down-mix from stereo to mono, but with a bigger
factor for the left channel:
@example
pan=1c|c0=0.9*c0+0.1*c1
@end example

A customized down-mix to stereo that works automatically for 3-, 4-, 5- and
7-channels surround:
@example
pan=stereo| FL < FL + 0.5*FC + 0.6*BL + 0.6*SL | FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
@end example

Note that @command{ffmpeg} integrates a default down-mix (and up-mix) system
that should be preferred (see "-ac" option) unless you have very specific
needs.

@subsection Remapping examples

The channel remapping will be effective if, and only if:

@itemize
@item gain coefficients are zeroes or ones,
@item only one input per channel output,
@end itemize

If all these conditions are satisfied, the filter will notify the user ("Pure
channel mapping detected"), and use an optimized and lossless method to do the
remapping.

For example, if you have a 5.1 source and want a stereo audio stream by
dropping the extra channels:
@example
pan="stereo| c0=FL | c1=FR"
@end example

Given the same source, you can also switch front left and front right channels
and keep the input channel layout:
@example
pan="5.1| c0=c1 | c1=c0 | c2=c2 | c3=c3 | c4=c4 | c5=c5"
@end example

If the input is a stereo audio stream, you can mute the front left channel (and
still keep the stereo channel layout) with:
@example
pan="stereo|c1=c1"
@end example

Still with a stereo audio stream input, you can copy the right channel in both
front left and right:
@example
pan="stereo| c0=FR | c1=FR"
@end example

@section replaygain

ReplayGain scanner filter. This filter takes an audio stream as an input and
outputs it unchanged.
At end of filtering it displays @code{track_gain} and @code{track_peak}.

@section resample

Convert the audio sample format, sample rate and channel layout. It is
not meant to be used directly.

@section rubberband
Apply time-stretching and pitch-shifting with librubberband.

To enable compilation of this filter, you need to configure FFmpeg with
@code{--enable-librubberband}.

The filter accepts the following options:

@table @option
@item tempo
Set tempo scale factor.

@item pitch
Set pitch scale factor.

@item transients
Set transients detector.
Possible values are:
@table @var
@item crisp
@item mixed
@item smooth
@end table

@item detector
Set detector.
Possible values are:
@table @var
@item compound
@item percussive
@item soft
@end table

@item phase
Set phase.
Possible values are:
@table @var
@item laminar
@item independent
@end table

@item window
Set processing window size.
Possible values are:
@table @var
@item standard
@item short
@item long
@end table

@item smoothing
Set smoothing.
Possible values are:
@table @var
@item off
@item on
@end table

@item formant
Enable formant preservation when shift pitching.
Possible values are:
@table @var
@item shifted
@item preserved
@end table

@item pitchq
Set pitch quality.
Possible values are:
@table @var
@item quality
@item speed
@item consistency
@end table

@item channels
Set channels.
Possible values are:
@table @var
@item apart
@item together
@end table
@end table

@subsection Commands

This filter supports the following commands:
@table @option
@item tempo
Change filter tempo scale factor.
Syntax for the command is : "@var{tempo}"

@item pitch
Change filter pitch scale factor.
Syntax for the command is : "@var{pitch}"
@end table

@section sidechaincompress

This filter acts like normal compressor but has the ability to compress
detected signal using second input signal.
It needs two input streams and returns one output stream.
First input stream will be processed depending on second stream signal.
The filtered signal then can be filtered with other filters in later stages of
processing. See @ref{pan} and @ref{amerge} filter.

The filter accepts the following options:

@table @option
@item level_in
Set input gain. Default is 1. Range is between 0.015625 and 64.

@item mode
Set mode of compressor operation. Can be @code{upward} or @code{downward}.
Default is @code{downward}.

@item threshold
If a signal of second stream raises above this level it will affect the gain
reduction of first stream.
By default is 0.125. Range is between 0.00097563 and 1.

@item ratio
Set a ratio about which the signal is reduced. 1:2 means that if the level
raised 4dB above the threshold, it will be only 2dB above after the reduction.
Default is 2. Range is between 1 and 20.

@item attack
Amount of milliseconds the signal has to rise above the threshold before gain
reduction starts. Default is 20. Range is between 0.01 and 2000.

@item release
Amount of milliseconds the signal has to fall below the threshold before
reduction is decreased again. Default is 250. Range is between 0.01 and 9000.

@item makeup
Set the amount by how much signal will be amplified after processing.
Default is 1. Range is from 1 to 64.

@item knee
Curve the sharp knee around the threshold to enter gain reduction more softly.
Default is 2.82843. Range is between 1 and 8.

@item link
Choose if the @code{average} level between all channels of side-chain stream
or the louder(@code{maximum}) channel of side-chain stream affects the
reduction. Default is @code{average}.

@item detection
Should the exact signal be taken in case of @code{peak} or an RMS one in case
of @code{rms}. Default is @code{rms} which is mainly smoother.

@item level_sc
Set sidechain gain. Default is 1. Range is between 0.015625 and 64.

@item mix
How much to use compressed signal in output. Default is 1.
Range is between 0 and 1.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@subsection Examples

@itemize
@item
Full ffmpeg example taking 2 audio inputs, 1st input to be compressed
depending on the signal of 2nd input and later compressed signal to be
merged with 2nd input:
@example
ffmpeg -i main.flac -i sidechain.flac -filter_complex "[1:a]asplit=2[sc][mix];[0:a][sc]sidechaincompress[compr];[compr][mix]amerge"
@end example
@end itemize

@section sidechaingate

A sidechain gate acts like a normal (wideband) gate but has the ability to
filter the detected signal before sending it to the gain reduction stage.
Normally a gate uses the full range signal to detect a level above the
threshold.
For example: If you cut all lower frequencies from your sidechain signal
the gate will decrease the volume of your track only if not enough highs
appear. With this technique you are able to reduce the resonation of a
natural drum or remove "rumbling" of muted strokes from a heavily distorted
guitar.
It needs two input streams and returns one output stream.
First input stream will be processed depending on second stream signal.

The filter accepts the following options:

@table @option
@item level_in
Set input level before filtering.
Default is 1. Allowed range is from 0.015625 to 64.

@item mode
Set the mode of operation. Can be @code{upward} or @code{downward}.
Default is @code{downward}. If set to @code{upward} mode, higher parts of signal
will be amplified, expanding dynamic range in upward direction.
Otherwise, in case of @code{downward} lower parts of signal will be reduced.

@item range
Set the level of gain reduction when the signal is below the threshold.
Default is 0.06125. Allowed range is from 0 to 1.
Setting this to 0 disables reduction and then filter behaves like expander.

@item threshold
If a signal rises above this level the gain reduction is released.
Default is 0.125. Allowed range is from 0 to 1.

@item ratio
Set a ratio about which the signal is reduced.
Default is 2. Allowed range is from 1 to 9000.

@item attack
Amount of milliseconds the signal has to rise above the threshold before gain
reduction stops.
Default is 20 milliseconds. Allowed range is from 0.01 to 9000.

@item release
Amount of milliseconds the signal has to fall below the threshold before the
reduction is increased again. Default is 250 milliseconds.
Allowed range is from 0.01 to 9000.

@item makeup
Set amount of amplification of signal after processing.
Default is 1. Allowed range is from 1 to 64.

@item knee
Curve the sharp knee around the threshold to enter gain reduction more softly.
Default is 2.828427125. Allowed range is from 1 to 8.

@item detection
Choose if exact signal should be taken for detection or an RMS like one.
Default is rms. Can be peak or rms.

@item link
Choose if the average level between all channels or the louder channel affects
the reduction.
Default is average. Can be average or maximum.

@item level_sc
Set sidechain gain. Default is 1. Range is from 0.015625 to 64.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section silencedetect

Detect silence in an audio stream.

This filter logs a message when it detects that the input audio volume is less
or equal to a noise tolerance value for a duration greater or equal to the
minimum detected noise duration.

The printed times and duration are expressed in seconds. The
@code{lavfi.silence_start} or @code{lavfi.silence_start.X} metadata key
is set on the first frame whose timestamp equals or exceeds the detection
duration and it contains the timestamp of the first frame of the silence.

The @code{lavfi.silence_duration} or @code{lavfi.silence_duration.X}
and @code{lavfi.silence_end} or @code{lavfi.silence_end.X} metadata
keys are set on the first frame after the silence. If @option{mono} is
enabled, and each channel is evaluated separately, the @code{.X}
suffixed keys are used, and @code{X} corresponds to the channel number.

The filter accepts the following options:

@table @option
@item noise, n
Set noise tolerance. Can be specified in dB (in case "dB" is appended to the
specified value) or amplitude ratio. Default is -60dB, or 0.001.

@item duration, d
Set silence duration until notification (default is 2 seconds). See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.

@item mono, m
Process each channel separately, instead of combined. By default is disabled.
@end table

@subsection Examples

@itemize
@item
Detect 5 seconds of silence with -50dB noise tolerance:
@example
silencedetect=n=-50dB:d=5
@end example

@item
Complete example with @command{ffmpeg} to detect silence with 0.0001 noise
tolerance in @file{silence.mp3}:
@example
ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
@end example
@end itemize

@section silenceremove

Remove silence from the beginning, middle or end of the audio.

The filter accepts the following options:

@table @option
@item start_periods
This value is used to indicate if audio should be trimmed at beginning of
the audio. A value of zero indicates no silence should be trimmed from the
beginning. When specifying a non-zero value, it trims audio up until it
finds non-silence. Normally, when trimming silence from beginning of audio
the @var{start_periods} will be @code{1} but it can be increased to higher
values to trim all audio up to specific count of non-silence periods.
Default value is @code{0}.

@item start_duration
Specify the amount of time that non-silence must be detected before it stops
trimming audio. By increasing the duration, bursts of noises can be treated
as silence and trimmed off. Default value is @code{0}.

@item start_threshold
This indicates what sample value should be treated as silence. For digital
audio, a value of @code{0} may be fine but for audio recorded from analog,
you may wish to increase the value to account for background noise.
Can be specified in dB (in case "dB" is appended to the specified value)
or amplitude ratio. Default value is @code{0}.

@item start_silence
Specify max duration of silence at beginning that will be kept after
trimming. Default is 0, which is equal to trimming all samples detected
as silence.

@item start_mode
Specify mode of detection of silence end in start of multi-channel audio.
Can be @var{any} or @var{all}. Default is @var{any}.
With @var{any}, any sample that is detected as non-silence will cause
stopped trimming of silence.
With @var{all}, only if all channels are detected as non-silence will cause
stopped trimming of silence.

@item stop_periods
Set the count for trimming silence from the end of audio.
To remove silence from the middle of a file, specify a @var{stop_periods}
that is negative. This value is then treated as a positive value and is
used to indicate the effect should restart processing as specified by
@var{start_periods}, making it suitable for removing periods of silence
in the middle of the audio.
Default value is @code{0}.

@item stop_duration
Specify a duration of silence that must exist before audio is not copied any
more. By specifying a higher duration, silence that is wanted can be left in
the audio.
Default value is @code{0}.

@item stop_threshold
This is the same as @option{start_threshold} but for trimming silence from
the end of audio.
Can be specified in dB (in case "dB" is appended to the specified value)
or amplitude ratio. Default value is @code{0}.

@item stop_silence
Specify max duration of silence at end that will be kept after
trimming. Default is 0, which is equal to trimming all samples detected
as silence.

@item stop_mode
Specify mode of detection of silence start in end of multi-channel audio.
Can be @var{any} or @var{all}. Default is @var{any}.
With @var{any}, any sample that is detected as non-silence will cause
stopped trimming of silence.
With @var{all}, only if all channels are detected as non-silence will cause
stopped trimming of silence.

@item detection
Set how is silence detected. Can be @code{rms} or @code{peak}. Second is faster
and works better with digital silence which is exactly 0.
Default value is @code{rms}.

@item window
Set duration in number of seconds used to calculate size of window in number
of samples for detecting silence.
Default value is @code{0.02}. Allowed range is from @code{0} to @code{10}.
@end table

@subsection Examples

@itemize
@item
The following example shows how this filter can be used to start a recording
that does not contain the delay at the start which usually occurs between
pressing the record button and the start of the performance:
@example
silenceremove=start_periods=1:start_duration=5:start_threshold=0.02
@end example

@item
Trim all silence encountered from beginning to end where there is more than 1
second of silence in audio:
@example
silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-90dB
@end example

@item
Trim all digital silence samples, using peak detection, from beginning to end
where there is more than 0 samples of digital silence in audio and digital
silence is detected in all channels at same positions in stream:
@example
silenceremove=window=0:detection=peak:stop_mode=all:start_mode=all:stop_periods=-1:stop_threshold=0
@end example
@end itemize

@section sofalizer

SOFAlizer uses head-related transfer functions (HRTFs) to create virtual
loudspeakers around the user for binaural listening via headphones (audio
formats up to 9 channels supported).
The HRTFs are stored in SOFA files (see @url{http://www.sofacoustics.org/} for a database).
SOFAlizer is developed at the Acoustics Research Institute (ARI) of the
Austrian Academy of Sciences.

To enable compilation of this filter you need to configure FFmpeg with
@code{--enable-libmysofa}.

The filter accepts the following options:

@table @option
@item sofa
Set the SOFA file used for rendering.

@item gain
Set gain applied to audio. Value is in dB. Default is 0.

@item rotation
Set rotation of virtual loudspeakers in deg. Default is 0.

@item elevation
Set elevation of virtual speakers in deg. Default is 0.

@item radius
Set distance in meters between loudspeakers and the listener with near-field
HRTFs. Default is 1.

@item type
Set processing type. Can be @var{time} or @var{freq}. @var{time} is
processing audio in time domain which is slow.
@var{freq} is processing audio in frequency domain which is fast.
Default is @var{freq}.

@item speakers
Set custom positions of virtual loudspeakers. Syntax for this option is:
<CH> <AZIM> <ELEV>[|<CH> <AZIM> <ELEV>|...].
Each virtual loudspeaker is described with short channel name following with
azimuth and elevation in degrees.
Each virtual loudspeaker description is separated by '|'.
For example to override front left and front right channel positions use:
'speakers=FL 45 15|FR 345 15'.
Descriptions with unrecognised channel names are ignored.

@item lfegain
Set custom gain for LFE channels. Value is in dB. Default is 0.

@item framesize
Set custom frame size in number of samples. Default is 1024.
Allowed range is from 1024 to 96000. Only used if option @samp{type}
is set to @var{freq}.

@item normalize
Should all IRs be normalized upon importing SOFA file.
By default is enabled.

@item interpolate
Should nearest IRs be interpolated with neighbor IRs if exact position
does not match. By default is disabled.

@item minphase
Minphase all IRs upon loading of SOFA file. By default is disabled.

@item anglestep
Set neighbor search angle step. Only used if option @var{interpolate} is enabled.

@item radstep
Set neighbor search radius step. Only used if option @var{interpolate} is enabled.
@end table

@subsection Examples

@itemize
@item
Using ClubFritz6 sofa file:
@example
sofalizer=sofa=/path/to/ClubFritz6.sofa:type=freq:radius=1
@end example

@item
Using ClubFritz12 sofa file and bigger radius with small rotation:
@example
sofalizer=sofa=/path/to/ClubFritz12.sofa:type=freq:radius=2:rotation=5
@end example

@item
Similar as above but with custom speaker positions for front left, front right, back left and back right
and also with custom gain:
@example
"sofalizer=sofa=/path/to/ClubFritz6.sofa:type=freq:radius=2:speakers=FL 45|FR 315|BL 135|BR 225:gain=28"
@end example
@end itemize

@section speechnorm
Speech Normalizer.

This filter expands or compresses each half-cycle of audio samples
(local set of samples all above or all below zero and between two nearest zero crossings) depending
on threshold value, so audio reaches target peak value under conditions controlled by below options.

The filter accepts the following options:

@table @option
@item peak, p
Set the expansion target peak value. This specifies the highest allowed absolute amplitude
level for the normalized audio input. Default value is 0.95. Allowed range is from 0.0 to 1.0.

@item expansion, e
Set the maximum expansion factor. Allowed range is from 1.0 to 50.0. Default value is 2.0.
This option controls maximum local half-cycle of samples expansion. The maximum expansion
would be such that local peak value reaches target peak value but never to surpass it and that
ratio between new and previous peak value does not surpass this option value.

@item compression, c
Set the maximum compression factor. Allowed range is from 1.0 to 50.0. Default value is 2.0.
This option controls maximum local half-cycle of samples compression. This option is used
only if @option{threshold} option is set to value greater than 0.0, then in such cases
when local peak is lower or same as value set by @option{threshold} all samples belonging to
that peak's half-cycle will be compressed by current compression factor.

@item threshold, t
Set the threshold value. Default value is 0.0. Allowed range is from 0.0 to 1.0.
This option specifies which half-cycles of samples will be compressed and which will be expanded.
Any half-cycle samples with their local peak value below or same as this option value will be
compressed by current compression factor, otherwise, if greater than threshold value they will be
expanded with expansion factor so that it could reach peak target value but never surpass it.

@item raise, r
Set the expansion raising amount per each half-cycle of samples. Default value is 0.001.
Allowed range is from 0.0 to 1.0. This controls how fast expansion factor is raised per
each new half-cycle until it reaches @option{expansion} value.
Setting this options too high may lead to distortions.

@item fall, f
Set the compression raising amount per each half-cycle of samples. Default value is 0.001.
Allowed range is from 0.0 to 1.0. This controls how fast compression factor is raised per
each new half-cycle until it reaches @option{compression} value.

@item channels, h
Specify which channels to filter, by default all available channels are filtered.

@item invert, i
Enable inverted filtering, by default is disabled. This inverts interpretation of @option{threshold}
option. When enabled any half-cycle of samples with their local peak value below or same as
@option{threshold} option will be expanded otherwise it will be compressed.

@item link, l
Link channels when calculating gain applied to each filtered channel sample, by default is disabled.
When disabled each filtered channel gain calculation is independent, otherwise when this option
is enabled the minimum of all possible gains for each filtered channel is used.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section stereotools

This filter has some handy utilities to manage stereo signals, for converting
M/S stereo recordings to L/R signal while having control over the parameters
or spreading the stereo image of master track.

The filter accepts the following options:

@table @option
@item level_in
Set input level before filtering for both channels. Defaults is 1.
Allowed range is from 0.015625 to 64.

@item level_out
Set output level after filtering for both channels. Defaults is 1.
Allowed range is from 0.015625 to 64.

@item balance_in
Set input balance between both channels. Default is 0.
Allowed range is from -1 to 1.

@item balance_out
Set output balance between both channels. Default is 0.
Allowed range is from -1 to 1.

@item softclip
Enable softclipping. Results in analog distortion instead of harsh digital 0dB
clipping. Disabled by default.

@item mutel
Mute the left channel. Disabled by default.

@item muter
Mute the right channel. Disabled by default.

@item phasel
Change the phase of the left channel. Disabled by default.

@item phaser
Change the phase of the right channel. Disabled by default.

@item mode
Set stereo mode. Available values are:

@table @samp
@item lr>lr
Left/Right to Left/Right, this is default.

@item lr>ms
Left/Right to Mid/Side.

@item ms>lr
Mid/Side to Left/Right.

@item lr>ll
Left/Right to Left/Left.

@item lr>rr
Left/Right to Right/Right.

@item lr>l+r
Left/Right to Left + Right.

@item lr>rl
Left/Right to Right/Left.

@item ms>ll
Mid/Side to Left/Left.

@item ms>rr
Mid/Side to Right/Right.

@item ms>rl
Mid/Side to Right/Left.

@item lr>l-r
Left/Right to Left - Right.
@end table

@item slev
Set level of side signal. Default is 1.
Allowed range is from 0.015625 to 64.

@item sbal
Set balance of side signal. Default is 0.
Allowed range is from -1 to 1.

@item mlev
Set level of the middle signal. Default is 1.
Allowed range is from 0.015625 to 64.

@item mpan
Set middle signal pan. Default is 0. Allowed range is from -1 to 1.

@item base
Set stereo base between mono and inversed channels. Default is 0.
Allowed range is from -1 to 1.

@item delay
Set delay in milliseconds how much to delay left from right channel and
vice versa. Default is 0. Allowed range is from -20 to 20.

@item sclevel
Set S/C level. Default is 1. Allowed range is from 1 to 100.

@item phase
Set the stereo phase in degrees. Default is 0. Allowed range is from 0 to 360.

@item bmode_in, bmode_out
Set balance mode for balance_in/balance_out option.

Can be one of the following:

@table @samp
@item balance
Classic balance mode. Attenuate one channel at time.
Gain is raised up to 1.

@item amplitude
Similar as classic mode above but gain is raised up to 2.

@item power
Equal power distribution, from -6dB to +6dB range.
@end table
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@subsection Examples

@itemize
@item
Apply karaoke like effect:
@example
stereotools=mlev=0.015625
@end example

@item
Convert M/S signal to L/R:
@example
"stereotools=mode=ms>lr"
@end example
@end itemize

@section stereowiden

This filter enhance the stereo effect by suppressing signal common to both
channels and by delaying the signal of left into right and vice versa,
thereby widening the stereo effect.

The filter accepts the following options:

@table @option
@item delay
Time in milliseconds of the delay of left signal into right and vice versa.
Default is 20 milliseconds.

@item feedback
Amount of gain in delayed signal into right and vice versa. Gives a delay
effect of left signal in right output and vice versa which gives widening
effect. Default is 0.3.

@item crossfeed
Cross feed of left into right with inverted phase. This helps in suppressing
the mono. If the value is 1 it will cancel all the signal common to both
channels. Default is 0.3.

@item drymix
Set level of input signal of original channel. Default is 0.8.
@end table

@subsection Commands

This filter supports the all above options except @code{delay} as @ref{commands}.

@section superequalizer
Apply 18 band equalizer.

The filter accepts the following options:
@table @option
@item 1b
Set 65Hz band gain.
@item 2b
Set 92Hz band gain.
@item 3b
Set 131Hz band gain.
@item 4b
Set 185Hz band gain.
@item 5b
Set 262Hz band gain.
@item 6b
Set 370Hz band gain.
@item 7b
Set 523Hz band gain.
@item 8b
Set 740Hz band gain.
@item 9b
Set 1047Hz band gain.
@item 10b
Set 1480Hz band gain.
@item 11b
Set 2093Hz band gain.
@item 12b
Set 2960Hz band gain.
@item 13b
Set 4186Hz band gain.
@item 14b
Set 5920Hz band gain.
@item 15b
Set 8372Hz band gain.
@item 16b
Set 11840Hz band gain.
@item 17b
Set 16744Hz band gain.
@item 18b
Set 20000Hz band gain.
@end table

@section surround
Apply audio surround upmix filter.

This filter allows to produce multichannel output from audio stream.

The filter accepts the following options:

@table @option
@item chl_out
Set output channel layout. By default, this is @var{5.1}.

See @ref{channel layout syntax,,the Channel Layout section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the required syntax.

@item chl_in
Set input channel layout. By default, this is @var{stereo}.

See @ref{channel layout syntax,,the Channel Layout section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the required syntax.

@item level_in
Set input volume level. By default, this is @var{1}.

@item level_out
Set output volume level. By default, this is @var{1}.

@item lfe
Enable LFE channel output if output channel layout has it. By default, this is enabled.

@item lfe_low
Set LFE low cut off frequency. By default, this is @var{128} Hz.

@item lfe_high
Set LFE high cut off frequency. By default, this is @var{256} Hz.

@item lfe_mode
Set LFE mode, can be @var{add} or @var{sub}. Default is @var{add}.
In @var{add} mode, LFE channel is created from input audio and added to output.
In @var{sub} mode, LFE channel is created from input audio and added to output but
also all non-LFE output channels are subtracted with output LFE channel.

@item angle
Set angle of stereo surround transform, Allowed range is from @var{0} to @var{360}.
Default is @var{90}.

@item fc_in
Set front center input volume. By default, this is @var{1}.

@item fc_out
Set front center output volume. By default, this is @var{1}.

@item fl_in
Set front left input volume. By default, this is @var{1}.

@item fl_out
Set front left output volume. By default, this is @var{1}.

@item fr_in
Set front right input volume. By default, this is @var{1}.

@item fr_out
Set front right output volume. By default, this is @var{1}.

@item sl_in
Set side left input volume. By default, this is @var{1}.

@item sl_out
Set side left output volume. By default, this is @var{1}.

@item sr_in
Set side right input volume. By default, this is @var{1}.

@item sr_out
Set side right output volume. By default, this is @var{1}.

@item bl_in
Set back left input volume. By default, this is @var{1}.

@item bl_out
Set back left output volume. By default, this is @var{1}.

@item br_in
Set back right input volume. By default, this is @var{1}.

@item br_out
Set back right output volume. By default, this is @var{1}.

@item bc_in
Set back center input volume. By default, this is @var{1}.

@item bc_out
Set back center output volume. By default, this is @var{1}.

@item lfe_in
Set LFE input volume. By default, this is @var{1}.

@item lfe_out
Set LFE output volume. By default, this is @var{1}.

@item allx
Set spread usage of stereo image across X axis for all channels.

@item ally
Set spread usage of stereo image across Y axis for all channels.

@item fcx, flx, frx, blx, brx, slx, srx, bcx
Set spread usage of stereo image across X axis for each channel.

@item fcy, fly, fry, bly, bry, sly, sry, bcy
Set spread usage of stereo image across Y axis for each channel.

@item win_size
Set window size. Allowed range is from @var{1024} to @var{65536}. Default size is @var{4096}.

@item win_func
Set window function.

It accepts the following values:
@table @samp
@item rect
@item bartlett
@item hann, hanning
@item hamming
@item blackman
@item welch
@item flattop
@item bharris
@item bnuttall
@item bhann
@item sine
@item nuttall
@item lanczos
@item gauss
@item tukey
@item dolph
@item cauchy
@item parzen
@item poisson
@item bohman
@end table
Default is @code{hann}.

@item overlap
Set window overlap. If set to 1, the recommended overlap for selected
window function will be picked. Default is @code{0.5}.
@end table

@section treble, highshelf

Boost or cut treble (upper) frequencies of the audio using a two-pole
shelving filter with a response similar to that of a standard
hi-fi's tone-controls. This is also known as shelving equalisation (EQ).

The filter accepts the following options:

@table @option
@item gain, g
Give the gain at whichever is the lower of ~22 kHz and the
Nyquist frequency. Its useful range is about -20 (for a large cut)
to +20 (for a large boost). Beware of clipping when using a positive gain.

@item frequency, f
Set the filter's central frequency and so can be used
to extend or reduce the frequency range to be boosted or cut.
The default value is @code{3000} Hz.

@item width_type, t
Set method to specify band-width of filter.
@table @option
@item h
Hz
@item q
Q-Factor
@item o
octave
@item s
slope
@item k
kHz
@end table

@item width, w
Determine how steep is the filter's shelf transition.

@item poles, p
Set number of poles. Default is 2.

@item mix, m
How much to use filtered signal in output. Default is 1.
Range is between 0 and 1.

@item channels, c
Specify which channels to filter, by default all available are filtered.

@item normalize, n
Normalize biquad coefficients, by default is disabled.
Enabling it will normalize magnitude response at DC to 0dB.

@item transform, a
Set transform type of IIR filter.
@table @option
@item di
@item dii
@item tdii
@item latt
@end table

@item precision, r
Set precison of filtering.
@table @option
@item auto
Pick automatic sample format depending on surround filters.
@item s16
Always use signed 16-bit.
@item s32
Always use signed 32-bit.
@item f32
Always use float 32-bit.
@item f64
Always use float 64-bit.
@end table
@end table

@subsection Commands

This filter supports the following commands:
@table @option
@item frequency, f
Change treble frequency.
Syntax for the command is : "@var{frequency}"

@item width_type, t
Change treble width_type.
Syntax for the command is : "@var{width_type}"

@item width, w
Change treble width.
Syntax for the command is : "@var{width}"

@item gain, g
Change treble gain.
Syntax for the command is : "@var{gain}"

@item mix, m
Change treble mix.
Syntax for the command is : "@var{mix}"
@end table

@section tremolo

Sinusoidal amplitude modulation.

The filter accepts the following options:

@table @option
@item f
Modulation frequency in Hertz. Modulation frequencies in the subharmonic range
(20 Hz or lower) will result in a tremolo effect.
This filter may also be used as a ring modulator by specifying
a modulation frequency higher than 20 Hz.
Range is 0.1 - 20000.0. Default value is 5.0 Hz.

@item d
Depth of modulation as a percentage. Range is 0.0 - 1.0.
Default value is 0.5.
@end table

@section vibrato

Sinusoidal phase modulation.

The filter accepts the following options:

@table @option
@item f
Modulation frequency in Hertz.
Range is 0.1 - 20000.0. Default value is 5.0 Hz.

@item d
Depth of modulation as a percentage. Range is 0.0 - 1.0.
Default value is 0.5.
@end table

@section volume

Adjust the input audio volume.

It accepts the following parameters:
@table @option

@item volume
Set audio volume expression.

Output values are clipped to the maximum value.

The output audio volume is given by the relation:
@example
@var{output_volume} = @var{volume} * @var{input_volume}
@end example

The default value for @var{volume} is "1.0".

@item precision
This parameter represents the mathematical precision.

It determines which input sample formats will be allowed, which affects the
precision of the volume scaling.

@table @option
@item fixed
8-bit fixed-point; this limits input sample format to U8, S16, and S32.
@item float
32-bit floating-point; this limits input sample format to FLT. (default)
@item double
64-bit floating-point; this limits input sample format to DBL.
@end table

@item replaygain
Choose the behaviour on encountering ReplayGain side data in input frames.

@table @option
@item drop
Remove ReplayGain side data, ignoring its contents (the default).

@item ignore
Ignore ReplayGain side data, but leave it in the frame.

@item track
Prefer the track gain, if present.

@item album
Prefer the album gain, if present.
@end table

@item replaygain_preamp
Pre-amplification gain in dB to apply to the selected replaygain gain.

Default value for @var{replaygain_preamp} is 0.0.

@item replaygain_noclip
Prevent clipping by limiting the gain applied.

Default value for @var{replaygain_noclip} is 1.

@item eval
Set when the volume expression is evaluated.

It accepts the following values:
@table @samp
@item once
only evaluate expression once during the filter initialization, or
when the @samp{volume} command is sent

@item frame
evaluate expression for each incoming frame
@end table

Default value is @samp{once}.
@end table

The volume expression can contain the following parameters.

@table @option
@item n
frame number (starting at zero)
@item nb_channels
number of channels
@item nb_consumed_samples
number of samples consumed by the filter
@item nb_samples
number of samples in the current frame
@item pos
original frame position in the file
@item pts
frame PTS
@item sample_rate
sample rate
@item startpts
PTS at start of stream
@item startt
time at start of stream
@item t
frame time
@item tb
timestamp timebase
@item volume
last set volume value
@end table

Note that when @option{eval} is set to @samp{once} only the
@var{sample_rate} and @var{tb} variables are available, all other
variables will evaluate to NAN.

@subsection Commands

This filter supports the following commands:
@table @option
@item volume
Modify the volume expression.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.
@end table

@subsection Examples

@itemize
@item
Halve the input audio volume:
@example
volume=volume=0.5
volume=volume=1/2
volume=volume=-6.0206dB
@end example

In all the above example the named key for @option{volume} can be
omitted, for example like in:
@example
volume=0.5
@end example

@item
Increase input audio power by 6 decibels using fixed-point precision:
@example
volume=volume=6dB:precision=fixed
@end example

@item
Fade volume after time 10 with an annihilation period of 5 seconds:
@example
volume='if(lt(t,10),1,max(1-(t-10)/5,0))':eval=frame
@end example
@end itemize

@section volumedetect

Detect the volume of the input video.

The filter has no parameters. The input is not modified. Statistics about
the volume will be printed in the log when the input stream end is reached.

In particular it will show the mean volume (root mean square), maximum
volume (on a per-sample basis), and the beginning of a histogram of the
registered volume values (from the maximum value to a cumulated 1/1000 of
the samples).

All volumes are in decibels relative to the maximum PCM value.

@subsection Examples

Here is an excerpt of the output:
@example
[Parsed_volumedetect_0 @ 0xa23120] mean_volume: -27 dB
[Parsed_volumedetect_0 @ 0xa23120] max_volume: -4 dB
[Parsed_volumedetect_0 @ 0xa23120] histogram_4db: 6
[Parsed_volumedetect_0 @ 0xa23120] histogram_5db: 62
[Parsed_volumedetect_0 @ 0xa23120] histogram_6db: 286
[Parsed_volumedetect_0 @ 0xa23120] histogram_7db: 1042
[Parsed_volumedetect_0 @ 0xa23120] histogram_8db: 2551
[Parsed_volumedetect_0 @ 0xa23120] histogram_9db: 4609
[Parsed_volumedetect_0 @ 0xa23120] histogram_10db: 8409
@end example

It means that:
@itemize
@item
The mean square energy is approximately -27 dB, or 10^-2.7.
@item
The largest sample is at -4 dB, or more precisely between -4 dB and -5 dB.
@item
There are 6 samples at -4 dB, 62 at -5 dB, 286 at -6 dB, etc.
@end itemize

In other words, raising the volume by +4 dB does not cause any clipping,
raising it by +5 dB causes clipping for 6 samples, etc.

@c man end AUDIO FILTERS

@chapter Audio Sources
@c man begin AUDIO SOURCES

Below is a description of the currently available audio sources.

@section abuffer

Buffer audio frames, and make them available to the filter chain.

This source is mainly intended for a programmatic use, in particular
through the interface defined in @file{libavfilter/buffersrc.h}.

It accepts the following parameters:
@table @option

@item time_base
The timebase which will be used for timestamps of submitted frames. It must be
either a floating-point number or in @var{numerator}/@var{denominator} form.

@item sample_rate
The sample rate of the incoming audio buffers.

@item sample_fmt
The sample format of the incoming audio buffers.
Either a sample format name or its corresponding integer representation from
the enum AVSampleFormat in @file{libavutil/samplefmt.h}

@item channel_layout
The channel layout of the incoming audio buffers.
Either a channel layout name from channel_layout_map in
@file{libavutil/channel_layout.c} or its corresponding integer representation
from the AV_CH_LAYOUT_* macros in @file{libavutil/channel_layout.h}

@item channels
The number of channels of the incoming audio buffers.
If both @var{channels} and @var{channel_layout} are specified, then they
must be consistent.

@end table

@subsection Examples

@example
abuffer=sample_rate=44100:sample_fmt=s16p:channel_layout=stereo
@end example

will instruct the source to accept planar 16bit signed stereo at 44100Hz.
Since the sample format with name "s16p" corresponds to the number
6 and the "stereo" channel layout corresponds to the value 0x3, this is
equivalent to:
@example
abuffer=sample_rate=44100:sample_fmt=6:channel_layout=0x3
@end example

@section aevalsrc

Generate an audio signal specified by an expression.

This source accepts in input one or more expressions (one for each
channel), which are evaluated and used to generate a corresponding
audio signal.

This source accepts the following options:

@table @option
@item exprs
Set the '|'-separated expressions list for each separate channel. In case the
@option{channel_layout} option is not specified, the selected channel layout
depends on the number of provided expressions. Otherwise the last
specified expression is applied to the remaining output channels.

@item channel_layout, c
Set the channel layout. The number of channels in the specified layout
must be equal to the number of specified expressions.

@item duration, d
Set the minimum duration of the sourced audio. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.
Note that the resulting duration may be greater than the specified
duration, as the generated audio is always cut at the end of a
complete frame.

If not specified, or the expressed duration is negative, the audio is
supposed to be generated forever.

@item nb_samples, n
Set the number of samples per channel per each output frame,
default to 1024.

@item sample_rate, s
Specify the sample rate, default to 44100.
@end table

Each expression in @var{exprs} can contain the following constants:

@table @option
@item n
number of the evaluated sample, starting from 0

@item t
time of the evaluated sample expressed in seconds, starting from 0

@item s
sample rate

@end table

@subsection Examples

@itemize
@item
Generate silence:
@example
aevalsrc=0
@end example

@item
Generate a sin signal with frequency of 440 Hz, set sample rate to
8000 Hz:
@example
aevalsrc="sin(440*2*PI*t):s=8000"
@end example

@item
Generate a two channels signal, specify the channel layout (Front
Center + Back Center) explicitly:
@example
aevalsrc="sin(420*2*PI*t)|cos(430*2*PI*t):c=FC|BC"
@end example

@item
Generate white noise:
@example
aevalsrc="-2+random(0)"
@end example

@item
Generate an amplitude modulated signal:
@example
aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
@end example

@item
Generate 2.5 Hz binaural beats on a 360 Hz carrier:
@example
aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)"
@end example

@end itemize

@section afirsrc

Generate a FIR coefficients using frequency sampling method.

The resulting stream can be used with @ref{afir} filter for filtering the audio signal.

The filter accepts the following options:

@table @option
@item taps, t
Set number of filter coefficents in output audio stream.
Default value is 1025.

@item frequency, f
Set frequency points from where magnitude and phase are set.
This must be in non decreasing order, and first element must be 0, while last element
must be 1. Elements are separated by white spaces.

@item magnitude, m
Set magnitude value for every frequency point set by @option{frequency}.
Number of values must be same as number of frequency points.
Values are separated by white spaces.

@item phase, p
Set phase value for every frequency point set by @option{frequency}.
Number of values must be same as number of frequency points.
Values are separated by white spaces.

@item sample_rate, r
Set sample rate, default is 44100.

@item nb_samples, n
Set number of samples per each frame. Default is 1024.

@item win_func, w
Set window function. Default is blackman.
@end table

@section anullsrc

The null audio source, return unprocessed audio frames. It is mainly useful
as a template and to be employed in analysis / debugging tools, or as
the source for filters which ignore the input data (for example the sox
synth filter).

This source accepts the following options:

@table @option

@item channel_layout, cl

Specifies the channel layout, and can be either an integer or a string
representing a channel layout. The default value of @var{channel_layout}
is "stereo".

Check the channel_layout_map definition in
@file{libavutil/channel_layout.c} for the mapping between strings and
channel layout values.

@item sample_rate, r
Specifies the sample rate, and defaults to 44100.

@item nb_samples, n
Set the number of samples per requested frames.

@item duration, d
Set the duration of the sourced audio. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.

If not specified, or the expressed duration is negative, the audio is
supposed to be generated forever.
@end table

@subsection Examples

@itemize
@item
Set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO.
@example
anullsrc=r=48000:cl=4
@end example

@item
Do the same operation with a more obvious syntax:
@example
anullsrc=r=48000:cl=mono
@end example
@end itemize

All the parameters need to be explicitly defined.

@section flite

Synthesize a voice utterance using the libflite library.

To enable compilation of this filter you need to configure FFmpeg with
@code{--enable-libflite}.

Note that versions of the flite library prior to 2.0 are not thread-safe.

The filter accepts the following options:

@table @option

@item list_voices
If set to 1, list the names of the available voices and exit
immediately. Default value is 0.

@item nb_samples, n
Set the maximum number of samples per frame. Default value is 512.

@item textfile
Set the filename containing the text to speak.

@item text
Set the text to speak.

@item voice, v
Set the voice to use for the speech synthesis. Default value is
@code{kal}. See also the @var{list_voices} option.
@end table

@subsection Examples

@itemize
@item
Read from file @file{speech.txt}, and synthesize the text using the
standard flite voice:
@example
flite=textfile=speech.txt
@end example

@item
Read the specified text selecting the @code{slt} voice:
@example
flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
@end example

@item
Input text to ffmpeg:
@example
ffmpeg -f lavfi -i flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
@end example

@item
Make @file{ffplay} speak the specified text, using @code{flite} and
the @code{lavfi} device:
@example
ffplay -f lavfi flite=text='No more be grieved for which that thou hast done.'
@end example
@end itemize

For more information about libflite, check:
@url{http://www.festvox.org/flite/}

@section anoisesrc

Generate a noise audio signal.

The filter accepts the following options:

@table @option
@item sample_rate, r
Specify the sample rate. Default value is 48000 Hz.

@item amplitude, a
Specify the amplitude (0.0 - 1.0) of the generated audio stream. Default value
is 1.0.

@item duration, d
Specify the duration of the generated audio stream. Not specifying this option
results in noise with an infinite length.

@item color, colour, c
Specify the color of noise. Available noise colors are white, pink, brown,
blue, violet and velvet. Default color is white.

@item seed, s
Specify a value used to seed the PRNG.

@item nb_samples, n
Set the number of samples per each output frame, default is 1024.
@end table

@subsection Examples

@itemize

@item
Generate 60 seconds of pink noise, with a 44.1 kHz sampling rate and an amplitude of 0.5:
@example
anoisesrc=d=60:c=pink:r=44100:a=0.5
@end example
@end itemize

@section hilbert

Generate odd-tap Hilbert transform FIR coefficients.

The resulting stream can be used with @ref{afir} filter for phase-shifting
the signal by 90 degrees.

This is used in many matrix coding schemes and for analytic signal generation.
The process is often written as a multiplication by i (or j), the imaginary unit.

The filter accepts the following options:

@table @option

@item sample_rate, s
Set sample rate, default is 44100.

@item taps, t
Set length of FIR filter, default is 22051.

@item nb_samples, n
Set number of samples per each frame.

@item win_func, w
Set window function to be used when generating FIR coefficients.
@end table

@section sinc

Generate a sinc kaiser-windowed low-pass, high-pass, band-pass, or band-reject FIR coefficients.

The resulting stream can be used with @ref{afir} filter for filtering the audio signal.

The filter accepts the following options:

@table @option
@item sample_rate, r
Set sample rate, default is 44100.

@item nb_samples, n
Set number of samples per each frame. Default is 1024.

@item hp
Set high-pass frequency. Default is 0.

@item lp
Set low-pass frequency. Default is 0.
If high-pass frequency is lower than low-pass frequency and low-pass frequency
is higher than 0 then filter will create band-pass filter coefficients,
otherwise band-reject filter coefficients.

@item phase
Set filter phase response. Default is 50. Allowed range is from 0 to 100.

@item beta
Set Kaiser window beta.

@item att
Set stop-band attenuation. Default is 120dB, allowed range is from 40 to 180 dB.

@item round
Enable rounding, by default is disabled.

@item hptaps
Set number of taps for high-pass filter.

@item lptaps
Set number of taps for low-pass filter.
@end table

@section sine

Generate an audio signal made of a sine wave with amplitude 1/8.

The audio signal is bit-exact.

The filter accepts the following options:

@table @option

@item frequency, f
Set the carrier frequency. Default is 440 Hz.

@item beep_factor, b
Enable a periodic beep every second with frequency @var{beep_factor} times
the carrier frequency. Default is 0, meaning the beep is disabled.

@item sample_rate, r
Specify the sample rate, default is 44100.

@item duration, d
Specify the duration of the generated audio stream.

@item samples_per_frame
Set the number of samples per output frame.

The expression can contain the following constants:

@table @option
@item n
The (sequential) number of the output audio frame, starting from 0.

@item pts
The PTS (Presentation TimeStamp) of the output audio frame,
expressed in @var{TB} units.

@item t
The PTS of the output audio frame, expressed in seconds.

@item TB
The timebase of the output audio frames.
@end table

Default is @code{1024}.
@end table

@subsection Examples

@itemize

@item
Generate a simple 440 Hz sine wave:
@example
sine
@end example

@item
Generate a 220 Hz sine wave with a 880 Hz beep each second, for 5 seconds:
@example
sine=220:4:d=5
sine=f=220:b=4:d=5
sine=frequency=220:beep_factor=4:duration=5
@end example

@item
Generate a 1 kHz sine wave following @code{1602,1601,1602,1601,1602} NTSC
pattern:
@example
sine=1000:samples_per_frame='st(0,mod(n,5)); 1602-not(not(eq(ld(0),1)+eq(ld(0),3)))'
@end example
@end itemize

@c man end AUDIO SOURCES

@chapter Audio Sinks
@c man begin AUDIO SINKS

Below is a description of the currently available audio sinks.

@section abuffersink

Buffer audio frames, and make them available to the end of filter chain.

This sink is mainly intended for programmatic use, in particular
through the interface defined in @file{libavfilter/buffersink.h}
or the options system.

It accepts a pointer to an AVABufferSinkContext structure, which
defines the incoming buffers' formats, to be passed as the opaque
parameter to @code{avfilter_init_filter} for initialization.
@section anullsink

Null audio sink; do absolutely nothing with the input audio. It is
mainly useful as a template and for use in analysis / debugging
tools.

@c man end AUDIO SINKS

@chapter Video Filters
@c man begin VIDEO FILTERS

When you configure your FFmpeg build, you can disable any of the
existing filters using @code{--disable-filters}.
The configure output will show the video filters included in your
build.

Below is a description of the currently available video filters.

@section addroi

Mark a region of interest in a video frame.

The frame data is passed through unchanged, but metadata is attached
to the frame indicating regions of interest which can affect the
behaviour of later encoding.  Multiple regions can be marked by
applying the filter multiple times.

@table @option
@item x
Region distance in pixels from the left edge of the frame.
@item y
Region distance in pixels from the top edge of the frame.
@item w
Region width in pixels.
@item h
Region height in pixels.

The parameters @var{x}, @var{y}, @var{w} and @var{h} are expressions,
and may contain the following variables:
@table @option
@item iw
Width of the input frame.
@item ih
Height of the input frame.
@end table

@item qoffset
Quantisation offset to apply within the region.

This must be a real value in the range -1 to +1.  A value of zero
indicates no quality change.  A negative value asks for better quality
(less quantisation), while a positive value asks for worse quality
(greater quantisation).

The range is calibrated so that the extreme values indicate the
largest possible offset - if the rest of the frame is encoded with the
worst possible quality, an offset of -1 indicates that this region
should be encoded with the best possible quality anyway.  Intermediate
values are then interpolated in some codec-dependent way.

For example, in 10-bit H.264 the quantisation parameter varies between
-12 and 51.  A typical qoffset value of -1/10 therefore indicates that
this region should be encoded with a QP around one-tenth of the full
range better than the rest of the frame.  So, if most of the frame
were to be encoded with a QP of around 30, this region would get a QP
of around 24 (an offset of approximately -1/10 * (51 - -12) = -6.3).
An extreme value of -1 would indicate that this region should be
encoded with the best possible quality regardless of the treatment of
the rest of the frame - that is, should be encoded at a QP of -12.
@item clear
If set to true, remove any existing regions of interest marked on the
frame before adding the new one.
@end table

@subsection Examples

@itemize
@item
Mark the centre quarter of the frame as interesting.
@example
addroi=iw/4:ih/4:iw/2:ih/2:-1/10
@end example
@item
Mark the 100-pixel-wide region on the left edge of the frame as very
uninteresting (to be encoded at much lower quality than the rest of
the frame).
@example
addroi=0:0:100:ih:+1/5
@end example
@end itemize

@section alphaextract

Extract the alpha component from the input as a grayscale video. This
is especially useful with the @var{alphamerge} filter.

@section alphamerge

Add or replace the alpha component of the primary input with the
grayscale value of a second input. This is intended for use with
@var{alphaextract} to allow the transmission or storage of frame
sequences that have alpha in a format that doesn't support an alpha
channel.

For example, to reconstruct full frames from a normal YUV-encoded video
and a separate video created with @var{alphaextract}, you might use:
@example
movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]
@end example

@section amplify

Amplify differences between current pixel and pixels of adjacent frames in
same pixel location.

This filter accepts the following options:

@table @option
@item radius
Set frame radius. Default is 2. Allowed range is from 1 to 63.
For example radius of 3 will instruct filter to calculate average of 7 frames.

@item factor
Set factor to amplify difference. Default is 2. Allowed range is from 0 to 65535.

@item threshold
Set threshold for difference amplification. Any difference greater or equal to
this value will not alter source pixel. Default is 10.
Allowed range is from 0 to 65535.

@item tolerance
Set tolerance for difference amplification. Any difference lower to
this value will not alter source pixel. Default is 0.
Allowed range is from 0 to 65535.

@item low
Set lower limit for changing source pixel. Default is 65535. Allowed range is from 0 to 65535.
This option controls maximum possible value that will decrease source pixel value.

@item high
Set high limit for changing source pixel. Default is 65535. Allowed range is from 0 to 65535.
This option controls maximum possible value that will increase source pixel value.

@item planes
Set which planes to filter. Default is all. Allowed range is from 0 to 15.
@end table

@subsection Commands

This filter supports the following @ref{commands} that corresponds to option of same name:
@table @option
@item factor
@item threshold
@item tolerance
@item low
@item high
@item planes
@end table

@section ass

Same as the @ref{subtitles} filter, except that it doesn't require libavcodec
and libavformat to work. On the other hand, it is limited to ASS (Advanced
Substation Alpha) subtitles files.

This filter accepts the following option in addition to the common options from
the @ref{subtitles} filter:

@table @option
@item shaping
Set the shaping engine

Available values are:
@table @samp
@item auto
The default libass shaping engine, which is the best available.
@item simple
Fast, font-agnostic shaper that can do only substitutions
@item complex
Slower shaper using OpenType for substitutions and positioning
@end table

The default is @code{auto}.
@end table

@section atadenoise
Apply an Adaptive Temporal Averaging Denoiser to the video input.

The filter accepts the following options:

@table @option
@item 0a
Set threshold A for 1st plane. Default is 0.02.
Valid range is 0 to 0.3.

@item 0b
Set threshold B for 1st plane. Default is 0.04.
Valid range is 0 to 5.

@item 1a
Set threshold A for 2nd plane. Default is 0.02.
Valid range is 0 to 0.3.

@item 1b
Set threshold B for 2nd plane. Default is 0.04.
Valid range is 0 to 5.

@item 2a
Set threshold A for 3rd plane. Default is 0.02.
Valid range is 0 to 0.3.

@item 2b
Set threshold B for 3rd plane. Default is 0.04.
Valid range is 0 to 5.

Threshold A is designed to react on abrupt changes in the input signal and
threshold B is designed to react on continuous changes in the input signal.

@item s
Set number of frames filter will use for averaging. Default is 9. Must be odd
number in range [5, 129].

@item p
Set what planes of frame filter will use for averaging. Default is all.

@item a
Set what variant of algorithm filter will use for averaging. Default is @code{p} parallel.
Alternatively can be set to @code{s} serial.

Parallel can be faster then serial, while other way around is never true.
Parallel will abort early on first change being greater then thresholds, while serial
will continue processing other side of frames if they are equal or below thresholds.

@item 0s
@item 1s
@item 2s
Set sigma for 1st plane, 2nd plane or 3rd plane. Default is 32767.
Valid range is from 0 to 32767.
This options controls weight for each pixel in radius defined by size.
Default value means every pixel have same weight.
Setting this option to 0 effectively disables filtering.
@end table

@subsection Commands
This filter supports same @ref{commands} as options except option @code{s}.
The command accepts the same syntax of the corresponding option.

@section avgblur

Apply average blur filter.

The filter accepts the following options:

@table @option
@item sizeX
Set horizontal radius size.

@item planes
Set which planes to filter. By default all planes are filtered.

@item sizeY
Set vertical radius size, if zero it will be same as @code{sizeX}.
Default is @code{0}.
@end table

@subsection Commands
This filter supports same commands as options.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@section bbox

Compute the bounding box for the non-black pixels in the input frame
luminance plane.

This filter computes the bounding box containing all the pixels with a
luminance value greater than the minimum allowed value.
The parameters describing the bounding box are printed on the filter
log.

The filter accepts the following option:

@table @option
@item min_val
Set the minimal luminance value. Default is @code{16}.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section bilateral
Apply bilateral filter, spatial smoothing while preserving edges.

The filter accepts the following options:
@table @option
@item sigmaS
Set sigma of gaussian function to calculate spatial weight.
Allowed range is 0 to 512. Default is 0.1.

@item sigmaR
Set sigma of gaussian function to calculate range weight.
Allowed range is 0 to 1. Default is 0.1.

@item planes
Set planes to filter. Default is first only.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section bitplanenoise

Show and measure bit plane noise.

The filter accepts the following options:

@table @option
@item bitplane
Set which plane to analyze. Default is @code{1}.

@item filter
Filter out noisy pixels from @code{bitplane} set above.
Default is disabled.
@end table

@section blackdetect

Detect video intervals that are (almost) completely black. Can be
useful to detect chapter transitions, commercials, or invalid
recordings.

The filter outputs its detection analysis to both the log as well as
frame metadata. If a black segment of at least the specified minimum
duration is found, a line with the start and end timestamps as well
as duration is printed to the log with level @code{info}. In addition,
a log line with level @code{debug} is printed per frame showing the
black amount detected for that frame.

The filter also attaches metadata to the first frame of a black
segment with key @code{lavfi.black_start} and to the first frame
after the black segment ends with key @code{lavfi.black_end}. The
value is the frame's timestamp. This metadata is added regardless
of the minimum duration specified.

The filter accepts the following options:

@table @option
@item black_min_duration, d
Set the minimum detected black duration expressed in seconds. It must
be a non-negative floating point number.

Default value is 2.0.

@item picture_black_ratio_th, pic_th
Set the threshold for considering a picture "black".
Express the minimum value for the ratio:
@example
@var{nb_black_pixels} / @var{nb_pixels}
@end example

for which a picture is considered black.
Default value is 0.98.

@item pixel_black_th, pix_th
Set the threshold for considering a pixel "black".

The threshold expresses the maximum pixel luminance value for which a
pixel is considered "black". The provided value is scaled according to
the following equation:
@example
@var{absolute_threshold} = @var{luminance_minimum_value} + @var{pixel_black_th} * @var{luminance_range_size}
@end example

@var{luminance_range_size} and @var{luminance_minimum_value} depend on
the input video format, the range is [0-255] for YUV full-range
formats and [16-235] for YUV non full-range formats.

Default value is 0.10.
@end table

The following example sets the maximum pixel threshold to the minimum
value, and detects only black intervals of 2 or more seconds:
@example
blackdetect=d=2:pix_th=0.00
@end example

@section blackframe

Detect frames that are (almost) completely black. Can be useful to
detect chapter transitions or commercials. Output lines consist of
the frame number of the detected frame, the percentage of blackness,
the position in the file if known or -1 and the timestamp in seconds.

In order to display the output lines, you need to set the loglevel at
least to the AV_LOG_INFO value.

This filter exports frame metadata @code{lavfi.blackframe.pblack}.
The value represents the percentage of pixels in the picture that
are below the threshold value.

It accepts the following parameters:

@table @option

@item amount
The percentage of the pixels that have to be below the threshold; it defaults to
@code{98}.

@item threshold, thresh
The threshold below which a pixel value is considered black; it defaults to
@code{32}.

@end table

@anchor{blend}
@section blend

Blend two video frames into each other.

The @code{blend} filter takes two input streams and outputs one
stream, the first input is the "top" layer and second input is
"bottom" layer.  By default, the output terminates when the longest input terminates.

The @code{tblend} (time blend) filter takes two consecutive frames
from one single stream, and outputs the result obtained by blending
the new frame on top of the old frame.

A description of the accepted options follows.

@table @option
@item c0_mode
@item c1_mode
@item c2_mode
@item c3_mode
@item all_mode
Set blend mode for specific pixel component or all pixel components in case
of @var{all_mode}. Default value is @code{normal}.

Available values for component modes are:
@table @samp
@item addition
@item grainmerge
@item and
@item average
@item burn
@item darken
@item difference
@item grainextract
@item divide
@item dodge
@item freeze
@item exclusion
@item extremity
@item glow
@item hardlight
@item hardmix
@item heat
@item lighten
@item linearlight
@item multiply
@item multiply128
@item negation
@item normal
@item or
@item overlay
@item phoenix
@item pinlight
@item reflect
@item screen
@item softlight
@item subtract
@item vividlight
@item xor
@end table

@item c0_opacity
@item c1_opacity
@item c2_opacity
@item c3_opacity
@item all_opacity
Set blend opacity for specific pixel component or all pixel components in case
of @var{all_opacity}. Only used in combination with pixel component blend modes.

@item c0_expr
@item c1_expr
@item c2_expr
@item c3_expr
@item all_expr
Set blend expression for specific pixel component or all pixel components in case
of @var{all_expr}. Note that related mode options will be ignored if those are set.

The expressions can use the following variables:

@table @option
@item N
The sequential number of the filtered frame, starting from @code{0}.

@item X
@item Y
the coordinates of the current sample

@item W
@item H
the width and height of currently filtered plane

@item SW
@item SH
Width and height scale for the plane being filtered. It is the
ratio between the dimensions of the current plane to the luma plane,
e.g. for a @code{yuv420p} frame, the values are @code{1,1} for
the luma plane and @code{0.5,0.5} for the chroma planes.

@item T
Time of the current frame, expressed in seconds.

@item TOP, A
Value of pixel component at current location for first video frame (top layer).

@item BOTTOM, B
Value of pixel component at current location for second video frame (bottom layer).
@end table
@end table

The @code{blend} filter also supports the @ref{framesync} options.

@subsection Examples

@itemize
@item
Apply transition from bottom layer to top layer in first 10 seconds:
@example
blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10)))'
@end example

@item
Apply linear horizontal transition from top layer to bottom layer:
@example
blend=all_expr='A*(X/W)+B*(1-X/W)'
@end example

@item
Apply 1x1 checkerboard effect:
@example
blend=all_expr='if(eq(mod(X,2),mod(Y,2)),A,B)'
@end example

@item
Apply uncover left effect:
@example
blend=all_expr='if(gte(N*SW+X,W),A,B)'
@end example

@item
Apply uncover down effect:
@example
blend=all_expr='if(gte(Y-N*SH,0),A,B)'
@end example

@item
Apply uncover up-left effect:
@example
blend=all_expr='if(gte(T*SH*40+Y,H)*gte((T*40*SW+X)*W/H,W),A,B)'
@end example

@item
Split diagonally video and shows top and bottom layer on each side:
@example
blend=all_expr='if(gt(X,Y*(W/H)),A,B)'
@end example

@item
Display differences between the current and the previous frame:
@example
tblend=all_mode=grainextract
@end example
@end itemize

@subsection Commands
This filter supports same @ref{commands} as options.

@section bm3d

Denoise frames using Block-Matching 3D algorithm.

The filter accepts the following options.

@table @option
@item sigma
Set denoising strength. Default value is 1.
Allowed range is from 0 to 999.9.
The denoising algorithm is very sensitive to sigma, so adjust it
according to the source.

@item block
Set local patch size. This sets dimensions in 2D.

@item bstep
Set sliding step for processing blocks. Default value is 4.
Allowed range is from 1 to 64.
Smaller values allows processing more reference blocks and is slower.

@item group
Set maximal number of similar blocks for 3rd dimension. Default value is 1.
When set to 1, no block matching is done. Larger values allows more blocks
in single group.
Allowed range is from 1 to 256.

@item range
Set radius for search block matching. Default is 9.
Allowed range is from 1 to INT32_MAX.

@item mstep
Set step between two search locations for block matching. Default is 1.
Allowed range is from 1 to 64. Smaller is slower.

@item thmse
Set threshold of mean square error for block matching. Valid range is 0 to
INT32_MAX.

@item hdthr
Set thresholding parameter for hard thresholding in 3D transformed domain.
Larger values results in stronger hard-thresholding filtering in frequency
domain.

@item estim
Set filtering estimation mode. Can be @code{basic} or @code{final}.
Default is @code{basic}.

@item ref
If enabled, filter will use 2nd stream for block matching.
Default is disabled for @code{basic} value of @var{estim} option,
and always enabled if value of @var{estim} is @code{final}.

@item planes
Set planes to filter. Default is all available except alpha.
@end table

@subsection Examples

@itemize
@item
Basic filtering with bm3d:
@example
bm3d=sigma=3:block=4:bstep=2:group=1:estim=basic
@end example

@item
Same as above, but filtering only luma:
@example
bm3d=sigma=3:block=4:bstep=2:group=1:estim=basic:planes=1
@end example

@item
Same as above, but with both estimation modes:
@example
split[a][b],[a]bm3d=sigma=3:block=4:bstep=2:group=1:estim=basic[a],[b][a]bm3d=sigma=3:block=4:bstep=2:group=16:estim=final:ref=1
@end example

@item
Same as above, but prefilter with @ref{nlmeans} filter instead:
@example
split[a][b],[a]nlmeans=s=3:r=7:p=3[a],[b][a]bm3d=sigma=3:block=4:bstep=2:group=16:estim=final:ref=1
@end example
@end itemize

@section boxblur

Apply a boxblur algorithm to the input video.

It accepts the following parameters:

@table @option

@item luma_radius, lr
@item luma_power, lp
@item chroma_radius, cr
@item chroma_power, cp
@item alpha_radius, ar
@item alpha_power, ap

@end table

A description of the accepted options follows.

@table @option
@item luma_radius, lr
@item chroma_radius, cr
@item alpha_radius, ar
Set an expression for the box radius in pixels used for blurring the
corresponding input plane.

The radius value must be a non-negative number, and must not be
greater than the value of the expression @code{min(w,h)/2} for the
luma and alpha planes, and of @code{min(cw,ch)/2} for the chroma
planes.

Default value for @option{luma_radius} is "2". If not specified,
@option{chroma_radius} and @option{alpha_radius} default to the
corresponding value set for @option{luma_radius}.

The expressions can contain the following constants:
@table @option
@item w
@item h
The input width and height in pixels.

@item cw
@item ch
The input chroma image width and height in pixels.

@item hsub
@item vsub
The horizontal and vertical chroma subsample values. For example, for the
pixel format "yuv422p", @var{hsub} is 2 and @var{vsub} is 1.
@end table

@item luma_power, lp
@item chroma_power, cp
@item alpha_power, ap
Specify how many times the boxblur filter is applied to the
corresponding plane.

Default value for @option{luma_power} is 2. If not specified,
@option{chroma_power} and @option{alpha_power} default to the
corresponding value set for @option{luma_power}.

A value of 0 will disable the effect.
@end table

@subsection Examples

@itemize
@item
Apply a boxblur filter with the luma, chroma, and alpha radii
set to 2:
@example
boxblur=luma_radius=2:luma_power=1
boxblur=2:1
@end example

@item
Set the luma radius to 2, and alpha and chroma radius to 0:
@example
boxblur=2:1:cr=0:ar=0
@end example

@item
Set the luma and chroma radii to a fraction of the video dimension:
@example
boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
@end example
@end itemize

@section bwdif

Deinterlace the input video ("bwdif" stands for "Bob Weaver
Deinterlacing Filter").

Motion adaptive deinterlacing based on yadif with the use of w3fdif and cubic
interpolation algorithms.
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 cas

Apply Contrast Adaptive Sharpen filter to video stream.

The filter accepts the following options:

@table @option
@item strength
Set the sharpening strength. Default value is 0.

@item planes
Set planes to filter. Default value is to filter all
planes except alpha plane.
@end table

@subsection Commands
This filter supports same @ref{commands} as options.

@section chromahold
Remove all color information for all colors except for certain one.

The filter accepts the following options:

@table @option
@item color
The color which will not be replaced with neutral chroma.

@item similarity
Similarity percentage with the above color.
0.01 matches only the exact key color, while 1.0 matches everything.

@item blend
Blend percentage.
0.0 makes pixels either fully gray, or not gray at all.
Higher values result in more preserved color.

@item yuv
Signals that the color passed is already in YUV instead of RGB.

Literal colors like "green" or "red" don't make sense with this enabled anymore.
This can be used to pass exact YUV values as hexadecimal numbers.
@end table

@subsection Commands
This filter supports same @ref{commands} as options.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@section chromakey
YUV colorspace color/chroma keying.

The filter accepts the following options:

@table @option
@item color
The color which will be replaced with transparency.

@item similarity
Similarity percentage with the key color.

0.01 matches only the exact key color, while 1.0 matches everything.

@item blend
Blend percentage.

0.0 makes pixels either fully transparent, or not transparent at all.

Higher values result in semi-transparent pixels, with a higher transparency
the more similar the pixels color is to the key color.

@item yuv
Signals that the color passed is already in YUV instead of RGB.

Literal colors like "green" or "red" don't make sense with this enabled anymore.
This can be used to pass exact YUV values as hexadecimal numbers.
@end table

@subsection Commands
This filter supports same @ref{commands} as options.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@subsection Examples

@itemize
@item
Make every green pixel in the input image transparent:
@example
ffmpeg -i input.png -vf chromakey=green out.png
@end example

@item
Overlay a greenscreen-video on top of a static black background.
@example
ffmpeg -f lavfi -i color=c=black:s=1280x720 -i video.mp4 -shortest -filter_complex "[1:v]chromakey=0x70de77:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mkv
@end example
@end itemize

@section chromanr
Reduce chrominance noise.

The filter accepts the following options:

@table @option
@item thres
Set threshold for averaging chrominance values.
Sum of absolute difference of Y, U and V pixel components of current
pixel and neighbour pixels lower than this threshold will be used in
averaging. Luma component is left unchanged and is copied to output.
Default value is 30. Allowed range is from 1 to 200.

@item sizew
Set horizontal radius of rectangle used for averaging.
Allowed range is from 1 to 100. Default value is 5.

@item sizeh
Set vertical radius of rectangle used for averaging.
Allowed range is from 1 to 100. Default value is 5.

@item stepw
Set horizontal step when averaging. Default value is 1.
Allowed range is from 1 to 50.
Mostly useful to speed-up filtering.

@item steph
Set vertical step when averaging. Default value is 1.
Allowed range is from 1 to 50.
Mostly useful to speed-up filtering.

@item threy
Set Y threshold for averaging chrominance values.
Set finer control for max allowed difference between Y components
of current pixel and neigbour pixels.
Default value is 200. Allowed range is from 1 to 200.

@item threu
Set U threshold for averaging chrominance values.
Set finer control for max allowed difference between U components
of current pixel and neigbour pixels.
Default value is 200. Allowed range is from 1 to 200.

@item threv
Set V threshold for averaging chrominance values.
Set finer control for max allowed difference between V components
of current pixel and neigbour pixels.
Default value is 200. Allowed range is from 1 to 200.
@end table

@subsection Commands
This filter supports same @ref{commands} as options.
The command accepts the same syntax of the corresponding option.

@section chromashift
Shift chroma pixels horizontally and/or vertically.

The filter accepts the following options:
@table @option
@item cbh
Set amount to shift chroma-blue horizontally.
@item cbv
Set amount to shift chroma-blue vertically.
@item crh
Set amount to shift chroma-red horizontally.
@item crv
Set amount to shift chroma-red vertically.
@item edge
Set edge mode, can be @var{smear}, default, or @var{warp}.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section ciescope

Display CIE color diagram with pixels overlaid onto it.

The filter accepts the following options:

@table @option
@item system
Set color system.

@table @samp
@item ntsc, 470m
@item ebu, 470bg
@item smpte
@item 240m
@item apple
@item widergb
@item cie1931
@item rec709, hdtv
@item uhdtv, rec2020
@item dcip3
@end table

@item cie
Set CIE system.

@table @samp
@item xyy
@item ucs
@item luv
@end table

@item gamuts
Set what gamuts to draw.

See @code{system} option for available values.

@item size, s
Set ciescope size, by default set to 512.

@item intensity, i
Set intensity used to map input pixel values to CIE diagram.

@item contrast
Set contrast used to draw tongue colors that are out of active color system gamut.

@item corrgamma
Correct gamma displayed on scope, by default enabled.

@item showwhite
Show white point on CIE diagram, by default disabled.

@item gamma
Set input gamma. Used only with XYZ input color space.
@end table

@section codecview

Visualize information exported by some codecs.

Some codecs can export information through frames using side-data or other
means. For example, some MPEG based codecs export motion vectors through the
@var{export_mvs} flag in the codec @option{flags2} option.

The filter accepts the following option:

@table @option
@item mv
Set motion vectors to visualize.

Available flags for @var{mv} are:

@table @samp
@item pf
forward predicted MVs of P-frames
@item bf
forward predicted MVs of B-frames
@item bb
backward predicted MVs of B-frames
@end table

@item qp
Display quantization parameters using the chroma planes.

@item mv_type, mvt
Set motion vectors type to visualize. Includes MVs from all frames unless specified by @var{frame_type} option.

Available flags for @var{mv_type} are:

@table @samp
@item fp
forward predicted MVs
@item bp
backward predicted MVs
@end table

@item frame_type, ft
Set frame type to visualize motion vectors of.

Available flags for @var{frame_type} are:

@table @samp
@item if
intra-coded frames (I-frames)
@item pf
predicted frames (P-frames)
@item bf
bi-directionally predicted frames (B-frames)
@end table
@end table

@subsection Examples

@itemize
@item
Visualize forward predicted MVs of all frames using @command{ffplay}:
@example
ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv_type=fp
@end example

@item
Visualize multi-directionals MVs of P and B-Frames using @command{ffplay}:
@example
ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv=pf+bf+bb
@end example
@end itemize

@section colorbalance
Modify intensity of primary colors (red, green and blue) of input frames.

The filter allows an input frame to be adjusted in the shadows, midtones or highlights
regions for the red-cyan, green-magenta or blue-yellow balance.

A positive adjustment value shifts the balance towards the primary color, a negative
value towards the complementary color.

The filter accepts the following options:

@table @option
@item rs
@item gs
@item bs
Adjust red, green and blue shadows (darkest pixels).

@item rm
@item gm
@item bm
Adjust red, green and blue midtones (medium pixels).

@item rh
@item gh
@item bh
Adjust red, green and blue highlights (brightest pixels).

Allowed ranges for options are @code{[-1.0, 1.0]}. Defaults are @code{0}.

@item pl
Preserve lightness when changing color balance. Default is disabled.
@end table

@subsection Examples

@itemize
@item
Add red color cast to shadows:
@example
colorbalance=rs=.3
@end example
@end itemize

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section colorcontrast

Adjust color contrast between RGB components.

The filter accepts the following options:

@table @option
@item rc
Set the red-cyan contrast. Defaults is 0.0. Allowed range is from -1.0 to 1.0.

@item gm
Set the green-magenta contrast. Defaults is 0.0. Allowed range is from -1.0 to 1.0.

@item by
Set the blue-yellow contrast. Defaults is 0.0. Allowed range is from -1.0 to 1.0.

@item rcw
@item gmw
@item byw
Set the weight of each @code{rc}, @code{gm}, @code{by} option value. Default value is 0.0.
Allowed range is from 0.0 to 1.0. If all weights are 0.0 filtering is disabled.

@item pl
Set the amount of preserving lightness. Default value is 0.0. Allowed range is from 0.0 to 1.0.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section colorcorrect

Adjust color white balance selectively for blacks and whites.
This filter operates in YUV colorspace.

The filter accepts the following options:

@table @option
@item rl
Set the red shadow spot. Allowed range is from -1.0 to 1.0.
Default value is 0.

@item bl
Set the blue shadow spot. Allowed range is from -1.0 to 1.0.
Default value is 0.

@item rh
Set the red highlight spot. Allowed range is from -1.0 to 1.0.
Default value is 0.

@item bh
Set the red highlight spot. Allowed range is from -1.0 to 1.0.
Default value is 0.

@item saturation
Set the amount of saturation. Allowed range is from -3.0 to 3.0.
Default value is 1.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section colorchannelmixer

Adjust video input frames by re-mixing color channels.

This filter modifies a color channel by adding the values associated to
the other channels of the same pixels. For example if the value to
modify is red, the output value will be:
@example
@var{red}=@var{red}*@var{rr} + @var{blue}*@var{rb} + @var{green}*@var{rg} + @var{alpha}*@var{ra}
@end example

The filter accepts the following options:

@table @option
@item rr
@item rg
@item rb
@item ra
Adjust contribution of input red, green, blue and alpha channels for output red channel.
Default is @code{1} for @var{rr}, and @code{0} for @var{rg}, @var{rb} and @var{ra}.

@item gr
@item gg
@item gb
@item ga
Adjust contribution of input red, green, blue and alpha channels for output green channel.
Default is @code{1} for @var{gg}, and @code{0} for @var{gr}, @var{gb} and @var{ga}.

@item br
@item bg
@item bb
@item ba
Adjust contribution of input red, green, blue and alpha channels for output blue channel.
Default is @code{1} for @var{bb}, and @code{0} for @var{br}, @var{bg} and @var{ba}.

@item ar
@item ag
@item ab
@item aa
Adjust contribution of input red, green, blue and alpha channels for output alpha channel.
Default is @code{1} for @var{aa}, and @code{0} for @var{ar}, @var{ag} and @var{ab}.

Allowed ranges for options are @code{[-2.0, 2.0]}.

@item pl
Preserve lightness when changing colors. Allowed range is from @code{[0.0, 1.0]}.
Default is @code{0.0}, thus disabled.
@end table

@subsection Examples

@itemize
@item
Convert source to grayscale:
@example
colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3
@end example
@item
Simulate sepia tones:
@example
colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131
@end example
@end itemize

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section colorize
Overlay a solid color on the video stream.

The filter accepts the following options:

@table @option
@item hue
Set the color hue. Allowed range is from 0 to 360.
Default value is 0.

@item saturation
Set the color saturation. Allowed range is from 0 to 1.
Default value is 0.5.

@item lightness
Set the color lightness. Allowed range is from 0 to 1.
Default value is 0.5.

@item mix
Set the mix of source lightness. By default is set to 1.0.
Allowed range is from 0.0 to 1.0.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section colorkey
RGB colorspace color keying.

The filter accepts the following options:

@table @option
@item color
The color which will be replaced with transparency.

@item similarity
Similarity percentage with the key color.

0.01 matches only the exact key color, while 1.0 matches everything.

@item blend
Blend percentage.

0.0 makes pixels either fully transparent, or not transparent at all.

Higher values result in semi-transparent pixels, with a higher transparency
the more similar the pixels color is to the key color.
@end table

@subsection Examples

@itemize
@item
Make every green pixel in the input image transparent:
@example
ffmpeg -i input.png -vf colorkey=green out.png
@end example

@item
Overlay a greenscreen-video on top of a static background image.
@example
ffmpeg -i background.png -i video.mp4 -filter_complex "[1:v]colorkey=0x3BBD1E:0.3:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.flv
@end example
@end itemize

@subsection Commands
This filter supports same @ref{commands} as options.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@section colorhold
Remove all color information for all RGB colors except for certain one.

The filter accepts the following options:

@table @option
@item color
The color which will not be replaced with neutral gray.

@item similarity
Similarity percentage with the above color.
0.01 matches only the exact key color, while 1.0 matches everything.

@item blend
Blend percentage. 0.0 makes pixels fully gray.
Higher values result in more preserved color.
@end table

@subsection Commands
This filter supports same @ref{commands} as options.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@section colorlevels

Adjust video input frames using levels.

The filter accepts the following options:

@table @option
@item rimin
@item gimin
@item bimin
@item aimin
Adjust red, green, blue and alpha input black point.
Allowed ranges for options are @code{[-1.0, 1.0]}. Defaults are @code{0}.

@item rimax
@item gimax
@item bimax
@item aimax
Adjust red, green, blue and alpha input white point.
Allowed ranges for options are @code{[-1.0, 1.0]}. Defaults are @code{1}.

Input levels are used to lighten highlights (bright tones), darken shadows
(dark tones), change the balance of bright and dark tones.

@item romin
@item gomin
@item bomin
@item aomin
Adjust red, green, blue and alpha output black point.
Allowed ranges for options are @code{[0, 1.0]}. Defaults are @code{0}.

@item romax
@item gomax
@item bomax
@item aomax
Adjust red, green, blue and alpha output white point.
Allowed ranges for options are @code{[0, 1.0]}. Defaults are @code{1}.

Output levels allows manual selection of a constrained output level range.
@end table

@subsection Examples

@itemize
@item
Make video output darker:
@example
colorlevels=rimin=0.058:gimin=0.058:bimin=0.058
@end example

@item
Increase contrast:
@example
colorlevels=rimin=0.039:gimin=0.039:bimin=0.039:rimax=0.96:gimax=0.96:bimax=0.96
@end example

@item
Make video output lighter:
@example
colorlevels=rimax=0.902:gimax=0.902:bimax=0.902
@end example

@item
Increase brightness:
@example
colorlevels=romin=0.5:gomin=0.5:bomin=0.5
@end example
@end itemize

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section colormatrix

Convert color matrix.

The filter accepts the following options:

@table @option
@item src
@item dst
Specify the source and destination color matrix. Both values must be
specified.

The accepted values are:
@table @samp
@item bt709
BT.709

@item fcc
FCC

@item bt601
BT.601

@item bt470
BT.470

@item bt470bg
BT.470BG

@item smpte170m
SMPTE-170M

@item smpte240m
SMPTE-240M

@item bt2020
BT.2020
@end table
@end table

For example to convert from BT.601 to SMPTE-240M, use the command:
@example
colormatrix=bt601:smpte240m
@end example

@section colorspace

Convert colorspace, transfer characteristics or color primaries.
Input video needs to have an even size.

The filter accepts the following options:

@table @option
@anchor{all}
@item all
Specify all color properties at once.

The accepted values are:
@table @samp
@item bt470m
BT.470M

@item bt470bg
BT.470BG

@item bt601-6-525
BT.601-6 525

@item bt601-6-625
BT.601-6 625

@item bt709
BT.709

@item smpte170m
SMPTE-170M

@item smpte240m
SMPTE-240M

@item bt2020
BT.2020

@end table

@anchor{space}
@item space
Specify output colorspace.

The accepted values are:
@table @samp
@item bt709
BT.709

@item fcc
FCC

@item bt470bg
BT.470BG or BT.601-6 625

@item smpte170m
SMPTE-170M or BT.601-6 525

@item smpte240m
SMPTE-240M

@item ycgco
YCgCo

@item bt2020ncl
BT.2020 with non-constant luminance

@end table

@anchor{trc}
@item trc
Specify output transfer characteristics.

The accepted values are:
@table @samp
@item bt709
BT.709

@item bt470m
BT.470M

@item bt470bg
BT.470BG

@item gamma22
Constant gamma of 2.2

@item gamma28
Constant gamma of 2.8

@item smpte170m
SMPTE-170M, BT.601-6 625 or BT.601-6 525

@item smpte240m
SMPTE-240M

@item srgb
SRGB

@item iec61966-2-1
iec61966-2-1

@item iec61966-2-4
iec61966-2-4

@item xvycc
xvycc

@item bt2020-10
BT.2020 for 10-bits content

@item bt2020-12
BT.2020 for 12-bits content

@end table

@anchor{primaries}
@item primaries
Specify output color primaries.

The accepted values are:
@table @samp
@item bt709
BT.709

@item bt470m
BT.470M

@item bt470bg
BT.470BG or BT.601-6 625

@item smpte170m
SMPTE-170M or BT.601-6 525

@item smpte240m
SMPTE-240M

@item film
film

@item smpte431
SMPTE-431

@item smpte432
SMPTE-432

@item bt2020
BT.2020

@item jedec-p22
JEDEC P22 phosphors

@end table

@anchor{range}
@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

@item format
Specify output color format.

The accepted values are:
@table @samp
@item yuv420p
YUV 4:2:0 planar 8-bits

@item yuv420p10
YUV 4:2:0 planar 10-bits

@item yuv420p12
YUV 4:2:0 planar 12-bits

@item yuv422p
YUV 4:2:2 planar 8-bits

@item yuv422p10
YUV 4:2:2 planar 10-bits

@item yuv422p12
YUV 4:2:2 planar 12-bits

@item yuv444p
YUV 4:4:4 planar 8-bits

@item yuv444p10
YUV 4:4:4 planar 10-bits

@item yuv444p12
YUV 4:4:4 planar 12-bits

@end table

@item fast
Do a fast conversion, which skips gamma/primary correction. This will take
significantly less CPU, but will be mathematically incorrect. To get output
compatible with that produced by the colormatrix filter, use fast=1.

@item dither
Specify dithering mode.

The accepted values are:
@table @samp
@item none
No dithering

@item fsb
Floyd-Steinberg dithering
@end table

@item wpadapt
Whitepoint adaptation mode.

The accepted values are:
@table @samp
@item bradford
Bradford whitepoint adaptation

@item vonkries
von Kries whitepoint adaptation

@item identity
identity whitepoint adaptation (i.e. no whitepoint adaptation)
@end table

@item iall
Override all input properties at once. Same accepted values as @ref{all}.

@item ispace
Override input colorspace. Same accepted values as @ref{space}.

@item iprimaries
Override input color primaries. Same accepted values as @ref{primaries}.

@item itrc
Override input transfer characteristics. Same accepted values as @ref{trc}.

@item irange
Override input color range. Same accepted values as @ref{range}.

@end table

The filter converts the transfer characteristics, color space and color
primaries to the specified user values. The output value, if not specified,
is set to a default value based on the "all" property. If that property is
also not specified, the filter will log an error. The output color range and
format default to the same value as the input color range and format. The
input transfer characteristics, color space, color primaries and color range
should be set on the input data. If any of these are missing, the filter will
log an error and no conversion will take place.

For example to convert the input to SMPTE-240M, use the command:
@example
colorspace=smpte240m
@end example

@section colortemperature
Adjust color temperature in video to simulate variations in ambient color temperature.

The filter accepts the following options:

@table @option
@item temperature
Set the temperature in Kelvin. Allowed range is from 1000 to 40000.
Default value is 6500 K.

@item mix
Set mixing with filtered output. Allowed range is from 0 to 1.
Default value is 1.

@item pl
Set the amount of preserving lightness. Allowed range is from 0 to 1.
Default value is 0.
@end table

@subsection Commands
This filter supports same @ref{commands} as options.

@section convolution

Apply convolution of 3x3, 5x5, 7x7 or horizontal/vertical up to 49 elements.

The filter accepts the following options:

@table @option
@item 0m
@item 1m
@item 2m
@item 3m
Set matrix for each plane.
Matrix is sequence of 9, 25 or 49 signed integers in @var{square} mode,
and from 1 to 49 odd number of signed integers in @var{row} mode.

@item 0rdiv
@item 1rdiv
@item 2rdiv
@item 3rdiv
Set multiplier for calculated value for each plane.
If unset or 0, it will be sum of all matrix elements.

@item 0bias
@item 1bias
@item 2bias
@item 3bias
Set bias for each plane. This value is added to the result of the multiplication.
Useful for making the overall image brighter or darker. Default is 0.0.

@item 0mode
@item 1mode
@item 2mode
@item 3mode
Set matrix mode for each plane. Can be @var{square}, @var{row} or @var{column}.
Default is @var{square}.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@subsection Examples

@itemize
@item
Apply sharpen:
@example
convolution="0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0"
@end example

@item
Apply blur:
@example
convolution="1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1/9:1/9:1/9:1/9"
@end example

@item
Apply edge enhance:
@example
convolution="0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:5:1:1:1:0:128:128:128"
@end example

@item
Apply edge detect:
@example
convolution="0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:5:5:5:1:0:128:128:128"
@end example

@item
Apply laplacian edge detector which includes diagonals:
@example
convolution="1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:5:5:5:1:0:128:128:0"
@end example

@item
Apply emboss:
@example
convolution="-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2"
@end example
@end itemize

@section convolve

Apply 2D convolution of video stream in frequency domain using second stream
as impulse.

The filter accepts the following options:

@table @option
@item planes
Set which planes to process.

@item impulse
Set which impulse video frames will be processed, can be @var{first}
or @var{all}. Default is @var{all}.
@end table

The @code{convolve} filter also supports the @ref{framesync} options.

@section copy

Copy the input video source unchanged to the output. This is mainly useful for
testing purposes.

@anchor{coreimage}
@section coreimage
Video filtering on GPU using Apple's CoreImage API on OSX.

Hardware acceleration is based on an OpenGL context. Usually, this means it is
processed by video hardware. However, software-based OpenGL implementations
exist which means there is no guarantee for hardware processing. It depends on
the respective OSX.

There are many filters and image generators provided by Apple that come with a
large variety of options. The filter has to be referenced by its name along
with its options.

The coreimage filter accepts the following options:
@table @option
@item list_filters
List all available filters and generators along with all their respective
options as well as possible minimum and maximum values along with the default
values.
@example
list_filters=true
@end example

@item filter
Specify all filters by their respective name and options.
Use @var{list_filters} to determine all valid filter names and options.
Numerical options are specified by a float value and are automatically clamped
to their respective value range.  Vector and color options have to be specified
by a list of space separated float values. Character escaping has to be done.
A special option name @code{default} is available to use default options for a
filter.

It is required to specify either @code{default} or at least one of the filter options.
All omitted options are used with their default values.
The syntax of the filter string is as follows:
@example
filter=<NAME>@@<OPTION>=<VALUE>[@@<OPTION>=<VALUE>][@@...][#<NAME>@@<OPTION>=<VALUE>[@@<OPTION>=<VALUE>][@@...]][#...]
@end example

@item output_rect
Specify a rectangle where the output of the filter chain is copied into the
input image. It is given by a list of space separated float values:
@example
output_rect=x\ y\ width\ height
@end example
If not given, the output rectangle equals the dimensions of the input image.
The output rectangle is automatically cropped at the borders of the input
image. Negative values are valid for each component.
@example
output_rect=25\ 25\ 100\ 100
@end example
@end table

Several filters can be chained for successive processing without GPU-HOST
transfers allowing for fast processing of complex filter chains.
Currently, only filters with zero (generators) or exactly one (filters) input
image and one output image are supported. Also, transition filters are not yet
usable as intended.

Some filters generate output images with additional padding depending on the
respective filter kernel. The padding is automatically removed to ensure the
filter output has the same size as the input image.

For image generators, the size of the output image is determined by the
previous output image of the filter chain or the input image of the whole
filterchain, respectively. The generators do not use the pixel information of
this image to generate their output. However, the generated output is
blended onto this image, resulting in partial or complete coverage of the
output image.

The @ref{coreimagesrc} video source can be used for generating input images
which are directly fed into the filter chain. By using it, providing input
images by another video source or an input video is not required.

@subsection Examples

@itemize

@item
List all filters available:
@example
coreimage=list_filters=true
@end example

@item
Use the CIBoxBlur filter with default options to blur an image:
@example
coreimage=filter=CIBoxBlur@@default
@end example

@item
Use a filter chain with CISepiaTone at default values and CIVignetteEffect with
its center at 100x100 and a radius of 50 pixels:
@example
coreimage=filter=CIBoxBlur@@default#CIVignetteEffect@@inputCenter=100\ 100@@inputRadius=50
@end example

@item
Use nullsrc and CIQRCodeGenerator to create a QR code for the FFmpeg homepage,
given as complete and escaped command-line for Apple's standard bash shell:
@example
ffmpeg -f lavfi -i nullsrc=s=100x100,coreimage=filter=CIQRCodeGenerator@@inputMessage=https\\\\\://FFmpeg.org/@@inputCorrectionLevel=H -frames:v 1 QRCode.png
@end example
@end itemize

@section cover_rect

Cover a rectangular object

It accepts the following options:

@table @option
@item cover
Filepath of the optional cover image, needs to be in yuv420.

@item mode
Set covering mode.

It accepts the following values:
@table @samp
@item cover
cover it by the supplied image
@item blur
cover it by interpolating the surrounding pixels
@end table

Default value is @var{blur}.
@end table

@subsection Examples

@itemize
@item
Cover a rectangular object by the supplied image of a given video using @command{ffmpeg}:
@example
ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
@end example
@end itemize

@section crop

Crop the input video to given dimensions.

It accepts the following parameters:

@table @option
@item w, out_w
The width of the output video. It defaults to @code{iw}.
This expression is evaluated only once during the filter
configuration, or when the @samp{w} or @samp{out_w} command is sent.

@item h, out_h
The height of the output video. It defaults to @code{ih}.
This expression is evaluated only once during the filter
configuration, or when the @samp{h} or @samp{out_h} command is sent.

@item x
The horizontal position, in the input video, of the left edge of the output
video. It defaults to @code{(in_w-out_w)/2}.
This expression is evaluated per-frame.

@item y
The vertical position, in the input video, of the top edge of the output video.
It defaults to @code{(in_h-out_h)/2}.
This expression is evaluated per-frame.

@item keep_aspect
If set to 1 will force the output display aspect ratio
to be the same of the input, by changing the output sample aspect
ratio. It defaults to 0.

@item exact
Enable exact cropping. If enabled, subsampled videos will be cropped at exact
width/height/x/y as specified and will not be rounded to nearest smaller value.
It defaults to 0.
@end table

The @var{out_w}, @var{out_h}, @var{x}, @var{y} parameters are
expressions containing the following constants:

@table @option
@item x
@item y
The computed values for @var{x} and @var{y}. They are evaluated for
each new frame.

@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 (cropped) width and height.

@item ow
@item oh
These are the same as @var{out_w} and @var{out_h}.

@item a
same as @var{iw} / @var{ih}

@item sar
input sample aspect ratio

@item dar
input display aspect ratio, it is the same as (@var{iw} / @var{ih}) * @var{sar}

@item hsub
@item vsub
horizontal and vertical chroma subsample values. For example for the
pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1.

@item n
The number of the input frame, starting from 0.

@item pos
the position in the file of the input frame, NAN if unknown

@item t
The timestamp expressed in seconds. It's NAN if the input timestamp is unknown.

@end table

The expression for @var{out_w} may depend on the value of @var{out_h},
and the expression for @var{out_h} may depend on @var{out_w}, but they
cannot depend on @var{x} and @var{y}, as @var{x} and @var{y} are
evaluated after @var{out_w} and @var{out_h}.

The @var{x} and @var{y} parameters specify the expressions for the
position of the top-left corner of the output (non-cropped) area. They
are evaluated for each frame. If the evaluated value is not valid, it
is approximated to the nearest valid value.

The expression for @var{x} may depend on @var{y}, and the expression
for @var{y} may depend on @var{x}.

@subsection Examples

@itemize
@item
Crop area with size 100x100 at position (12,34).
@example
crop=100:100:12:34
@end example

Using named options, the example above becomes:
@example
crop=w=100:h=100:x=12:y=34
@end example

@item
Crop the central input area with size 100x100:
@example
crop=100:100
@end example

@item
Crop the central input area with size 2/3 of the input video:
@example
crop=2/3*in_w:2/3*in_h
@end example

@item
Crop the input video central square:
@example
crop=out_w=in_h
crop=in_h
@end example

@item
Delimit the rectangle with the top-left corner placed at position
100:100 and the right-bottom corner corresponding to the right-bottom
corner of the input image.
@example
crop=in_w-100:in_h-100:100:100
@end example

@item
Crop 10 pixels from the left and right borders, and 20 pixels from
the top and bottom borders
@example
crop=in_w-2*10:in_h-2*20
@end example

@item
Keep only the bottom right quarter of the input image:
@example
crop=in_w/2:in_h/2:in_w/2:in_h/2
@end example

@item
Crop height for getting Greek harmony:
@example
crop=in_w:1/PHI*in_w
@end example

@item
Apply trembling effect:
@example
crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)
@end example

@item
Apply erratic camera effect depending on timestamp:
@example
crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)"
@end example

@item
Set x depending on the value of y:
@example
crop=in_w/2:in_h/2:y:10+10*sin(n/10)
@end example
@end itemize

@subsection Commands

This filter supports the following commands:
@table @option
@item w, out_w
@item h, out_h
@item x
@item y
Set width/height of the output video and the horizontal/vertical position
in the input video.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.
@end table

@section cropdetect

Auto-detect the crop size.

It calculates the necessary cropping parameters and prints the
recommended parameters via the logging system. The detected dimensions
correspond to the non-black area of the input video.

It accepts the following parameters:

@table @option

@item limit
Set higher black value threshold, which can be optionally specified
from nothing (0) to everything (255 for 8-bit based formats). An intensity
value greater to the set value is considered non-black. It defaults to 24.
You can also specify a value between 0.0 and 1.0 which will be scaled depending
on the bitdepth of the pixel format.

@item round
The value which the width/height should be divisible by. It defaults to
16. The offset is automatically adjusted to center the video. Use 2 to
get only even dimensions (needed for 4:2:2 video). 16 is best when
encoding to most video codecs.

@item skip
Set the number of initial frames for which evaluation is skipped.
Default is 2. Range is 0 to INT_MAX.

@item reset_count, reset
Set the counter that determines after how many frames cropdetect will
reset the previously detected largest video area and start over to
detect the current optimal crop area. Default value is 0.

This can be useful when channel logos distort the video area. 0
indicates 'never reset', and returns the largest area encountered during
playback.
@end table

@anchor{cue}
@section cue

Delay video filtering until a given wallclock timestamp. The filter first
passes on @option{preroll} amount of frames, then it buffers at most
@option{buffer} amount of frames and waits for the cue. After reaching the cue
it forwards the buffered frames and also any subsequent frames coming in its
input.

The filter can be used synchronize the output of multiple ffmpeg processes for
realtime output devices like decklink. By putting the delay in the filtering
chain and pre-buffering frames the process can pass on data to output almost
immediately after the target wallclock timestamp is reached.

Perfect frame accuracy cannot be guaranteed, but the result is good enough for
some use cases.

@table @option

@item cue
The cue timestamp expressed in a UNIX timestamp in microseconds. Default is 0.

@item preroll
The duration of content to pass on as preroll expressed in seconds. Default is 0.

@item buffer
The maximum duration of content to buffer before waiting for the cue expressed
in seconds. Default is 0.

@end table

@anchor{curves}
@section curves

Apply color adjustments using curves.

This filter is similar to the Adobe Photoshop and GIMP curves tools. Each
component (red, green and blue) has its values defined by @var{N} key points
tied from each other using a smooth curve. The x-axis represents the pixel
values from the input frame, and the y-axis the new pixel values to be set for
the output frame.

By default, a component curve is defined by the two points @var{(0;0)} and
@var{(1;1)}. This creates a straight line where each original pixel value is
"adjusted" to its own value, which means no change to the image.

The filter allows you to redefine these two points and add some more. A new
curve (using a natural cubic spline interpolation) will be define to pass
smoothly through all these new coordinates. The new defined points needs to be
strictly increasing over the x-axis, and their @var{x} and @var{y} values must
be in the @var{[0;1]} interval.  If the computed curves happened to go outside
the vector spaces, the values will be clipped accordingly.

The filter accepts the following options:

@table @option
@item preset
Select one of the available color presets. This option can be used in addition
to the @option{r}, @option{g}, @option{b} parameters; in this case, the later
options takes priority on the preset values.
Available presets are:
@table @samp
@item none
@item color_negative
@item cross_process
@item darker
@item increase_contrast
@item lighter
@item linear_contrast
@item medium_contrast
@item negative
@item strong_contrast
@item vintage
@end table
Default is @code{none}.
@item master, m
Set the master key points. These points will define a second pass mapping. It
is sometimes called a "luminance" or "value" mapping. It can be used with
@option{r}, @option{g}, @option{b} or @option{all} since it acts like a
post-processing LUT.
@item red, r
Set the key points for the red component.
@item green, g
Set the key points for the green component.
@item blue, b
Set the key points for the blue component.
@item all
Set the key points for all components (not including master).
Can be used in addition to the other key points component
options. In this case, the unset component(s) will fallback on this
@option{all} setting.
@item psfile
Specify a Photoshop curves file (@code{.acv}) to import the settings from.
@item plot
Save Gnuplot script of the curves in specified file.
@end table

To avoid some filtergraph syntax conflicts, each key points list need to be
defined using the following syntax: @code{x0/y0 x1/y1 x2/y2 ...}.

@subsection Commands

This filter supports same @ref{commands} as options.

@subsection Examples

@itemize
@item
Increase slightly the middle level of blue:
@example
curves=blue='0/0 0.5/0.58 1/1'
@end example

@item
Vintage effect:
@example
curves=r='0/0.11 .42/.51 1/0.95':g='0/0 0.50/0.48 1/1':b='0/0.22 .49/.44 1/0.8'
@end example
Here we obtain the following coordinates for each components:
@table @var
@item red
@code{(0;0.11) (0.42;0.51) (1;0.95)}
@item green
@code{(0;0) (0.50;0.48) (1;1)}
@item blue
@code{(0;0.22) (0.49;0.44) (1;0.80)}
@end table

@item
The previous example can also be achieved with the associated built-in preset:
@example
curves=preset=vintage
@end example

@item
Or simply:
@example
curves=vintage
@end example

@item
Use a Photoshop preset and redefine the points of the green component:
@example
curves=psfile='MyCurvesPresets/purple.acv':green='0/0 0.45/0.53 1/1'
@end example

@item
Check out the curves of the @code{cross_process} profile using @command{ffmpeg}
and @command{gnuplot}:
@example
ffmpeg -f lavfi -i color -vf curves=cross_process:plot=/tmp/curves.plt -frames:v 1 -f null -
gnuplot -p /tmp/curves.plt
@end example
@end itemize

@section datascope

Video data analysis filter.

This filter shows hexadecimal pixel values of part of video.

The filter accepts the following options:

@table @option
@item size, s
Set output video size.

@item x
Set x offset from where to pick pixels.

@item y
Set y offset from where to pick pixels.

@item mode
Set scope mode, can be one of the following:
@table @samp
@item mono
Draw hexadecimal pixel values with white color on black background.

@item color
Draw hexadecimal pixel values with input video pixel color on black
background.

@item color2
Draw hexadecimal pixel values on color background picked from input video,
the text color is picked in such way so its always visible.
@end table

@item axis
Draw rows and columns numbers on left and top of video.

@item opacity
Set background opacity.

@item format
Set display number format. Can be @code{hex}, or @code{dec}. Default is @code{hex}.

@item components
Set pixel components to display. By default all pixel components are displayed.
@end table

@subsection Commands

This filter supports same @ref{commands} as options excluding @code{size} option.

@section dblur
Apply Directional blur filter.

The filter accepts the following options:

@table @option
@item angle
Set angle of directional blur. Default is @code{45}.

@item radius
Set radius of directional blur. Default is @code{5}.

@item planes
Set which planes to filter. By default all planes are filtered.
@end table

@subsection Commands
This filter supports same @ref{commands} as options.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@section dctdnoiz

Denoise frames using 2D DCT (frequency domain filtering).

This filter is not designed for real time.

The filter accepts the following options:

@table @option
@item sigma, s
Set the noise sigma constant.

This @var{sigma} defines a hard threshold of @code{3 * sigma}; every DCT
coefficient (absolute value) below this threshold with be dropped.

If you need a more advanced filtering, see @option{expr}.

Default is @code{0}.

@item overlap
Set number overlapping pixels for each block. Since the filter can be slow, you
may want to reduce this value, at the cost of a less effective filter and the
risk of various artefacts.

If the overlapping value doesn't permit processing the whole input width or
height, a warning will be displayed and according borders won't be denoised.

Default value is @var{blocksize}-1, which is the best possible setting.

@item expr, e
Set the coefficient factor expression.

For each coefficient of a DCT block, this expression will be evaluated as a
multiplier value for the coefficient.

If this is option is set, the @option{sigma} option will be ignored.

The absolute value of the coefficient can be accessed through the @var{c}
variable.

@item n
Set the @var{blocksize} using the number of bits. @code{1<<@var{n}} defines the
@var{blocksize}, which is the width and height of the processed blocks.

The default value is @var{3} (8x8) and can be raised to @var{4} for a
@var{blocksize} of 16x16. Note that changing this setting has huge consequences
on the speed processing. Also, a larger block size does not necessarily means a
better de-noising.
@end table

@subsection Examples

Apply a denoise with a @option{sigma} of @code{4.5}:
@example
dctdnoiz=4.5
@end example

The same operation can be achieved using the expression system:
@example
dctdnoiz=e='gte(c, 4.5*3)'
@end example

Violent denoise using a block size of @code{16x16}:
@example
dctdnoiz=15:n=4
@end example

@section deband

Remove banding artifacts from input video.
It works by replacing banded pixels with average value of referenced pixels.

The filter accepts the following options:

@table @option
@item 1thr
@item 2thr
@item 3thr
@item 4thr
Set banding detection threshold for each plane. Default is 0.02.
Valid range is 0.00003 to 0.5.
If difference between current pixel and reference pixel is less than threshold,
it will be considered as banded.

@item range, r
Banding detection range in pixels. Default is 16. If positive, random number
in range 0 to set value will be used. If negative, exact absolute value
will be used.
The range defines square of four pixels around current pixel.

@item direction, d
Set direction in radians from which four pixel will be compared. If positive,
random direction from 0 to set direction will be picked. If negative, exact of
absolute value will be picked. For example direction 0, -PI or -2*PI radians
will pick only pixels on same row and -PI/2 will pick only pixels on same
column.

@item blur, b
If enabled, current pixel is compared with average value of all four
surrounding pixels. The default is enabled. If disabled current pixel is
compared with all four surrounding pixels. The pixel is considered banded
if only all four differences with surrounding pixels are less than threshold.

@item coupling, c
If enabled, current pixel is changed if and only if all pixel components are banded,
e.g. banding detection threshold is triggered for all color components.
The default is disabled.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section deblock

Remove blocking artifacts from input video.

The filter accepts the following options:

@table @option
@item filter
Set filter type, can be @var{weak} or @var{strong}. Default is @var{strong}.
This controls what kind of deblocking is applied.

@item block
Set size of block, allowed range is from 4 to 512. Default is @var{8}.

@item alpha
@item beta
@item gamma
@item delta
Set blocking detection thresholds. Allowed range is 0 to 1.
Defaults are: @var{0.098} for @var{alpha} and @var{0.05} for the rest.
Using higher threshold gives more deblocking strength.
Setting @var{alpha} controls threshold detection at exact edge of block.
Remaining options controls threshold detection near the edge. Each one for
below/above or left/right. Setting any of those to @var{0} disables
deblocking.

@item planes
Set planes to filter. Default is to filter all available planes.
@end table

@subsection Examples

@itemize
@item
Deblock using weak filter and block size of 4 pixels.
@example
deblock=filter=weak:block=4
@end example

@item
Deblock using strong filter, block size of 4 pixels and custom thresholds for
deblocking more edges.
@example
deblock=filter=strong:block=4:alpha=0.12:beta=0.07:gamma=0.06:delta=0.05
@end example

@item
Similar as above, but filter only first plane.
@example
deblock=filter=strong:block=4:alpha=0.12:beta=0.07:gamma=0.06:delta=0.05:planes=1
@end example

@item
Similar as above, but filter only second and third plane.
@example
deblock=filter=strong:block=4:alpha=0.12:beta=0.07:gamma=0.06:delta=0.05:planes=6
@end example
@end itemize

@subsection Commands

This filter supports the all above options as @ref{commands}.

@anchor{decimate}
@section decimate

Drop duplicated frames at regular intervals.

The filter accepts the following options:

@table @option
@item cycle
Set the number of frames from which one will be dropped. Setting this to
@var{N} means one frame in every batch of @var{N} frames will be dropped.
Default is @code{5}.

@item dupthresh
Set the threshold for duplicate detection. If the difference metric for a frame
is less than or equal to this value, then it is declared as duplicate. Default
is @code{1.1}

@item scthresh
Set scene change threshold. Default is @code{15}.

@item blockx
@item blocky
Set the size of the x and y-axis blocks used during metric calculations.
Larger blocks give better noise suppression, but also give worse detection of
small movements. Must be a power of two. Default is @code{32}.

@item ppsrc
Mark main input as a pre-processed input and activate clean source input
stream. This allows the input to be pre-processed with various filters to help
the metrics calculation while keeping the frame selection lossless. When set to
@code{1}, the first stream is for the pre-processed input, and the second
stream is the clean source from where the kept frames are chosen. Default is
@code{0}.

@item chroma
Set whether or not chroma is considered in the metric calculations. Default is
@code{1}.
@end table

@section deconvolve

Apply 2D deconvolution of video stream in frequency domain using second stream
as impulse.

The filter accepts the following options:

@table @option
@item planes
Set which planes to process.

@item impulse
Set which impulse video frames will be processed, can be @var{first}
or @var{all}. Default is @var{all}.

@item noise
Set noise when doing divisions. Default is @var{0.0000001}. Useful when width
and height are not same and not power of 2 or if stream prior to convolving
had noise.
@end table

The @code{deconvolve} filter also supports the @ref{framesync} options.

@section dedot

Reduce cross-luminance (dot-crawl) and cross-color (rainbows) from video.

It accepts the following options:

@table @option
@item m
Set mode of operation. Can be combination of @var{dotcrawl} for cross-luminance reduction and/or
@var{rainbows} for cross-color reduction.

@item lt
Set spatial luma threshold. Lower values increases reduction of cross-luminance.

@item tl
Set tolerance for temporal luma. Higher values increases reduction of cross-luminance.

@item tc
Set tolerance for chroma temporal variation. Higher values increases reduction of cross-color.

@item ct
Set temporal chroma threshold. Lower values increases reduction of cross-color.
@end table

@section deflate

Apply deflate effect to the video.

This filter replaces the pixel by the local(3x3) average by taking into account
only values lower than the pixel.

It accepts the following options:

@table @option
@item threshold0
@item threshold1
@item threshold2
@item threshold3
Limit the maximum change for each plane, default is 65535.
If 0, plane will remain unchanged.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section deflicker

Remove temporal frame luminance variations.

It accepts the following options:

@table @option
@item size, s
Set moving-average filter size in frames. Default is 5. Allowed range is 2 - 129.

@item mode, m
Set averaging mode to smooth temporal luminance variations.

Available values are:
@table @samp
@item am
Arithmetic mean

@item gm
Geometric mean

@item hm
Harmonic mean

@item qm
Quadratic mean

@item cm
Cubic mean

@item pm
Power mean

@item median
Median
@end table

@item bypass
Do not actually modify frame. Useful when one only wants metadata.
@end table

@section dejudder

Remove judder produced by partially interlaced telecined content.

Judder can be introduced, for instance, by @ref{pullup} filter. If the original
source was partially telecined content then the output of @code{pullup,dejudder}
will have a variable frame rate. May change the recorded frame rate of the
container. Aside from that change, this filter will not affect constant frame
rate video.

The option available in this filter is:
@table @option

@item cycle
Specify the length of the window over which the judder repeats.

Accepts any integer greater than 1. Useful values are:
@table @samp

@item 4
If the original was telecined from 24 to 30 fps (Film to NTSC).

@item 5
If the original was telecined from 25 to 30 fps (PAL to NTSC).

@item 20
If a mixture of the two.
@end table

The default is @samp{4}.
@end table

@section delogo

Suppress a TV station logo by a simple interpolation of the surrounding
pixels. Just set a rectangle covering the logo and watch it disappear
(and sometimes something even uglier appear - your mileage may vary).

It accepts the following parameters:
@table @option

@item x
@item y
Specify the top left corner coordinates of the logo. They must be
specified.

@item w
@item h
Specify the width and height of the logo to clear. They must be
specified.

@item show
When set to 1, a green rectangle is drawn on the screen to simplify
finding the right @var{x}, @var{y}, @var{w}, and @var{h} parameters.
The default value is 0.

The rectangle is drawn on the outermost pixels which will be (partly)
replaced with interpolated values. The values of the next pixels
immediately outside this rectangle in each direction will be used to
compute the interpolated pixel values inside the rectangle.

@end table

@subsection Examples

@itemize
@item
Set a rectangle covering the area with top left corner coordinates 0,0
and size 100x77:
@example
delogo=x=0:y=0:w=100:h=77
@end example

@end itemize

@anchor{derain}
@section derain

Remove the rain in the input image/video by applying the derain methods based on
convolutional neural networks. Supported models:

@itemize
@item
Recurrent Squeeze-and-Excitation Context Aggregation Net (RESCAN).
See @url{http://openaccess.thecvf.com/content_ECCV_2018/papers/Xia_Li_Recurrent_Squeeze-and-Excitation_Context_ECCV_2018_paper.pdf}.
@end itemize

Training as well as model generation scripts are provided in
the repository at @url{https://github.com/XueweiMeng/derain_filter.git}.

Native model files (.model) can be generated from TensorFlow model
files (.pb) by using tools/python/convert.py

The filter accepts the following options:

@table @option
@item filter_type
Specify which filter to use. This option accepts the following values:

@table @samp
@item derain
Derain filter. To conduct derain filter, you need to use a derain model.

@item dehaze
Dehaze filter. To conduct dehaze filter, you need to use a dehaze model.
@end table
Default value is @samp{derain}.

@item dnn_backend
Specify which DNN backend to use for model loading and execution. This option accepts
the following values:

@table @samp
@item native
Native implementation of DNN loading and execution.

@item tensorflow
TensorFlow backend. To enable this backend you
need to install the TensorFlow for C library (see
@url{https://www.tensorflow.org/install/install_c}) and configure FFmpeg with
@code{--enable-libtensorflow}
@end table
Default value is @samp{native}.

@item model
Set path to model file specifying network architecture and its parameters.
Note that different backends use different file formats. TensorFlow and native
backend can load files for only its format.
@end table

It can also be finished with @ref{dnn_processing} filter.

@section deshake

Attempt to fix small changes in horizontal and/or vertical shift. This
filter helps remove camera shake from hand-holding a camera, bumping a
tripod, moving on a vehicle, etc.

The filter accepts the following options:

@table @option

@item x
@item y
@item w
@item h
Specify a rectangular area where to limit the search for motion
vectors.
If desired the search for motion vectors can be limited to a
rectangular area of the frame defined by its top left corner, width
and height. These parameters have the same meaning as the drawbox
filter which can be used to visualise the position of the bounding
box.

This is useful when simultaneous movement of subjects within the frame
might be confused for camera motion by the motion vector search.

If any or all of @var{x}, @var{y}, @var{w} and @var{h} are set to -1
then the full frame is used. This allows later options to be set
without specifying the bounding box for the motion vector search.

Default - search the whole frame.

@item rx
@item ry
Specify the maximum extent of movement in x and y directions in the
range 0-64 pixels. Default 16.

@item edge
Specify how to generate pixels to fill blanks at the edge of the
frame. Available values are:
@table @samp
@item blank, 0
Fill zeroes at blank locations
@item original, 1
Original image at blank locations
@item clamp, 2
Extruded edge value at blank locations
@item mirror, 3
Mirrored edge at blank locations
@end table
Default value is @samp{mirror}.

@item blocksize
Specify the blocksize to use for motion search. Range 4-128 pixels,
default 8.

@item contrast
Specify the contrast threshold for blocks. Only blocks with more than
the specified contrast (difference between darkest and lightest
pixels) will be considered. Range 1-255, default 125.

@item search
Specify the search strategy. Available values are:
@table @samp
@item exhaustive, 0
Set exhaustive search
@item less, 1
Set less exhaustive search.
@end table
Default value is @samp{exhaustive}.

@item filename
If set then a detailed log of the motion search is written to the
specified file.

@end table

@section despill

Remove unwanted contamination of foreground colors, caused by reflected color of
greenscreen or bluescreen.

This filter accepts the following options:

@table @option
@item type
Set what type of despill to use.

@item mix
Set how spillmap will be generated.

@item expand
Set how much to get rid of still remaining spill.

@item red
Controls amount of red in spill area.

@item green
Controls amount of green in spill area.
Should be -1 for greenscreen.

@item blue
Controls amount of blue in spill area.
Should be -1 for bluescreen.

@item brightness
Controls brightness of spill area, preserving colors.

@item alpha
Modify alpha from generated spillmap.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section detelecine

Apply an exact inverse of the telecine operation. It requires a predefined
pattern specified using the pattern option which must be the same as that passed
to the telecine filter.

This filter accepts the following options:

@table @option
@item first_field
@table @samp
@item top, t
top field first
@item bottom, b
bottom field first
The default value is @code{top}.
@end table

@item pattern
A string of numbers representing the pulldown pattern you wish to apply.
The default value is @code{23}.

@item start_frame
A number representing position of the first frame with respect to the telecine
pattern. This is to be used if the stream is cut. The default value is @code{0}.
@end table

@section dilation

Apply dilation effect to the video.

This filter replaces the pixel by the local(3x3) maximum.

It accepts the following options:

@table @option
@item threshold0
@item threshold1
@item threshold2
@item threshold3
Limit the maximum change for each plane, default is 65535.
If 0, plane will remain unchanged.

@item coordinates
Flag which specifies the pixel to refer to. Default is 255 i.e. all eight
pixels are used.

Flags to local 3x3 coordinates maps like this:

    1 2 3
    4   5
    6 7 8
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section displace

Displace pixels as indicated by second and third input stream.

It takes three input streams and outputs one stream, the first input is the
source, and second and third input are displacement maps.

The second input specifies how much to displace pixels along the
x-axis, while the third input specifies how much to displace pixels
along the y-axis.
If one of displacement map streams terminates, last frame from that
displacement map will be used.

Note that once generated, displacements maps can be reused over and over again.

A description of the accepted options follows.

@table @option
@item edge
Set displace behavior for pixels that are out of range.

Available values are:
@table @samp
@item blank
Missing pixels are replaced by black pixels.

@item smear
Adjacent pixels will spread out to replace missing pixels.

@item wrap
Out of range pixels are wrapped so they point to pixels of other side.

@item mirror
Out of range pixels will be replaced with mirrored pixels.
@end table
Default is @samp{smear}.

@end table

@subsection Examples

@itemize
@item
Add ripple effect to rgb input of video size hd720:
@example
ffmpeg -i INPUT -f lavfi -i nullsrc=s=hd720,lutrgb=128:128:128 -f lavfi -i nullsrc=s=hd720,geq='r=128+30*sin(2*PI*X/400+T):g=128+30*sin(2*PI*X/400+T):b=128+30*sin(2*PI*X/400+T)' -lavfi '[0][1][2]displace' OUTPUT
@end example

@item
Add wave effect to rgb input of video size hd720:
@example
ffmpeg -i INPUT -f lavfi -i nullsrc=hd720,geq='r=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T)):g=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T)):b=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T))' -lavfi '[1]split[x][y],[0][x][y]displace' OUTPUT
@end example
@end itemize

@anchor{dnn_processing}
@section dnn_processing

Do image processing with deep neural networks. It works together with another filter
which converts the pixel format of the Frame to what the dnn network requires.

The filter accepts the following options:

@table @option
@item dnn_backend
Specify which DNN backend to use for model loading and execution. This option accepts
the following values:

@table @samp
@item native
Native implementation of DNN loading and execution.

@item tensorflow
TensorFlow backend. To enable this backend you
need to install the TensorFlow for C library (see
@url{https://www.tensorflow.org/install/install_c}) and configure FFmpeg with
@code{--enable-libtensorflow}

@item openvino
OpenVINO backend. To enable this backend you
need to build and install the OpenVINO for C library (see
@url{https://github.com/openvinotoolkit/openvino/blob/master/build-instruction.md}) and configure FFmpeg with
@code{--enable-libopenvino} (--extra-cflags=-I... --extra-ldflags=-L... might
be needed if the header files and libraries are not installed into system path)

@end table

Default value is @samp{native}.

@item model
Set path to model file specifying network architecture and its parameters.
Note that different backends use different file formats. TensorFlow, OpenVINO and native
backend can load files for only its format.

Native model file (.model) can be generated from TensorFlow model file (.pb) by using tools/python/convert.py

@item input
Set the input name of the dnn network.

@item output
Set the output name of the dnn network.

@item async
use DNN async execution if set (default: set),
roll back to sync execution if the backend does not support async.

@end table

@subsection Examples

@itemize
@item
Remove rain in rgb24 frame with can.pb (see @ref{derain} filter):
@example
./ffmpeg -i rain.jpg -vf format=rgb24,dnn_processing=dnn_backend=tensorflow:model=can.pb:input=x:output=y derain.jpg
@end example

@item
Halve the pixel value of the frame with format gray32f:
@example
ffmpeg -i input.jpg -vf format=grayf32,dnn_processing=model=halve_gray_float.model:input=dnn_in:output=dnn_out:dnn_backend=native -y out.native.png
@end example

@item
Handle the Y channel with srcnn.pb (see @ref{sr} filter) for frame with yuv420p (planar YUV formats supported):
@example
./ffmpeg -i 480p.jpg -vf format=yuv420p,scale=w=iw*2:h=ih*2,dnn_processing=dnn_backend=tensorflow:model=srcnn.pb:input=x:output=y -y srcnn.jpg
@end example

@item
Handle the Y channel with espcn.pb (see @ref{sr} filter), which changes frame size, for format yuv420p (planar YUV formats supported):
@example
./ffmpeg -i 480p.jpg -vf format=yuv420p,dnn_processing=dnn_backend=tensorflow:model=espcn.pb:input=x:output=y -y tmp.espcn.jpg
@end example

@end itemize

@section drawbox

Draw a colored box on the input image.

It accepts the following parameters:

@table @option
@item x
@item y
The expressions which specify the top left corner coordinates of the box. It defaults to 0.

@item width, w
@item height, h
The expressions which specify the width and height of the box; if 0 they are interpreted as
the input width and height. It defaults to 0.

@item color, c
Specify the color of the box to write. For the general syntax of this option,
check the @ref{color syntax,,"Color" section in the ffmpeg-utils manual,ffmpeg-utils}. If the special
value @code{invert} is used, the box edge color is the same as the
video with inverted luma.

@item thickness, t
The expression which sets the thickness of the box edge.
A value of @code{fill} will create a filled box. Default value is @code{3}.

See below for the list of accepted constants.

@item replace
Applicable if the input has alpha. With value @code{1}, the pixels of the painted box
will overwrite the video's color and alpha pixels.
Default is @code{0}, which composites the box onto the input, leaving the video's alpha intact.
@end table

The parameters for @var{x}, @var{y}, @var{w} and @var{h} and @var{t} are expressions containing the
following constants:

@table @option
@item dar
The input display aspect ratio, it is the same as (@var{w} / @var{h}) * @var{sar}.

@item hsub
@item vsub
horizontal and vertical chroma subsample values. For example for the
pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1.

@item in_h, ih
@item in_w, iw
The input width and height.

@item sar
The input sample aspect ratio.

@item x
@item y
The x and y offset coordinates where the box is drawn.

@item w
@item h
The width and height of the drawn box.

@item t
The thickness of the drawn box.

These constants allow the @var{x}, @var{y}, @var{w}, @var{h} and @var{t} expressions to refer to
each other, so you may for example specify @code{y=x/dar} or @code{h=w/dar}.

@end table

@subsection Examples

@itemize
@item
Draw a black box around the edge of the input image:
@example
drawbox
@end example

@item
Draw a box with color red and an opacity of 50%:
@example
drawbox=10:20:200:60:red@@0.5
@end example

The previous example can be specified as:
@example
drawbox=x=10:y=20:w=200:h=60:color=red@@0.5
@end example

@item
Fill the box with pink color:
@example
drawbox=x=10:y=10:w=100:h=100:color=pink@@0.5:t=fill
@end example

@item
Draw a 2-pixel red 2.40:1 mask:
@example
drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red
@end example
@end itemize

@subsection Commands
This filter supports same commands as options.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@anchor{drawgraph}
@section drawgraph
Draw a graph using input video metadata.

It accepts the following parameters:

@table @option
@item m1
Set 1st frame metadata key from which metadata values will be used to draw a graph.

@item fg1
Set 1st foreground color expression.

@item m2
Set 2nd frame metadata key from which metadata values will be used to draw a graph.

@item fg2
Set 2nd foreground color expression.

@item m3
Set 3rd frame metadata key from which metadata values will be used to draw a graph.

@item fg3
Set 3rd foreground color expression.

@item m4
Set 4th frame metadata key from which metadata values will be used to draw a graph.

@item fg4
Set 4th foreground color expression.

@item min
Set minimal value of metadata value.

@item max
Set maximal value of metadata value.

@item bg
Set graph background color. Default is white.

@item mode
Set graph mode.

Available values for mode is:
@table @samp
@item bar
@item dot
@item line
@end table

Default is @code{line}.

@item slide
Set slide mode.

Available values for slide is:
@table @samp
@item frame
Draw new frame when right border is reached.

@item replace
Replace old columns with new ones.

@item scroll
Scroll from right to left.

@item rscroll
Scroll from left to right.

@item picture
Draw single picture.
@end table

Default is @code{frame}.

@item size
Set size of graph video. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
The default value is @code{900x256}.

@item rate, r
Set the output frame rate. Default value is @code{25}.

The foreground color expressions can use the following variables:
@table @option
@item MIN
Minimal value of metadata value.

@item MAX
Maximal value of metadata value.

@item VAL
Current metadata key value.
@end table

The color is defined as 0xAABBGGRR.
@end table

Example using metadata from @ref{signalstats} filter:
@example
signalstats,drawgraph=lavfi.signalstats.YAVG:min=0:max=255
@end example

Example using metadata from @ref{ebur128} filter:
@example
ebur128=metadata=1,adrawgraph=lavfi.r128.M:min=-120:max=5
@end example

@section drawgrid

Draw a grid on the input image.

It accepts the following parameters:

@table @option
@item x
@item y
The expressions which specify the coordinates of some point of grid intersection (meant to configure offset). Both default to 0.

@item width, w
@item height, h
The expressions which specify the width and height of the grid cell, if 0 they are interpreted as the
input width and height, respectively, minus @code{thickness}, so image gets
framed. Default to 0.

@item color, c
Specify the color of the grid. For the general syntax of this option,
check the @ref{color syntax,,"Color" section in the ffmpeg-utils manual,ffmpeg-utils}. If the special
value @code{invert} is used, the grid color is the same as the
video with inverted luma.

@item thickness, t
The expression which sets the thickness of the grid line. Default value is @code{1}.

See below for the list of accepted constants.

@item replace
Applicable if the input has alpha. With @code{1} the pixels of the painted grid
will overwrite the video's color and alpha pixels.
Default is @code{0}, which composites the grid onto the input, leaving the video's alpha intact.
@end table

The parameters for @var{x}, @var{y}, @var{w} and @var{h} and @var{t} are expressions containing the
following constants:

@table @option
@item dar
The input display aspect ratio, it is the same as (@var{w} / @var{h}) * @var{sar}.

@item hsub
@item vsub
horizontal and vertical chroma subsample values. For example for the
pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1.

@item in_h, ih
@item in_w, iw
The input grid cell width and height.

@item sar
The input sample aspect ratio.

@item x
@item y
The x and y coordinates of some point of grid intersection (meant to configure offset).

@item w
@item h
The width and height of the drawn cell.

@item t
The thickness of the drawn cell.

These constants allow the @var{x}, @var{y}, @var{w}, @var{h} and @var{t} expressions to refer to
each other, so you may for example specify @code{y=x/dar} or @code{h=w/dar}.

@end table

@subsection Examples

@itemize
@item
Draw a grid with cell 100x100 pixels, thickness 2 pixels, with color red and an opacity of 50%:
@example
drawgrid=width=100:height=100:thickness=2:color=red@@0.5
@end example

@item
Draw a white 3x3 grid with an opacity of 50%:
@example
drawgrid=w=iw/3:h=ih/3:t=2:c=white@@0.5
@end example
@end itemize

@subsection Commands
This filter supports same commands as options.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@anchor{drawtext}
@section drawtext

Draw a text string or text from a specified file on top of a video, using the
libfreetype library.

To enable compilation of this filter, you need to configure FFmpeg with
@code{--enable-libfreetype}.
To enable default font fallback and the @var{font} option you need to
configure FFmpeg with @code{--enable-libfontconfig}.
To enable the @var{text_shaping} option, you need to configure FFmpeg with
@code{--enable-libfribidi}.

@subsection Syntax

It accepts the following parameters:

@table @option

@item box
Used to draw a box around text using the background color.
The value must be either 1 (enable) or 0 (disable).
The default value of @var{box} is 0.

@item boxborderw
Set the width of the border to be drawn around the box using @var{boxcolor}.
The default value of @var{boxborderw} is 0.

@item boxcolor
The color to be used for drawing box around text. For the syntax of this
option, check the @ref{color syntax,,"Color" section in the ffmpeg-utils manual,ffmpeg-utils}.

The default value of @var{boxcolor} is "white".

@item line_spacing
Set the line spacing in pixels of the border to be drawn around the box using @var{box}.
The default value of @var{line_spacing} is 0.

@item borderw
Set the width of the border to be drawn around the text using @var{bordercolor}.
The default value of @var{borderw} is 0.

@item bordercolor
Set the color to be used for drawing border around text. For the syntax of this
option, check the @ref{color syntax,,"Color" section in the ffmpeg-utils manual,ffmpeg-utils}.

The default value of @var{bordercolor} is "black".

@item expansion
Select how the @var{text} is expanded. Can be either @code{none},
@code{strftime} (deprecated) or
@code{normal} (default). See the @ref{drawtext_expansion, Text expansion} section
below for details.

@item basetime
Set a start time for the count. Value is in microseconds. Only applied
in the deprecated strftime expansion mode. To emulate in normal expansion
mode use the @code{pts} function, supplying the start time (in seconds)
as the second argument.

@item fix_bounds
If true, check and fix text coords to avoid clipping.

@item fontcolor
The color to be used for drawing fonts. For the syntax of this option, check
the @ref{color syntax,,"Color" section in the ffmpeg-utils manual,ffmpeg-utils}.

The default value of @var{fontcolor} is "black".

@item fontcolor_expr
String which is expanded the same way as @var{text} to obtain dynamic
@var{fontcolor} value. By default this option has empty value and is not
processed. When this option is set, it overrides @var{fontcolor} option.

@item font
The font family to be used for drawing text. By default Sans.

@item fontfile
The font file to be used for drawing text. The path must be included.
This parameter is mandatory if the fontconfig support is disabled.

@item alpha
Draw the text applying alpha blending. The value can
be a number between 0.0 and 1.0.
The expression accepts the same variables @var{x, y} as well.
The default value is 1.
Please see @var{fontcolor_expr}.

@item fontsize
The font size to be used for drawing text.
The default value of @var{fontsize} is 16.

@item text_shaping
If set to 1, attempt to shape the text (for example, reverse the order of
right-to-left text and join Arabic characters) before drawing it.
Otherwise, just draw the text exactly as given.
By default 1 (if supported).

@item ft_load_flags
The flags to be used for loading the fonts.

The flags map the corresponding flags supported by libfreetype, and are
a combination of the following values:
@table @var
@item default
@item no_scale
@item no_hinting
@item render
@item no_bitmap
@item vertical_layout
@item force_autohint
@item crop_bitmap
@item pedantic
@item ignore_global_advance_width
@item no_recurse
@item ignore_transform
@item monochrome
@item linear_design
@item no_autohint
@end table

Default value is "default".

For more information consult the documentation for the FT_LOAD_*
libfreetype flags.

@item shadowcolor
The color to be used for drawing a shadow behind the drawn text. For the
syntax of this option, check the @ref{color syntax,,"Color" section in the
ffmpeg-utils manual,ffmpeg-utils}.

The default value of @var{shadowcolor} is "black".

@item shadowx
@item shadowy
The x and y offsets for the text shadow position with respect to the
position of the text. They can be either positive or negative
values. The default value for both is "0".

@item start_number
The starting frame number for the n/frame_num variable. The default value
is "0".

@item tabsize
The size in number of spaces to use for rendering the tab.
Default value is 4.

@item timecode
Set the initial timecode representation in "hh:mm:ss[:;.]ff"
format. It can be used with or without text parameter. @var{timecode_rate}
option must be specified.

@item timecode_rate, rate, r
Set the timecode frame rate (timecode only). Value will be rounded to nearest
integer. Minimum value is "1".
Drop-frame timecode is supported for frame rates 30 & 60.

@item tc24hmax
If set to 1, the output of the timecode option will wrap around at 24 hours.
Default is 0 (disabled).

@item text
The text string to be drawn. The text must be a sequence of UTF-8
encoded characters.
This parameter is mandatory if no file is specified with the parameter
@var{textfile}.

@item textfile
A text file containing text to be drawn. The text must be a sequence
of UTF-8 encoded characters.

This parameter is mandatory if no text string is specified with the
parameter @var{text}.

If both @var{text} and @var{textfile} are specified, an error is thrown.

@item reload
If set to 1, the @var{textfile} will be reloaded before each frame.
Be sure to update it atomically, or it may be read partially, or even fail.

@item x
@item y
The expressions which specify the offsets where text will be drawn
within the video frame. They are relative to the top/left border of the
output image.

The default value of @var{x} and @var{y} is "0".

See below for the list of accepted constants and functions.
@end table

The parameters for @var{x} and @var{y} are expressions containing the
following constants and functions:

@table @option
@item dar
input display aspect ratio, it is the same as (@var{w} / @var{h}) * @var{sar}

@item hsub
@item vsub
horizontal and vertical chroma subsample values. For example for the
pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1.

@item line_h, lh
the height of each text line

@item main_h, h, H
the input height

@item main_w, w, W
the input width

@item max_glyph_a, ascent
the maximum distance from the baseline to the highest/upper grid
coordinate used to place a glyph outline point, for all the rendered
glyphs.
It is a positive value, due to the grid's orientation with the Y axis
upwards.

@item max_glyph_d, descent
the maximum distance from the baseline to the lowest grid coordinate
used to place a glyph outline point, for all the rendered glyphs.
This is a negative value, due to the grid's orientation, with the Y axis
upwards.

@item max_glyph_h
maximum glyph height, that is the maximum height for all the glyphs
contained in the rendered text, it is equivalent to @var{ascent} -
@var{descent}.

@item max_glyph_w
maximum glyph width, that is the maximum width for all the glyphs
contained in the rendered text

@item n
the number of input frame, starting from 0

@item rand(min, max)
return a random number included between @var{min} and @var{max}

@item sar
The input sample aspect ratio.

@item t
timestamp expressed in seconds, NAN if the input timestamp is unknown

@item text_h, th
the height of the rendered text

@item text_w, tw
the width of the rendered text

@item x
@item y
the x and y offset coordinates where the text is drawn.

These parameters allow the @var{x} and @var{y} expressions to refer
to each other, so you can for example specify @code{y=x/dar}.

@item pict_type
A one character description of the current frame's picture type.

@item pkt_pos
The current packet's position in the input file or stream
(in bytes, from the start of the input). A value of -1 indicates
this info is not available.

@item pkt_duration
The current packet's duration, in seconds.

@item pkt_size
The current packet's size (in bytes).
@end table

@anchor{drawtext_expansion}
@subsection Text expansion

If @option{expansion} is set to @code{strftime},
the filter recognizes strftime() sequences in the provided text and
expands them accordingly. Check the documentation of strftime(). This
feature is deprecated.

If @option{expansion} is set to @code{none}, the text is printed verbatim.

If @option{expansion} is set to @code{normal} (which is the default),
the following expansion mechanism is used.

The backslash character @samp{\}, followed by any character, always expands to
the second character.

Sequences of the form @code{%@{...@}} are expanded. The text between the
braces is a function name, possibly followed by arguments separated by ':'.
If the arguments contain special characters or delimiters (':' or '@}'),
they should be escaped.

Note that they probably must also be escaped as the value for the
@option{text} option in the filter argument string and as the filter
argument in the filtergraph description, and possibly also for the shell,
that makes up to four levels of escaping; using a text file avoids these
problems.

The following functions are available:

@table @command

@item expr, e
The expression evaluation result.

It must take one argument specifying the expression to be evaluated,
which accepts the same constants and functions as the @var{x} and
@var{y} values. Note that not all constants should be used, for
example the text size is not known when evaluating the expression, so
the constants @var{text_w} and @var{text_h} will have an undefined
value.

@item expr_int_format, eif
Evaluate the expression's value and output as formatted integer.

The first argument is the expression to be evaluated, just as for the @var{expr} function.
The second argument specifies the output format. Allowed values are @samp{x},
@samp{X}, @samp{d} and @samp{u}. They are treated exactly as in the
@code{printf} function.
The third parameter is optional and sets the number of positions taken by the output.
It can be used to add padding with zeros from the left.

@item gmtime
The time at which the filter is running, expressed in UTC.
It can accept an argument: a strftime() format string.

@item localtime
The time at which the filter is running, expressed in the local time zone.
It can accept an argument: a strftime() format string.

@item metadata
Frame metadata. Takes one or two arguments.

The first argument is mandatory and specifies the metadata key.

The second argument is optional and specifies a default value, used when the
metadata key is not found or empty.

Available metadata can be identified by inspecting entries
starting with TAG included within each frame section
printed by running @code{ffprobe -show_frames}.

String metadata generated in filters leading to
the drawtext filter are also available.

@item n, frame_num
The frame number, starting from 0.

@item pict_type
A one character description of the current picture type.

@item pts
The timestamp of the current frame.
It can take up to three arguments.

The first argument is the format of the timestamp; it defaults to @code{flt}
for seconds as a decimal number with microsecond accuracy; @code{hms} stands
for a formatted @var{[-]HH:MM:SS.mmm} timestamp with millisecond accuracy.
@code{gmtime} stands for the timestamp of the frame formatted as UTC time;
@code{localtime} stands for the timestamp of the frame formatted as
local time zone time.

The second argument is an offset added to the timestamp.

If the format is set to @code{hms}, a third argument @code{24HH} may be
supplied to present the hour part of the formatted timestamp in 24h format
(00-23).

If the format is set to @code{localtime} or @code{gmtime},
a third argument may be supplied: a strftime() format string.
By default, @var{YYYY-MM-DD HH:MM:SS} format will be used.
@end table

@subsection Commands

This filter supports altering parameters via commands:
@table @option
@item reinit
Alter existing filter parameters.

Syntax for the argument is the same as for filter invocation, e.g.

@example
fontsize=56:fontcolor=green:text='Hello World'
@end example

Full filter invocation with sendcmd would look like this:

@example
sendcmd=c='56.0 drawtext reinit fontsize=56\:fontcolor=green\:text=Hello\\ World'
@end example
@end table

If the entire argument can't be parsed or applied as valid values then the filter will
continue with its existing parameters.

@subsection Examples

@itemize
@item
Draw "Test Text" with font FreeSerif, using the default values for the
optional parameters.

@example
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
@end example

@item
Draw 'Test Text' with font FreeSerif of size 24 at position x=100
and y=50 (counting from the top-left corner of the screen), text is
yellow with a red box around it. Both the text and the box have an
opacity of 20%.

@example
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\
          x=100: y=50: fontsize=24: fontcolor=yellow@@0.2: box=1: boxcolor=red@@0.2"
@end example

Note that the double quotes are not necessary if spaces are not used
within the parameter list.

@item
Show the text at the center of the video frame:
@example
drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h)/2"
@end example

@item
Show the text at a random position, switching to a new position every 30 seconds:
@example
drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=if(eq(mod(t\,30)\,0)\,rand(0\,(w-text_w))\,x):y=if(eq(mod(t\,30)\,0)\,rand(0\,(h-text_h))\,y)"
@end example

@item
Show a text line sliding from right to left in the last row of the video
frame. The file @file{LONG_LINE} is assumed to contain a single line
with no newlines.
@example
drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
@end example

@item
Show the content of file @file{CREDITS} off the bottom of the frame and scroll up.
@example
drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
@end example

@item
Draw a single green letter "g", at the center of the input video.
The glyph baseline is placed at half screen height.
@example
drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
@end example

@item
Show text for 1 second every 3 seconds:
@example
drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
@end example

@item
Use fontconfig to set the font. Note that the colons need to be escaped.
@example
drawtext='fontfile=Linux Libertine O-40\:style=Semibold:text=FFmpeg'
@end example

@item
Draw "Test Text" with font size dependent on height of the video.
@example
drawtext="text='Test Text': fontsize=h/30: x=(w-text_w)/2: y=(h-text_h*2)"
@end example

@item
Print the date of a real-time encoding (see strftime(3)):
@example
drawtext='fontfile=FreeSans.ttf:text=%@{localtime\:%a %b %d %Y@}'
@end example

@item
Show text fading in and out (appearing/disappearing):
@example
#!/bin/sh
DS=1.0 # display start
DE=10.0 # display end
FID=1.5 # fade in duration
FOD=5 # fade out duration
ffplay -f lavfi "color,drawtext=text=TEST:fontsize=50:fontfile=FreeSerif.ttf:fontcolor_expr=ff0000%@{eif\\\\: clip(255*(1*between(t\\, $DS + $FID\\, $DE - $FOD) + ((t - $DS)/$FID)*between(t\\, $DS\\, $DS + $FID) + (-(t - $DE)/$FOD)*between(t\\, $DE - $FOD\\, $DE) )\\, 0\\, 255) \\\\: x\\\\: 2 @}"
@end example

@item
Horizontally align multiple separate texts. Note that @option{max_glyph_a}
and the @option{fontsize} value are included in the @option{y} offset.
@example
drawtext=fontfile=FreeSans.ttf:text=DOG:fontsize=24:x=10:y=20+24-max_glyph_a,
drawtext=fontfile=FreeSans.ttf:text=cow:fontsize=24:x=80:y=20+24-max_glyph_a
@end example

@item
Plot special @var{lavf.image2dec.source_basename} metadata onto each frame if
such metadata exists. Otherwise, plot the string "NA". Note that image2 demuxer
must have option @option{-export_path_metadata 1} for the special metadata fields
to be available for filters.
@example
drawtext="fontsize=20:fontcolor=white:fontfile=FreeSans.ttf:text='%@{metadata\:lavf.image2dec.source_basename\:NA@}':x=10:y=10"
@end example

@end itemize

For more information about libfreetype, check:
@url{http://www.freetype.org/}.

For more information about fontconfig, check:
@url{http://freedesktop.org/software/fontconfig/fontconfig-user.html}.

For more information about libfribidi, check:
@url{http://fribidi.org/}.

@section edgedetect

Detect and draw edges. The filter uses the Canny Edge Detection algorithm.

The filter accepts the following options:

@table @option
@item low
@item high
Set low and high threshold values used by the Canny thresholding
algorithm.

The high threshold selects the "strong" edge pixels, which are then
connected through 8-connectivity with the "weak" edge pixels selected
by the low threshold.

@var{low} and @var{high} threshold values must be chosen in the range
[0,1], and @var{low} should be lesser or equal to @var{high}.

Default value for @var{low} is @code{20/255}, and default value for @var{high}
is @code{50/255}.

@item mode
Define the drawing mode.

@table @samp
@item wires
Draw white/gray wires on black background.

@item colormix
Mix the colors to create a paint/cartoon effect.

@item canny
Apply Canny edge detector on all selected planes.
@end table
Default value is @var{wires}.

@item planes
Select planes for filtering. By default all available planes are filtered.
@end table

@subsection Examples

@itemize
@item
Standard edge detection with custom values for the hysteresis thresholding:
@example
edgedetect=low=0.1:high=0.4
@end example

@item
Painting effect without thresholding:
@example
edgedetect=mode=colormix:high=0
@end example
@end itemize

@section elbg

Apply a posterize effect using the ELBG (Enhanced LBG) algorithm.

For each input image, the filter will compute the optimal mapping from
the input to the output given the codebook length, that is the number
of distinct output colors.

This filter accepts the following options.

@table @option
@item codebook_length, l
Set codebook length. The value must be a positive integer, and
represents the number of distinct output colors. Default value is 256.

@item nb_steps, n
Set the maximum number of iterations to apply for computing the optimal
mapping. The higher the value the better the result and the higher the
computation time. Default value is 1.

@item seed, s
Set a random seed, must be an integer included between 0 and
UINT32_MAX. If not specified, or if explicitly set to -1, the filter
will try to use a good random seed on a best effort basis.

@item pal8
Set pal8 output pixel format. This option does not work with codebook
length greater than 256.
@end table

@section entropy

Measure graylevel entropy in histogram of color channels of video frames.

It accepts the following parameters:

@table @option
@item mode
Can be either @var{normal} or @var{diff}. Default is @var{normal}.

@var{diff} mode measures entropy of histogram delta values, absolute differences
between neighbour histogram values.
@end table

@section epx
Apply the EPX magnification filter which is designed for pixel art.

It accepts the following option:

@table @option
@item n
Set the scaling dimension: @code{2} for @code{2xEPX}, @code{3} for
@code{3xEPX}.
Default is @code{3}.
@end table

@section eq
Set brightness, contrast, saturation and approximate gamma adjustment.

The filter accepts the following options:

@table @option
@item contrast
Set the contrast expression. The value must be a float value in range
@code{-1000.0} to @code{1000.0}. The default value is "1".

@item brightness
Set the brightness expression. The value must be a float value in
range @code{-1.0} to @code{1.0}. The default value is "0".

@item saturation
Set the saturation expression. The value must be a float in
range @code{0.0} to @code{3.0}. The default value is "1".

@item gamma
Set the gamma expression. The value must be a float in range
@code{0.1} to @code{10.0}.  The default value is "1".

@item gamma_r
Set the gamma expression for red. The value must be a float in
range @code{0.1} to @code{10.0}. The default value is "1".

@item gamma_g
Set the gamma expression for green. The value must be a float in range
@code{0.1} to @code{10.0}. The default value is "1".

@item gamma_b
Set the gamma expression for blue. The value must be a float in range
@code{0.1} to @code{10.0}. The default value is "1".

@item gamma_weight
Set the gamma weight expression. It can be used to reduce the effect
of a high gamma value on bright image areas, e.g. keep them from
getting overamplified and just plain white. The value must be a float
in range @code{0.0} to @code{1.0}. A value of @code{0.0} turns the
gamma correction all the way down while @code{1.0} leaves it at its
full strength. Default is "1".

@item eval
Set when the expressions for brightness, contrast, saturation and
gamma expressions are evaluated.

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

Default value is @samp{init}.
@end table

The expressions accept the following parameters:
@table @option
@item n
frame count of the input frame starting from 0

@item pos
byte position of the corresponding packet in the input file, NAN if
unspecified

@item r
frame rate of the input video, NAN if the input frame rate is unknown

@item t
timestamp expressed in seconds, NAN if the input timestamp is unknown
@end table

@subsection Commands
The filter supports the following commands:

@table @option
@item contrast
Set the contrast expression.

@item brightness
Set the brightness expression.

@item saturation
Set the saturation expression.

@item gamma
Set the gamma expression.

@item gamma_r
Set the gamma_r expression.

@item gamma_g
Set gamma_g expression.

@item gamma_b
Set gamma_b expression.

@item gamma_weight
Set gamma_weight expression.

The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@end table

@section erosion

Apply erosion effect to the video.

This filter replaces the pixel by the local(3x3) minimum.

It accepts the following options:

@table @option
@item threshold0
@item threshold1
@item threshold2
@item threshold3
Limit the maximum change for each plane, default is 65535.
If 0, plane will remain unchanged.

@item coordinates
Flag which specifies the pixel to refer to. Default is 255 i.e. all eight
pixels are used.

Flags to local 3x3 coordinates maps like this:

    1 2 3
    4   5
    6 7 8
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section estdif

Deinterlace the input video ("estdif" stands for "Edge Slope
Tracing Deinterlacing Filter").

Spatial only filter that uses edge slope tracing algorithm
to interpolate missing lines.
It accepts the following parameters:

@table @option
@item mode
The interlacing mode to adopt. It accepts one of the following values:

@table @option
@item frame
Output one frame for each frame.
@item field
Output one frame for each field.
@end table

The default value is @code{field}.

@item parity
The picture field parity assumed for the input interlaced video. It accepts one
of the following values:

@table @option
@item tff
Assume the top field is first.
@item bff
Assume the bottom field is first.
@item 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 all
Deinterlace all frames.
@item interlaced
Only deinterlace frames marked as interlaced.
@end table

The default value is @code{all}.

@item rslope
Specify the search radius for edge slope tracing. Default value is 1.
Allowed range is from 1 to 15.

@item redge
Specify the search radius for best edge matching. Default value is 2.
Allowed range is from 0 to 15.

@item interp
Specify the interpolation used. Default is 4-point interpolation. It accepts one
of the following values:

@table @option
@item 2p
Two-point interpolation.
@item 4p
Four-point interpolation.
@item 6p
Six-point interpolation.
@end table
@end table

@subsection Commands
This filter supports same @ref{commands} as options.

@section exposure
Adjust exposure of the video stream.

The filter accepts the following options:

@table @option
@item exposure
Set the exposure correction in EV. Allowed range is from -3.0 to 3.0 EV
Default value is 0 EV.

@item black
Set the black level correction. Allowed range is from -1.0 to 1.0.
Default value is 0.
@end table

@subsection Commands

This filter supports same @ref{commands} as options.

@section extractplanes

Extract color channel components from input video stream into
separate grayscale video streams.

The filter accepts the following option:

@table @option
@item planes
Set plane(s) to extract.

Available values for planes are:
@table @samp
@item y
@item u
@item v
@item a
@item r
@item g
@item b
@end table

Choosing planes not available in the input will result in an error.
That means you cannot select @code{r}, @code{g}, @code{b} planes
with @code{y}, @code{u}, @code{v} planes at same time.
@end table

@subsection Examples

@itemize
@item
Extract luma, u and v color channel component from input video frame
into 3 grayscale outputs:
@example
ffmpeg -i video.avi -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]' y.avi -map '[u]' u.avi -map '[v]' v.avi
@end example
@end itemize

@section fade

Apply a fade-in/out effect to the input video.

It accepts the following parameters:

@table @option
@item type, t
The effect type can be either "in" for a fade-in, or "out" for a fade-out
effect.
Default is @code{in}.

@item start_frame, s
Specify the number of the frame to start applying the fade
effect at. Default is 0.

@item nb_frames, n
The number of frames that the fade effect lasts. At the end of the
fade-in effect, the output video will have the same intensity as the input video.
At the end of the fade-out transition, the output video will be filled with the
selected @option{color}.
Default is 25.

@item alpha
If set to 1, fade only alpha channel, if one exists on the input.
Default value is 0.

@item start_time, st
Specify the timestamp (in seconds) of the frame to start to apply the fade
effect. If both start_frame and start_time are specified, the fade will start at
whichever comes last.  Default is 0.

@item duration, d
The number of seconds for which the fade effect has to last. At the end of the
fade-in effect the output video will have the same intensity as the input video,
at the end of the fade-out transition the output video will be filled with the
selected @option{color}.
If both duration and nb_frames are specified, duration is used. Default is 0
(nb_frames is used by default).

@item color, c
Specify the color of the fade. Default is "black".
@end table

@subsection Examples

@itemize
@item
Fade in the first 30 frames of video:
@example
fade=in:0:30
@end example

The command above is equivalent to:
@example
fade=t=in:s=0:n=30
@end example

@item
Fade out the last 45 frames of a 200-frame video:
@example
fade=out:155:45
fade=type=out:start_frame=155:nb_frames=45
@end example

@item
Fade in the first 25 frames and fade out the last 25 frames of a 1000-frame video:
@example
fade=in:0:25, fade=out:975:25
@end example

@item
Make the first 5 frames yellow, then fade in from frame 5-24:
@example
fade=in:5:20:color=yellow
@end example

@item
Fade in alpha over first 25 frames of video:
@example
fade=in:0:25:alpha=1
@end example

@item
Make the first 5.5 seconds black, then fade in for 0.5 seconds:
@example
fade=t=in:st=5.5:d=0.5
@end example

@end itemize

@section fftdnoiz
Denoise frames using 3D FFT (frequency domain filtering).

The filter accepts the following options:

@table @option
@item sigma
Set the noise sigma constant. This sets denoising strength.
Default value is 1. Allowed range is from 0 to 30.
Using very high sigma with low overlap may give blocking artifacts.

@item amount
Set amount of denoising. By default all detected noise is reduced.
Default value is 1. Allowed range is from 0 to 1.

@item block
Set size of block, Default is 4, can be 3, 4, 5 or 6.
Actual size of block in pixels is 2 to power of @var{block}, so by default
block size in pixels is 2^4 which is 16.

@item overlap
Set block overlap. Default is 0.5. Allowed range is from 0.2 to 0.8.

@item prev
Set number of previous frames to use for denoising. By default is set to 0.

@item next
Set number of next frames to to use for denoising. By default is set to 0.

@item planes
Set planes which will be filtered, by default are all available filtered
except alpha.
@end table

@section fftfilt
Apply arbitrary expressions to samples in frequency domain

@table @option
@item dc_Y
Adjust the dc value (gain) of the luma plane of the image. The filter
accepts an integer value in range @code{0} to @code{1000}. The default
value is set to @code{0}.

@item dc_U
Adjust the dc value (gain) of the 1st chroma plane of the image. The
filter accepts an integer value in range @code{0} to @code{1000}. The
default value is set to @code{0}.

@item dc_V
Adjust the dc value (gain) of the 2nd chroma plane of the image. The
filter accepts an integer value in range @code{0} to @code{1000}. The
default value is set to @code{0}.

@item weight_Y
Set the frequency domain weight expression for the luma plane.

@item weight_U
Set the frequency domain weight expression for the 1st chroma plane.

@item weight_V
Set the frequency domain weight expression for the 2nd chroma plane.

@item eval
Set when the expressions are evaluated.

It accepts the following values:
@table @samp
@item init
Only evaluate expressions once during the filter initialization.

@item frame
Evaluate expressions for each incoming frame.
@end table

Default value is @samp{init}.

The filter accepts the following variables:
@item X
@item Y
The coordinates of the current sample.

@item W
@item H
The width and height of the image.

@item N
The number of input frame, starting from 0.
@end table

@subsection Examples

@itemize
@item
High-pass:
@example
fftfilt=dc_Y=128:weight_Y='squish(1-(Y+X)/100)'
@end example

@item
Low-pass:
@example
fftfilt=dc_Y=0:weight_Y='squish((Y+X)/100-1)'
@end example

@item
Sharpen:
@example
fftfilt=dc_Y=0:weight_Y='1+squish(1-(Y+X)/100)'
@end example

@item
Blur:
@example
fftfilt=dc_Y=0:weight_Y='exp(-4 * ((Y+X)/(W+H)))'
@end example

@end itemize

@section field

Extract a single field from an interlaced image using stride
arithmetic to avoid wasting CPU time. The output frames are marked as
non-interlaced.

The filter accepts the following options:

@table @option
@item type
Specify whether to extract the top (if the value is @code{0} or
@code{top}) or the bottom field (if the value is @code{1} or
@code{bottom}).
@end table

@section fieldhint

Create new frames by copying the top and bottom fields from surrounding frames
supplied as numbers by the hint file.

@table @option
@item hint
Set file containing hints: absolute/relative frame numbers.

There must be one line for each frame in a clip. Each line must contain two
numbers separated by the comma, optionally followed by @code{-} or @code{+}.
Numbers supplied on each line of file can not be out of [N-1,N+1] where N
is current frame number for @code{absolute} mode or out of [-1, 1] range
for @code{relative} mode. First number tells from which frame to pick up top
field and second number tells from which frame to pick up bottom field.

If optionally followed by @code{+} output frame will be marked as interlaced,
else if followed by @code{-} output frame will be marked as progressive, else
it will be marked same as input frame.
If optionally followed by @code{t} output frame will use only top field, or in
case of @code{b} it will use only bottom field.
If line starts with @code{#} or @code{;} that line is skipped.

@item mode
Can be item @code{absolute} or @code{relative}. Default is @code{absolute}.
@end table

Example of first several lines of @code{hint} file for @code{relative} mode:
@example
0,0 - # first frame
1,0 - # second frame, use third's frame top field and second's frame bottom field
1,0 - # third frame, use fourth's frame top field and third's frame bottom field
1,0 -
0,0 -
0,0 -
1,0 -
1,0 -
1,0 -
0,0 -
0,0 -
1,0 -
1,0 -
1,0 -
0,0 -
@end example

@section fieldmatch

Field matching filter for inverse telecine. It is meant to reconstruct the
progressive frames from a telecined stream. The filter does not drop duplicated
frames, so to achieve a complete inverse telecine @code{fieldmatch} needs to be
followed by a decimation filter such as @ref{decimate} in the filtergraph.

The separation of the field matching and the decimation is notably motivated by
the possibility of inserting a de-interlacing filter fallback between the two.
If the source has mixed telecined and real interlaced content,
@code{fieldmatch} will not be able to match fields for the interlaced parts.
But these remaining combed frames will be marked as interlaced, and thus can be
de-interlaced by a later filter such as @ref{yadif} before decimation.

In addition to the various configuration options, @code{fieldmatch} can take an
optional second stream, activated through the @option{ppsrc} option. If
enabled, the frames reconstruction will be based on the fields and frames from
this second stream. This allows the first input to be pre-processed in order to
help the various algorithms of the filter, while keeping the output lossless
(assuming the fields are matched properly). Typically, a field-aware denoiser,
or brightness/contrast adjustments can help.

Note that this filter uses the same algorithms as TIVTC/TFM (AviSynth project)
and VIVTC/VFM (VapourSynth project). The later is a light clone of TFM from
which @code{fieldmatch} is based on. While the semantic and usage are very
close, some behaviour and options names can differ.

The @ref{decimate} filter currently only works for constant frame rate input.
If your input has mixed telecined (30fps) and progressive content with a lower
framerate like 24fps use the following filterchain to produce the necessary cfr
stream: @code{dejudder,fps=30000/1001,fieldmatch,decimate}.

The filter accepts the following options:

@table @option
@item order
Specify the assumed field order of the input stream. Available values are:

@table @samp
@item auto
Auto detect parity (use FFmpeg's internal parity value).
@item bff
Assume bottom field first.
@item tff
Assume top field first.
@end table

Note that it is sometimes recommended not to trust the parity announced by the
stream.

Default value is @var{auto}.

@item mode
Set the matching mode or strategy to use. @option{pc} mode is the safest in the
sense that it won't risk creating jerkiness due to duplicate frames when
possible, but if there are bad edits or blended fields it will end up
outputting combed frames when a good match might actually exist. On the other
hand, @option{pcn_ub} mode is the most risky in terms of creating jerkiness,
but will almost always find a good frame if there is one. The other values are
all somewhere in between @option{pc} and @option{pcn_ub} in terms of risking
jerkiness and creating duplicate frames versus finding good matches in sections
with bad edits, orphaned fields, blended fields, etc.

More details about p/c/n/u/b are available in @ref{p/c/n/u/b meaning} section.

Available values are:

@table @samp
@item pc
2-way matching (p/c)
@item pc_n
2-way matching, and trying 3rd match if still combed (p/c + n)
@item pc_u
2-way matching, and trying 3rd match (same order) if still combed (p/c + u)
@item pc_n_ub
2-way matching, trying 3rd match if still combed, and trying 4th/5th matches if
still combed (p/c + n + u/b)
@item pcn
3-way matching (p/c/n)
@item pcn_ub
3-way matching, and trying 4th/5th matches if all 3 of the original matches are
detected as combed (p/c/n + u/b)
@end table

The parenthesis at the end indicate the matches that would be used for that
mode assuming @option{order}=@var{tff} (and @option{field} on @var{auto} or
@var{top}).

In terms of speed @option{pc} mode is by far the fastest and @option{pcn_ub} is
the slowest.

Default value is @var{pc_n}.

@item ppsrc
Mark the main input stream as a pre-processed input, and enable the secondary
input stream as the clean source to pick the fields from. See the filter
introduction for more details. It is similar to the @option{clip2} feature from
VFM/TFM.

Default value is @code{0} (disabled).

@item field
Set the field to match from. It is recommended to set this to the same value as
@option{order} unless you experience matching failures with that setting. In
certain circumstances changing the field that is used to match from can have a
large impact on matching performance. Available values are:

@table @samp
@item auto
Automatic (same value as @option{order}).
@item bottom
Match from the bottom field.
@item top
Match from the top field.
@end table

Default value is @var{auto}.

@item mchroma
Set whether or not chroma is included during the match comparisons. In most
cases it is recommended to leave this enabled. You should set this to @code{0}
only if your clip has bad chroma problems such as heavy rainbowing or other
artifacts. Setting this to @code{0} could also be used to speed things up at
the cost of some accuracy.

Default value is @code{1}.

@item y0
@item y1
These define an exclusion band which excludes the lines between @option{y0} and
@option{y1} from being included in the field matching decision. An exclusion
band can be used to ignore subtitles, a logo, or other things that may
interfere with the matching. @option{y0} sets the starting scan line and
@option{y1} sets the ending line; all lines in between @option{y0} and
@option{y1} (including @option{y0} and @option{y1}) will be ignored. Setting
@option{y0} and @option{y1} to the same value will disable the feature.
@option{y0} and @option{y1} defaults to @code{0}.

@item scthresh
Set the scene change detection threshold as a percentage of maximum change on
the luma plane. Good values are in the @code{[8.0, 14.0]} range. Scene change
detection is only relevant in case @option{combmatch}=@var{sc}.  The range for
@option{scthresh} is @code{[0.0, 100.0]}.

Default value is @code{12.0}.

@item combmatch
When @option{combatch} is not @var{none}, @code{fieldmatch} will take into
account the combed scores of matches when deciding what match to use as the
final match. Available values are:

@table @samp
@item none
No final matching based on combed scores.
@item sc
Combed scores are only used when a scene change is detected.
@item full
Use combed scores all the time.
@end table

Default is @var{sc}.

@item combdbg
Force @code{fieldmatch} to calculate the combed metrics for certain matches and
print them. This setting is known as @option{micout} in TFM/VFM vocabulary.
Available values are:

@table @samp
@item none
No forced calculation.
@item pcn
Force p/c/n calculations.
@item pcnub
Force p/c/n/u/b calculations.
@end table

Default value is @var{none}.

@item cthresh
This is the area combing threshold used for combed frame detection. This
essentially controls how "strong" or "visible" combing must be to be detected.
Larger values mean combing must be more visible and smaller values mean combing
can be less visible or strong and still be detected. Valid settings are from
@code{-1} (every pixel will be detected as combed) to @code{255} (no pixel will
be detected as combed). This is basically a pixel difference value. A good
range is @code{[8, 12]}.

Default value is @code{9}.

@item chroma
Sets whether or not chroma is considered in the combed frame decision.  Only
disable this if your source has chroma problems (rainbowing, etc.) that are
causing problems for the combed frame detection with chroma enabled. Actually,
using @option{chroma}=@var{0} is usually more reliable, except for the case
where there is chroma only combing in the source.

Default value is @code{0}.

@item blockx
@item blocky
Respectively set the x-axis and y-axis size of the window used during combed
frame detection. This has to do with the size of the area in which
@option{combpel} pixels are required to be detected as combed for a frame to be
declared combed. See the @option{combpel} parameter description for more info.
Possible values are any number that is a power of 2 starting at 4 and going up
to 512.

Default value is @code{16}.

@item combpel
The number of combed pixels inside any of the @option{blocky} by
@option{blockx} size blocks on the frame for the frame to be detected as
combed. While @option{cthresh} controls how "visible" the combing must be, this
setting controls "how much" combing there must be in any localized area (a
window defined by the @option{blockx} and @option{blocky} settings) on the
frame. Minimum value is @code{0} and maximum is @code{blocky x blockx} (at
which point no frames will ever be detected as combed). This setting is known
as @option{MI} in TFM/VFM vocabulary.

Default value is @code{80}.
@end table

@anchor{p/c/n/u/b meaning}
@subsection p/c/n/u/b meaning

@subsubsection p/c/n

We assume the following telecined stream:

@example
Top fields:     1 2 2 3 4
Bottom fields:  1 2 3 4 4
@end example

The numbers correspond to the progressive frame the fields relate to. Here, the
first two frames are progressive, the 3rd and 4th are combed, and so on.

When @code{fieldmatch} is configured to run a matching from bottom
(@option{field}=@var{bottom}) this is how this input stream get transformed:

@example
Input stream:
                T     1 2 2 3 4
                B     1 2 3 4 4   <-- matching reference

Matches:              c c n n c

Output stream:
                T     1 2 3 4 4
                B     1 2 3 4 4
@end example

As a result of the field matching, we can see that some frames get duplicated.
To perform a complete inverse telecine, you need to rely on a decimation filter
after this operation. See for instance the @ref{decimate} filter.

The same operation now matching from top fields (@option{field}=@var{top})
looks like this:

@example
Input stream:
                T     1 2 2 3 4   <-- matching reference
                B     1 2 3 4 4

Matches:              c c p p c

Output stream:
                T     1 2 2 3 4
                B     1 2 2 3 4
@end example

In these examples, we can see what @var{p}, @var{c} and @var{n} mean;
basically, they refer to the frame and field of the opposite parity:

@itemize
@item @var{p} matches the field of the opposite parity in the previous frame
@item @var{c} matches the field of the opposite parity in the current frame
@item @var{n} matches the field of the opposite parity in the next frame
@end itemize

@subsubsection u/b

The @var{u} and @var{b} matching are a bit special in the sense that they match
from the opposite parity flag. In the following examples, we assume that we are
currently matching the 2nd frame (Top:2, bottom:2). According to the match, a
'x' is placed above and below each matched fields.

With bottom matching (@option{field}=@var{bottom}):
@example
Match:           c         p           n          b          u

                 x       x               x        x          x
  Top          1 2 2     1 2 2       1 2 2      1 2 2      1 2 2
  Bottom       1 2 3     1 2 3       1 2 3      1 2 3      1 2 3
                 x         x           x        x              x

Output frames:
                 2          1          2          2          2
                 2          2          2          1          3
@end example

With top matching (@option{field}=@var{top}):
@example
Match:           c         p           n          b          u

                 x         x           x        x              x
  Top          1 2 2     1 2 2       1 2 2      1 2 2      1 2 2
  Bottom       1 2 3     1 2 3       1 2 3      1 2 3      1 2 3
                 x       x               x        x          x

Output frames:
                 2          2          2          1          2
                 2          1          3          2          2
@end example

@subsection Examples

Simple IVTC of a top field first telecined stream:
@example
fieldmatch=order=tff:combmatch=none, decimate
@end example

Advanced IVTC, with fallback on @ref{yadif} for still combed frames:
@example
fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate
@end example

@section fieldorder

Transform the field order of the input video.

It accepts the following parameters:

@table @option

@item order
The output field order. Valid values are @var{tff} for top field first or @var{bff}
for bottom field first.
@end table

The default value is @samp{tff}.

The transformation is done by shifting the picture content up or down
by one line, and filling the remaining line with appropriate picture content.
This method is consistent with most broadcast field order converters.

If the input video is not flagged as being interlaced, or it is already
flagged as being of the required output field order, then this filter does
not alter the incoming video.

It is very useful when converting to or from PAL DV material,
which is bottom field first.

For example:
@example
ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
@end example

@section fifo, afifo

Buffer input images and send them when they are requested.

It is mainly useful when auto-inserted by the libavfilter
framework.

It does not take parameters.

@section fillborders

Fill borders of the input video, without changing video stream dimensions.
Sometimes video can have garbage at the four edges and you may not want to
crop video input to keep size multiple of some number.

This filter accepts the following options:

@table @option
@item left
Number of pixels to fill from left border.

@item right
Number of pixels to fill from right border.

@item top
Number of pixels to fill from top border.

@item bottom
Number of pixels to fill from bottom border.

@item mode
Set fill mode.

It accepts the following values:
@table @samp
@item smear
fill pixels using outermost pixels

@item mirror
fill pixels using mirroring (half sample symmetric)

@item fixed
fill pixels with constant value

@item reflect
fill pixels using reflecting (whole sample symmetric)

@item wrap
fill pixels using wrapping

@item fade
fade pixels to constant value
@end table

Default is @var{smear}.

@item color
Set color for pixels in fixed or fade mode. Default is @var{black}.
@end table

@subsection Commands
This filter supports same @ref{commands} as options.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@section find_rect

Find a rectangular object

It accepts the following options:

@table @option
@item object
Filepath of the object image, needs to be in gray8.

@item threshold
Detection threshold, default is 0.5.

@item mipmaps
Number of mipmaps, default is 3.

@item xmin, ymin, xmax, ymax
Specifies the rectangle in which to search.
@end table

@subsection Examples

@itemize
@item
Cover a rectangular object by the supplied image of a given video using @command{ffmpeg}:
@example
ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
@end example
@end itemize

@section floodfill

Flood area with values of same pixel components with another values.

It accepts the following options:
@table @option
@item x
Set pixel x coordinate.

@item y
Set pixel y coordinate.

@item s0
Set source #0 component value.

@item s1
Set source #1 component value.

@item s2
Set source #2 component value.

@item s3
Set source #3 component value.

@item d0
Set destination #0 component value.

@item d1
Set destination #1 component value.

@item d2
Set destination #2 component value.

@item d3
Set destination #3 component value.
@end table

@anchor{format}
@section format

Convert the input video to one of the specified pixel formats.
Libavfilter will try to pick one that is suitable as input to
the next filter.

It accepts the following parameters:
@table @option

@item pix_fmts
A '|'-separated list of pixel format names, such as
"pix_fmts=yuv420p|monow|rgb24".

@end table

@subsection Examples

@itemize
@item
Convert the input video to the @var{yuv420p} format
@example
format=pix_fmts=yuv420p
@end example

Convert the input video to any of the formats in the list
@example
format=pix_fmts=yuv420p|yuv444p|yuv410p
@end example
@end itemize

@anchor{fps}
@section fps

Convert the video to specified constant frame rate by duplicating or dropping
frames as necessary.

It accepts the following parameters:
@table @option

@item fps
The desired output frame rate. The default is @code{25}.

@item start_time
Assume the first PTS should be the given value, in seconds. This allows for
padding/trimming at the start of stream. By default, no assumption is made
about the first frame's expected PTS, so no padding or trimming is done.
For example, this could be set to 0 to pad the beginning with duplicates of
the first frame if a video stream starts after the audio stream or to trim any
frames with a negative PTS.

@item round
Timestamp (PTS) rounding method.

Possible values are:
@table @option
@item zero
round towards 0
@item inf
round away from 0
@item down
round towards -infinity
@item up
round towards +infinity
@item near
round to nearest
@end table
The default is @code{near}.

@item eof_action
Action performed when reading the last frame.

Possible values are:
@table @option
@item round
Use same timestamp rounding method as used for other frames.
@item pass
Pass through last frame if input duration has not been reached yet.
@end table
The default is @code{round}.

@end table

Alternatively, the options can be specified as a flat string:
@var{fps}[:@var{start_time}[:@var{round}]].

See also the @ref{setpts} filter.

@subsection Examples

@itemize
@item
A typical usage in order to set the fps to 25:
@example
fps=fps=25
@end example

@item
Sets the fps to 24, using abbreviation and rounding method to round to nearest:
@example
fps=fps=film:round=near
@end example
@end itemize

@section framepack

Pack two different video streams into a stereoscopic video, setting proper
metadata on supported codecs. The two views should have the same size and
framerate and processing will stop when the shorter video ends. Please note
that you may conveniently adjust view properties with the @ref{scale} and
@ref{fps} filters.

It accepts the following parameters:
@table @option

@item format
The desired packing format. Supported values are:

@table @option

@item sbs
The views are next to each other (default).

@item tab
The views are on top of each other.

@item lines
The views are packed by line.

@item columns
The views are packed by column.

@item frameseq
The views are temporally interleaved.

@end table

@end table

Some examples:

@example
# Convert left and right views into a frame-sequential video
ffmpeg -i LEFT -i RIGHT -filter_complex framepack=frameseq OUTPUT

# Convert views into a side-by-side video with the same output resolution as the input
ffmpeg -i LEFT -i RIGHT -filter_complex [0:v]scale=w=iw/2[left],[1:v]scale=w=iw/2[right],[left][right]framepack=sbs OUTPUT
@end example

@section framerate

Change the frame rate by interpolating new video output frames from the source
frames.

This filter is not designed to function correctly with interlaced media. If
you wish to change the frame rate of interlaced media then you are required
to deinterlace before this filter and re-interlace after this filter.

A description of the accepted options follows.

@table @option
@item fps
Specify the output frames per second. This option can also be specified
as a value alone. The default is @code{50}.

@item interp_start
Specify the start of a range where the output frame will be created as a
linear interpolation of two frames. The range is [@code{0}-@code{255}],
the default is @code{15}.

@item interp_end
Specify the end of a range where the output frame will be created as a
linear interpolation of two frames. The range is [@code{0}-@code{255}],
the default is @code{240}.

@item scene
Specify the level at which a scene change is detected as a value between
0 and 100 to indicate a new scene; a low value reflects a low
probability for the current frame to introduce a new scene, while a higher
value means the current frame is more likely to be one.
The default is @code{8.2}.

@item flags
Specify flags influencing the filter process.

Available value for @var{flags} is:

@table @option
@item scene_change_detect, scd
Enable scene change detection using the value of the option @var{scene}.
This flag is enabled by default.
@end table
@end table

@section framestep

Select one frame every N-th frame.

This filter accepts the following option:
@table @option
@item step
Select frame after every @code{step} frames.
Allowed values are positive integers higher than 0. Default value is @code{1}.
@end table

@section freezedetect

Detect frozen video.

This filter logs a message and sets frame metadata when it detects that the
input video has no significant change in content during a specified duration.
Video freeze detection calculates the mean average absolute difference of all
the components of video frames and compares it to a noise floor.

The printed times and duration are expressed in seconds. The
@code{lavfi.freezedetect.freeze_start} metadata key is set on the first frame
whose timestamp equals or exceeds the detection duration and it contains the
timestamp of the first frame of the freeze. The
@code{lavfi.freezedetect.freeze_duration} and
@code{lavfi.freezedetect.freeze_end} metadata keys are set on the first frame
after the freeze.

The filter accepts the following options:

@table @option
@item noise, n
Set noise tolerance. Can be specified in dB (in case "dB" is appended to the
specified value) or as a difference ratio between 0 and 1. Default is -60dB, or
0.001.

@item duration, d
Set freeze duration until notification (default is 2 seconds).
@end table

@section freezeframes

Freeze video frames.

This filter freezes video frames using frame from 2nd input.

The filter accepts the following options:

@table @option
@item first
Set number of first frame from which to start freeze.

@item last
Set number of last frame from which to end freeze.

@item replace
Set number of frame from 2nd input which will be used instead of replaced frames.
@end table

@anchor{frei0r}
@section frei0r

Apply a frei0r effect to the input video.

To enable the compilation of this filter, you need to install the frei0r
header and configure FFmpeg with @code{--enable-frei0r}.

It accepts the following parameters:

@table @option

@item filter_name
The name of the frei0r effect to load. If the environment variable
@env{FREI0R_PATH} is defined, the frei0r effect is searched for in each of the
directories specified by the colon-separated list in @env{FREI0R_PATH}.
Otherwise, the standard frei0r paths are searched, in this order:
@file{HOME/.frei0r-1/lib/}, @file{/usr/local/lib/frei0r-1/},
@file{/usr/lib/frei0r-1/}.

@item filter_params
A '|'-separated list of parameters to pass to the frei0r effect.

@end table

A frei0r effect parameter can be a boolean (its value is either
"y" or "n"), a double, a color (specified as
@var{R}/@var{G}/@var{B}, where @var{R}, @var{G}, and @var{B} are floating point
numbers between 0.0 and 1.0, inclusive) or a color description as specified in the
@ref{color syntax,,"Color" section in the ffmpeg-utils manual,ffmpeg-utils},
a position (specified as @var{X}/@var{Y}, where
@var{X} and @var{Y} are floating point numbers) and/or a string.

The number and types of parameters depend on the loaded effect. If an
effect parameter is not specified, the default value is set.

@subsection Examples

@itemize
@item
Apply the distort0r effect, setting the first two double parameters:
@example
frei0r=filter_name=distort0r:filter_params=0.5|0.01
@end example

@item
Apply the colordistance effect, taking a color as the first parameter:
@example
frei0r=colordistance:0.2/0.3/0.4
frei0r=colordistance:violet
frei0r=colordistance:0x112233
@end example

@item
Apply the perspective effect, specifying the top left and top right image
positions:
@example
frei0r=perspective:0.2/0.2|0.8/0.2
@end example
@end itemize

For more information, see
@url{http://frei0r.dyne.org}

@subsection Commands

This filter supports the @option{filter_params} option as @ref{commands}.

@section fspp

Apply fast and simple postprocessing. It is a faster version of @ref{spp}.

It splits (I)DCT into horizontal/vertical passes. Unlike the simple post-
processing filter, one of them is performed once per block, not per pixel.
This allows for much higher speed.

The filter accepts the following options:

@table @option
@item quality
Set quality. This option defines the number of levels for averaging. It accepts
an integer in the range 4-5. Default value is @code{4}.

@item qp
Force a constant quantization parameter. It accepts an integer in range 0-63.
If not set, the filter will use the QP from the video stream (if available).

@item strength
Set filter strength. It accepts an integer in range -15 to 32. Lower values mean
more details but also more artifacts, while higher values make the image smoother
but also blurrier. Default value is @code{0} − PSNR optimal.

@item use_bframe_qp
Enable the use of the QP from the B-Frames if set to @code{1}. Using this
option may cause flicker since the B-Frames have often larger QP. Default is
@code{0} (not enabled).

@end table

@section gblur

Apply Gaussian blur filter.

The filter accepts the following options:

@table @option
@item sigma
Set horizontal sigma, standard deviation of Gaussian blur. Default is @code{0.5}.

@item steps
Set number of steps for Gaussian approximation. Default is @code{1}.

@item planes
Set which planes to filter. By default all planes are filtered.

@item sigmaV
Set vertical sigma, if negative it will be same as @code{sigma}.
Default is @code{-1}.
@end table

@subsection Commands
This filter supports same commands as options.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@section geq

Apply generic equation to each pixel.

The filter accepts the following options:

@table @option
@item lum_expr, lum
Set the luminance expression.
@item cb_expr, cb
Set the chrominance blue expression.
@item cr_expr, cr
Set the chrominance red expression.
@item alpha_expr, a
Set the alpha expression.
@item red_expr, r
Set the red expression.
@item green_expr, g
Set the green expression.
@item blue_expr, b
Set the blue expression.
@end table

The colorspace is selected according to the specified options. If one
of the @option{lum_expr}, @option{cb_expr}, or @option{cr_expr}
options is specified, the filter will automatically select a YCbCr
colorspace. If one of the @option{red_expr}, @option{green_expr}, or
@option{blue_expr} options is specified, it will select an RGB
colorspace.

If one of the chrominance expression is not defined, it falls back on the other
one. If no alpha expression is specified it will evaluate to opaque value.
If none of chrominance expressions are specified, they will evaluate
to the luminance expression.

The expressions can use the following variables and functions:

@table @option
@item N
The sequential number of the filtered frame, starting from @code{0}.

@item X
@item Y
The coordinates of the current sample.

@item W
@item H
The width and height of the image.

@item SW
@item SH
Width and height scale depending on the currently filtered plane. It is the
ratio between the corresponding luma plane number of pixels and the current
plane ones. E.g. for YUV4:2:0 the values are @code{1,1} for the luma plane, and
@code{0.5,0.5} for chroma planes.

@item T
Time of the current frame, expressed in seconds.

@item p(x, y)
Return the value of the pixel at location (@var{x},@var{y}) of the current
plane.

@item lum(x, y)
Return the value of the pixel at location (@var{x},@var{y}) of the luminance
plane.

@item cb(x, y)
Return the value of the pixel at location (@var{x},@var{y}) of the
blue-difference chroma plane. Return 0 if there is no such plane.

@item cr(x, y)
Return the value of the pixel at location (@var{x},@var{y}) of the
red-difference chroma plane. Return 0 if there is no such plane.

@item r(x, y)
@item g(x, y)
@item b(x, y)
Return the value of the pixel at location (@var{x},@var{y}) of the
red/green/blue component. Return 0 if there is no such component.

@item alpha(x, y)
Return the value of the pixel at location (@var{x},@var{y}) of the alpha
plane. Return 0 if there is no such plane.

@item psum(x,y), lumsum(x, y), cbsum(x,y), crsum(x,y), rsum(x,y), gsum(x,y), bsum(x,y), alphasum(x,y)
Sum of sample values in the rectangle from (0,0) to (x,y), this allows obtaining
sums of samples within a rectangle. See the functions without the sum postfix.

@item interpolation
Set one of interpolation methods:
@table @option
@item nearest, n
@item bilinear, b
@end table
Default is bilinear.
@end table

For functions, if @var{x} and @var{y} are outside the area, the value will be
automatically clipped to the closer edge.

Please note that this filter can use multiple threads in which case each slice
will have its own expression state. If you want to use only a single expression
state because your expressions depend on previous state then you should limit
the number of filter threads to 1.

@subsection Examples

@itemize
@item
Flip the image horizontally:
@example
geq=p(W-X\,Y)
@end example

@item
Generate a bidimensional sine wave, with angle @code{PI/3} and a
wavelength of 100 pixels:
@example
geq=128 + 100*sin(2*(PI/100)*(cos(PI/3)*(X-50*T) + sin(PI/3)*Y)):128:128
@end example

@item
Generate a fancy enigmatic moving light:
@example
nullsrc=s=256x256,geq=random(1)/hypot(X-cos(N*0.07)*W/2-W/2\,Y-sin(N*0.09)*H/2-H/2)^2*1000000*sin(N*0.02):128:128
@end example

@item
Generate a quick emboss effect:
@example
format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2'
@end example

@item
Modify RGB components depending on pixel position:
@example
geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)'
@end example

@item
Create a radial gradient that is the same size as the input (also see
the @ref{vignette} filter):
@example
geq=lum=255*gauss((X/W-0.5)*3)*gauss((Y/H-0.5)*3)/gauss(0)/gauss(0),format=gray
@end example
@end itemize

@section gradfun

Fix the banding artifacts that are sometimes introduced into nearly flat
regions by truncation to 8-bit color depth.
Interpolate the gradients that should go where the bands are, and
dither them.

It is designed for playback only.  Do not use it prior to
lossy compression, because compression tends to lose the dither and
bring back the bands.

It accepts the following parameters:

@table @option

@item strength
The maximum amount by which the filter will change any one pixel. This is also
the threshold for detecting nearly flat regions. Acceptable values range from
.51 to 64; the default value is 1.2. Out-of-range values will be clipped to the
valid range.

@item radius
The neighborhood to fit the gradient to. A larger radius makes for smoother
gradients, but also prevents the filter from modifying the pixels near detailed
regions. Acceptable values are 8-32; the default value is 16. Out-of-range
values will be clipped to the valid range.

@end table

Alternatively, the options can be specified as a flat string:
@var{strength}[:@var{radius}]

@subsection Examples

@itemize
@item
Apply the filter with a @code{3.5} strength and radius of @code{8}:
@example
gradfun=3.5:8
@end example

@item
Specify radius, omitting the strength (which will fall-back to the default
value):
@example
gradfun=radius=8
@end example

@end itemize

@anchor{graphmonitor}
@section graphmonitor
Show various filtergraph stats.

With this filter one can debug complete filtergraph.
Especially issues with links filling with queued frames.

The filter accepts the following options:

@table @option
@item size, s
Set video output size. Default is @var{hd720}.

@item opacity, o
Set video opacity. Default is @var{0.9}. Allowed range is from @var{0} to @var{1}.

@item mode, m
Set output mode, can be @var{fulll} or @var{compact}.
In @var{compact} mode only filters with some queued frames have displayed stats.

@item flags, f
Set flags which enable which stats are shown in video.

Available values for flags are:
@table @samp
@item queue
Display number of queued frames in each link.

@item frame_count_in
Display number of frames taken from filter.

@item frame_count_out
Display number of frames given out from filter.

@item pts
Display current filtered frame pts.

@item time
Display current filtered frame time.

@item timebase
Display time base for filter link.

@item format
Display used format for filter link.

@item size
Display video size or number of audio channels in case of audio used by filter link.

@item rate
Display video frame rate or sample rate in case of audio used by filter link.

@item eof
Display link output status.
@end table

@item rate, r
Set upper limit for video rate of output stream, Default value is @var{25}.
This guarantee that output video frame rate will not be higher than this value.
@end table

@section greyedge
A color constancy variation filter which estimates scene illumination via grey edge algorithm
and corrects the scene colors accordingly.

See: @url{https://staff.science.uva.nl/th.gevers/pub/GeversTIP07.pdf}

The filter accepts the following options:

@table @option
@item difford
The order of differentiation to be applied on the scene. Must be chosen in the range
[0,2] and default value is 1.

@item minknorm
The Minkowski parameter to be used for calculating the Minkowski distance. Must
be chosen in the range [0,20] and default value is 1. Set to 0 for getting
max value instead of calculating Minkowski distance.

@item sigma
The standard deviation of Gaussian blur to be applied on the scene. Must be
chosen in the range [0,1024.0] and default value = 1. floor( @var{sigma} * break_off_sigma(3) )
can't be equal to 0 if @var{difford} is greater than 0.
@end table

@subsection Examples
@itemize

@item
Grey Edge:
@example
greyedge=difford=1:minknorm=5:sigma=2
@end example

@item
Max Edge:
@example
greyedge=difford=1:minknorm=0:sigma=2
@end example

@end itemize

@anchor{haldclut}
@section haldclut

Apply a Hald CLUT to a video stream.

First input is the video stream to process, and second one is the Hald CLUT.
The Hald CLUT input can be a simple picture or a complete video stream.

The filter accepts the following options:

@table @option
@item shortest
Force termination when the shortest input terminates. Default is @code{0}.
@item repeatlast
Continue applying the last CLUT after the end of the stream. A value of
@code{0} disable the filter after the last frame of the CLUT is reached.
Default is @code{1}.
@end table

@code{haldclut} also has the same interpolation options as @ref{lut3d} (both
filters share the same internals).

This filter also supports the @ref{framesync} options.

More information about the Hald CLUT can be found on Eskil Steenberg's website
(Hald CLUT author) at @url{http://www.quelsolaar.com/technology/clut.html}.

@subsection Commands

This filter supports the @code{interp} option as @ref{commands}.

@subsection Workflow examples

@subsubsection Hald CLUT video stream

Generate an identity Hald CLUT stream altered with various effects:
@example
ffmpeg -f lavfi -i @ref{haldclutsrc}=8 -vf "hue=H=2*PI*t:s=sin(2*PI*t)+1, curves=cross_process" -t 10 -c:v ffv1 clut.nut
@end example

Note: make sure you use a lossless codec.

Then use it with @code{haldclut} to apply it on some random stream:
@example
ffmpeg -f lavfi -i mandelbrot -i clut.nut -filter_complex '[0][1] haldclut' -t 20 mandelclut.mkv
@end example

The Hald CLUT will be applied to the 10 first seconds (duration of
@file{clut.nut}), then the latest picture of that CLUT stream will be applied
to the remaining frames of the @code{mandelbrot} stream.

@subsubsection Hald CLUT with preview

A Hald CLUT is supposed to be a squared image of @code{Level*Level*Level} by
@code{Level*Level*Level} pixels. For a given Hald CLUT, FFmpeg will select the
biggest possible square starting at the top left of the picture. The remaining
padding pixels (bottom or right) will be ignored. This area can be used to add
a preview of the Hald CLUT.

Typically, the following generated Hald CLUT will be supported by the
@code{haldclut} filter:

@example
ffmpeg -f lavfi -i @ref{haldclutsrc}=8 -vf "
   pad=iw+320 [padded_clut];
   smptebars=s=320x256, split [a][b];
   [padded_clut][a] overlay=W-320:h, curves=color_negative [main];
   [main][b] overlay=W-320" -frames:v 1 clut.png
@end example

It contains the original and a preview of the effect of the CLUT: SMPTE color
bars are displayed on the right-top, and below the same color bars processed by
the color changes.

Then, the effect of this Hald CLUT can be visualized with:
@example
ffplay input.mkv -vf "movie=clut.png, [in] haldclut"
@end example

@section hflip

Flip the input video horizontally.

For example, to horizontally flip the input video with @command{ffmpeg}:
@example
ffmpeg -i in.avi -vf "hflip" out.avi
@end example

@section histeq
This filter applies a global color histogram equalization on a
per-frame basis.

It can be used to correct video that has a compressed range of pixel
intensities.  The filter redistributes the pixel intensities to
equalize their distribution across the intensity range. It may be
viewed as an "automatically adjusting contrast filter". This filter is
useful only for correcting degraded or poorly captured source
video.

The filter accepts the following options:

@table @option
@item strength
Determine the amount of equalization to be applied.  As the strength
is reduced, the distribution of pixel intensities more-and-more
approaches that of the input frame. The value must be a float number
in the range [0,1] and defaults to 0.200.

@item intensity
Set the maximum intensity that can generated and scale the output
values appropriately.  The strength should be set as desired and then
the intensity can be limited if needed to avoid washing-out. The value
must be a float number in the range [0,1] and defaults to 0.210.

@item antibanding
Set the antibanding level. If enabled the filter will randomly vary
the luminance of output pixels by a small amount to avoid banding of
the histogram. Possible values are @code{none}, @code{weak} or
@code{strong}. It defaults to @code{none}.
@end table

@anchor{histogram}
@section histogram

Compute and draw a color distribution histogram for the input video.

The computed histogram is a representation of the color component
distribution in an image.

Standard histogram displays the color components distribution in an image.
Displays color graph for each color component. Shows distribution of
the Y, U, V, A or R, G, B components, depending on input format, in the
current frame. Below each graph a color component scale meter is shown.

The filter accepts the following options:

@table @option
@item level_height
Set height of level. Default value is @code{200}.
Allowed range is [50, 2048].

@item scale_height
Set height of color scale. Default value is @code{12}.
Allowed range is [0, 40].

@item display_mode
Set display mode.
It accepts the following values:
@table @samp
@item stack
Per color component graphs are placed below each other.

@item parade
Per color component graphs are placed side by side.

@item overlay
Presents information identical to that in the @code{parade}, except
that the graphs representing color components are superimposed directly
over one another.
@end table
Default is @code{stack}.

@item levels_mode
Set mode. Can be either @code{linear}, or @code{logarithmic}.
Default is @code{linear}.

@item components
Set what color components to display.
Default is @code{7}.

@item fgopacity
Set foreground opacity. Default is @code{0.7}.

@item bgopacity
Set background opacity. Default is @code{0.5}.
@end table

@subsection Examples

@itemize

@item
Calculate and draw histogram:
@example
ffplay -i input -vf histogram
@end example

@end itemize

@anchor{hqdn3d}
@section hqdn3d

This is a high precision/quality 3d denoise filter. It aims to reduce
image noise, producing smooth images and making still images really
still. It should enhance compressibility.

It accepts the following optional parameters:

@table @option
@item luma_spatial
A non-negative floating point number which specifies spatial luma strength.
It defaults to 4.0.

@item chroma_spatial
A non-negative floating point number which specifies spatial chroma strength.
It defaults to 3.0*@var{luma_spatial}/4.0.

@item luma_tmp
A floating point number which specifies luma temporal strength. It defaults to
6.0*@var{luma_spatial}/4.0.

@item chroma_tmp
A floating point number which specifies chroma temporal strength. It defaults to
@var{luma_tmp}*@var{chroma_spatial}/@var{luma_spatial}.
@end table

@subsection Commands
This filter supports same @ref{commands} as options.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@anchor{hwdownload}
@section hwdownload

Download hardware frames to system memory.

The input must be in hardware frames, and the output a non-hardware format.
Not all formats will be supported on the output - it may be necessary to insert
an additional @option{format} filter immediately following in the graph to get
the output in a supported format.

@section hwmap

Map hardware frames to system memory or to another device.

This filter has several different modes of operation; which one is used depends
on the input and output formats:
@itemize
@item
Hardware frame input, normal frame output

Map the input frames to system memory and pass them to the output.  If the
original hardware frame is later required (for example, after overlaying
something else on part of it), the @option{hwmap} filter can be used again
in the next mode to retrieve it.
@item
Normal frame input, hardware frame output

If the input is actually a software-mapped hardware frame, then unmap it -
that is, return the original hardware frame.

Otherwise, a device must be provided.  Create new hardware surfaces on that
device for the output, then map them back to the software format at the input
and give those frames to the preceding filter.  This will then act like the
@option{hwupload} filter, but may be able to avoid an additional copy when
the input is already in a compatible format.
@item
Hardware frame input and output

A device must be supplied for the output, either directly or with the
@option{derive_device} option.  The input and output devices must be of
different types and compatible - the exact meaning of this is
system-dependent, but typically it means that they must refer to the same
underlying hardware context (for example, refer to the same graphics card).

If the input frames were originally created on the output device, then unmap
to retrieve the original frames.

Otherwise, map the frames to the output device - create new hardware frames
on the output corresponding to the frames on the input.
@end itemize

The following additional parameters are accepted:

@table @option
@item mode
Set the frame mapping mode.  Some combination of:
@table @var
@item read
The mapped frame should be readable.
@item write
The mapped frame should be writeable.
@item overwrite
The mapping will always overwrite the entire frame.

This may improve performance in some cases, as the original contents of the
frame need not be loaded.
@item direct
The mapping must not involve any copying.

Indirect mappings to copies of frames are created in some cases where either
direct mapping is not possible or it would have unexpected properties.
Setting this flag ensures that the mapping is direct and will fail if that is
not possible.
@end table
Defaults to @var{read+write} if not specified.

@item derive_device @var{type}
Rather than using the device supplied at initialisation, instead derive a new
device of type @var{type} from the device the input frames exist on.

@item reverse
In a hardware to hardware mapping, map in reverse - create frames in the sink
and map them back to the source.  This may be necessary in some cases where
a mapping in one direction is required but only the opposite direction is
supported by the devices being used.

This option is dangerous - it may break the preceding filter in undefined
ways if there are any additional constraints on that filter's output.
Do not use it without fully understanding the implications of its use.
@end table

@anchor{hwupload}
@section hwupload

Upload system memory frames to hardware surfaces.

The device to upload to must be supplied when the filter is initialised.  If
using ffmpeg, select the appropriate device with the @option{-filter_hw_device}
option or with the @option{derive_device} option.  The input and output devices
must be of different types and compatible - the exact meaning of this is
system-dependent, but typically it means that they must refer to the same
underlying hardware context (for example, refer to the same graphics card).

The following additional parameters are accepted:

@table @option
@item derive_device @var{type}
Rather than using the device supplied at initialisation, instead derive a new
device of type @var{type} from the device the input frames exist on.
@end table

@anchor{hwupload_cuda}
@section hwupload_cuda

Upload system memory frames to a CUDA device.

It accepts the following optional parameters:

@table @option
@item device
The number of the CUDA device to use
@end table

@section hqx

Apply a high-quality magnification filter designed for pixel art. This filter
was originally created by Maxim Stepin.

It accepts the following option:

@table @option
@item n
Set the scaling dimension: @code{2} for @code{hq2x}, @code{3} for
@code{hq3x} and @code{4} for @code{hq4x}.
Default is @code{3}.
@end table

@section hstack
Stack input videos horizontally.

All streams must be of same pixel format and of same height.

Note that this filter is faster than using @ref{overlay} and @ref{pad} filter
to create same output.

The filter accepts the following option:

@table @option
@item inputs
Set number of input streams. Default is 2.

@item shortest
If set to 1, force the output to terminate when the shortest input
terminates. Default value is 0.
@end table

@section hue

Modify the hue and/or the saturation of the input.

It accepts the following parameters:

@table @option
@item h
Specify the hue angle as a number of degrees. It accepts an expression,
and defaults to "0".

@item s
Specify the saturation in the [-10,10] range. It accepts an expression and
defaults to "1".

@item H
Specify the hue angle as a number of radians. It accepts an
expression, and defaults to "0".

@item b
Specify the brightness in the [-10,10] range. It accepts an expression and
defaults to "0".
@end table

@option{h} and @option{H} are mutually exclusive, and can't be
specified at the same time.

The @option{b}, @option{h}, @option{H} and @option{s} option values are
expressions containing the following constants:

@table @option
@item n
frame count of the input frame starting from 0

@item pts
presentation timestamp of the input frame expressed in time base units

@item r
frame rate of the input video, NAN if the input frame rate is unknown

@item t
timestamp expressed in seconds, NAN if the input timestamp is unknown

@item tb
time base of the input video
@end table

@subsection Examples

@itemize
@item
Set the hue to 90 degrees and the saturation to 1.0:
@example
hue=h=90:s=1
@end example

@item
Same command but expressing the hue in radians:
@example
hue=H=PI/2:s=1
@end example

@item
Rotate hue and make the saturation swing between 0
and 2 over a period of 1 second:
@example
hue="H=2*PI*t: s=sin(2*PI*t)+1"
@end example

@item
Apply a 3 seconds saturation fade-in effect starting at 0:
@example
hue="s=min(t/3\,1)"
@end example

The general fade-in expression can be written as:
@example
hue="s=min(0\, max((t-START)/DURATION\, 1))"
@end example

@item
Apply a 3 seconds saturation fade-out effect starting at 5 seconds:
@example
hue="s=max(0\, min(1\, (8-t)/3))"
@end example

The general fade-out expression can be written as:
@example
hue="s=max(0\, min(1\, (START+DURATION-t)/DURATION))"
@end example

@end itemize

@subsection Commands

This filter supports the following commands:
@table @option
@item b
@item s
@item h
@item H
Modify the hue and/or the saturation and/or brightness of the input video.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.
@end table

@section hysteresis

Grow first stream into second stream by connecting components.
This makes it possible to build more robust edge masks.

This filter accepts the following options:

@table @option
@item planes
Set which planes will be processed as bitmap, unprocessed planes will be
copied from first stream.
By default value 0xf, all planes will be processed.

@item threshold
Set threshold which is used in filtering. If pixel component value is higher than
this value filter algorithm for connecting components is activated.
By default value is 0.
@end table

The @code{hysteresis} filter also supports the @ref{framesync} options.

@section identity

Obtain the identity score between two input videos.

This filter takes two input videos.

Both input videos must have the same resolution and pixel format for
this filter to work correctly. Also it assumes that both inputs
have the same number of frames, which are compared one by one.

The obtained per component, average, min and max identity score is printed through
the logging system.

The filter stores the calculated identity scores of each frame in frame metadata.

In the below example the input file @file{main.mpg} being processed is compared
with the reference file @file{ref.mpg}.

@example
ffmpeg -i main.mpg -i ref.mpg -lavfi identity -f null -
@end example

@section idet

Detect video interlacing type.

This filter tries to detect if the input frames are interlaced, progressive,
top or bottom field first. It will also try to detect fields that are
repeated between adjacent frames (a sign of telecine).

Single frame detection considers only immediately adjacent frames when classifying each frame.
Multiple frame detection incorporates the classification history of previous frames.

The filter will log these metadata values:

@table @option
@item single.current_frame
Detected type of current frame using single-frame detection. One of:
``tff'' (top field first), ``bff'' (bottom field first),
``progressive'', or ``undetermined''

@item single.tff
Cumulative number of frames detected as top field first using single-frame detection.

@item multiple.tff
Cumulative number of frames detected as top field first using multiple-frame detection.

@item single.bff
Cumulative number of frames detected as bottom field first using single-frame detection.

@item multiple.current_frame
Detected type of current frame using multiple-frame detection. One of:
``tff'' (top field first), ``bff'' (bottom field first),
``progressive'', or ``undetermined''

@item multiple.bff
Cumulative number of frames detected as bottom field first using multiple-frame detection.

@item single.progressive
Cumulative number of frames detected as progressive using single-frame detection.

@item multiple.progressive
Cumulative number of frames detected as progressive using multiple-frame detection.

@item single.undetermined
Cumulative number of frames that could not be classified using single-frame detection.

@item multiple.undetermined
Cumulative number of frames that could not be classified using multiple-frame detection.

@item repeated.current_frame
Which field in the current frame is repeated from the last. One of ``neither'', ``top'', or ``bottom''.

@item repeated.neither
Cumulative number of frames with no repeated field.

@item repeated.top
Cumulative number of frames with the top field repeated from the previous frame's top field.

@item repeated.bottom
Cumulative number of frames with the bottom field repeated from the previous frame's bottom field.
@end table

The filter accepts the following options:

@table @option
@item intl_thres
Set interlacing threshold.
@item prog_thres
Set progressive threshold.
@item rep_thres
Threshold for repeated field detection.
@item half_life
Number of frames after which a given frame's contribution to the
statistics is halved (i.e., it contributes only 0.5 to its
classification). The default of 0 means that all frames seen are given
full weight of 1.0 forever.
@item analyze_interlaced_flag
When this is not 0 then idet will use the specified number of frames to determine
if the interlaced flag is accurate, it will not count undetermined frames.
If the flag is found to be accurate it will be used without any further
computations, if it is found to be inaccurate it will be cleared without any
further computations. This allows inserting the idet filter as a low computational
method to clean up the interlaced flag
@end table

@section il

Deinterleave or interleave fields.

This filter allows one to process interlaced images fields without
deinterlacing them. Deinterleaving splits the input frame into 2
fields (so called half pictures). Odd lines are moved to the top
half of the output image, even lines to the bottom half.
You can process (filter) them independently and then re-interleave them.

The filter accepts the following options:

@table @option
@item luma_mode, l
@item chroma_mode, c
@item alpha_mode, a
Available values for @var{luma_mode}, @var{chroma_mode} and
@var{alpha_mode} are:

@table @samp
@item none
Do nothing.

@item deinterleave, d
Deinterleave fields, placing one above the other.

@item interleave, i
Interleave fields. Reverse the effect of deinterleaving.
@end table
Default value is @code{none}.

@item luma_swap, ls
@item chroma_swap, cs
@item alpha_swap, as
Swap luma/chroma/alpha fields. Exchange even & odd lines. Default value is @code{0}.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section inflate

Apply inflate effect to the video.

This filter replaces the pixel by the local(3x3) average by taking into account
only values higher than the pixel.

It accepts the following options:

@table @option
@item threshold0
@item threshold1
@item threshold2
@item threshold3
Limit the maximum change for each plane, default is 65535.
If 0, plane will remain unchanged.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section interlace

Simple interlacing filter from progressive contents. This interleaves upper (or
lower) lines from odd frames with lower (or upper) lines from even frames,
halving the frame rate and preserving image height.

@example
   Original        Original             New Frame
   Frame 'j'      Frame 'j+1'             (tff)
  ==========      ===========       ==================
    Line 0  -------------------->    Frame 'j' Line 0
    Line 1          Line 1  ---->   Frame 'j+1' Line 1
    Line 2 --------------------->    Frame 'j' Line 2
    Line 3          Line 3  ---->   Frame 'j+1' Line 3
     ...             ...                   ...
New Frame + 1 will be generated by Frame 'j+2' and Frame 'j+3' and so on
@end example

It accepts the following optional parameters:

@table @option
@item scan
This determines whether the interlaced frame is taken from the even
(tff - default) or odd (bff) lines of the progressive frame.

@item lowpass
Vertical lowpass filter to avoid twitter interlacing and
reduce moire patterns.

@table @samp
@item 0, off
Disable vertical lowpass filter

@item 1, linear
Enable linear filter (default)

@item 2, complex
Enable complex filter. This will slightly less reduce twitter and moire
but better retain detail and subjective sharpness impression.

@end table
@end table

@section kerndeint

Deinterlace input video by applying Donald Graft's adaptive kernel
deinterling. Work on interlaced parts of a video to produce
progressive frames.

The description of the accepted parameters follows.

@table @option
@item thresh
Set the threshold which affects the filter's tolerance when
determining if a pixel line must be processed. It must be an integer
in the range [0,255] and defaults to 10. A value of 0 will result in
applying the process on every pixels.

@item map
Paint pixels exceeding the threshold value to white if set to 1.
Default is 0.

@item order
Set the fields order. Swap fields if set to 1, leave fields alone if
0. Default is 0.

@item sharp
Enable additional sharpening if set to 1. Default is 0.

@item twoway
Enable twoway sharpening if set to 1. Default is 0.
@end table

@subsection Examples

@itemize
@item
Apply default values:
@example
kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
@end example

@item
Enable additional sharpening:
@example
kerndeint=sharp=1
@end example

@item
Paint processed pixels in white:
@example
kerndeint=map=1
@end example
@end itemize

@section kirsch
Apply kirsch 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 lagfun

Slowly update darker pixels.

This filter makes short flashes of light appear longer.
This filter accepts the following options:

@table @option
@item decay
Set factor for decaying. Default is .95. Allowed range is from 0 to 1.

@item planes
Set which planes to filter. Default is all. Allowed range is from 0 to 15.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section lenscorrection

Correct radial lens distortion

This filter can be used to correct for radial distortion as can result from the use
of wide angle lenses, and thereby re-rectify the image. To find the right parameters
one can use tools available for example as part of opencv or simply trial-and-error.
To use opencv use the calibration sample (under samples/cpp) from the opencv sources
and extract the k1 and k2 coefficients from the resulting matrix.

Note that effectively the same filter is available in the open-source tools Krita and
Digikam from the KDE project.

In contrast to the @ref{vignette} filter, which can also be used to compensate lens errors,
this filter corrects the distortion of the image, whereas @ref{vignette} corrects the
brightness distribution, so you may want to use both filters together in certain
cases, though you will have to take care of ordering, i.e. whether vignetting should
be applied before or after lens correction.

@subsection Options

The filter accepts the following options:

@table @option
@item cx
Relative x-coordinate of the focal point of the image, and thereby the center of the
distortion. This value has a range [0,1] and is expressed as fractions of the image
width. Default is 0.5.
@item cy
Relative y-coordinate of the focal point of the image, and thereby the center of the
distortion. This value has a range [0,1] and is expressed as fractions of the image
height. Default is 0.5.
@item k1
Coefficient of the quadratic correction term. This value has a range [-1,1]. 0 means
no correction. Default is 0.
@item k2
Coefficient of the double quadratic correction term. This value has a range [-1,1].
0 means no correction. Default is 0.
@item i
Set interpolation type. Can be @code{nearest} or @code{bilinear}.
Default is @code{nearest}.
@item fc
Specify the color of the unmapped pixels. For the syntax of this option,
check the @ref{color syntax,,"Color" section in the ffmpeg-utils
manual,ffmpeg-utils}. Default color is @code{black@@0}.
@end table

The formula that generates the correction is:

@var{r_src} = @var{r_tgt} * (1 + @var{k1} * (@var{r_tgt} / @var{r_0})^2 + @var{k2} * (@var{r_tgt} / @var{r_0})^4)

where @var{r_0} is halve of the image diagonal and @var{r_src} and @var{r_tgt} are the
distances from the focal point in the source and target images, respectively.

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section lensfun

Apply lens correction via the lensfun library (@url{http://lensfun.sourceforge.net/}).

The @code{lensfun} filter requires the camera make, camera model, and lens model
to apply the lens correction. The filter will load the lensfun database and
query it to find the corresponding camera and lens entries in the database. As
long as these entries can be found with the given options, the filter can
perform corrections on frames. Note that incomplete strings will result in the
filter choosing the best match with the given options, and the filter will
output the chosen camera and lens models (logged with level "info"). You must
provide the make, camera model, and lens model as they are required.

The filter accepts the following options:

@table @option
@item make
The make of the camera (for example, "Canon"). This option is required.

@item model
The model of the camera (for example, "Canon EOS 100D"). This option is
required.

@item lens_model
The model of the lens (for example, "Canon EF-S 18-55mm f/3.5-5.6 IS STM"). This
option is required.

@item mode
The type of correction to apply. The following values are valid options:

@table @samp
@item vignetting
Enables fixing lens vignetting.

@item geometry
Enables fixing lens geometry. This is the default.

@item subpixel
Enables fixing chromatic aberrations.

@item vig_geo
Enables fixing lens vignetting and lens geometry.

@item vig_subpixel
Enables fixing lens vignetting and chromatic aberrations.

@item distortion
Enables fixing both lens geometry and chromatic aberrations.

@item all
Enables all possible corrections.

@end table
@item focal_length
The focal length of the image/video (zoom; expected constant for video). For
example, a 18--55mm lens has focal length range of [18--55], so a value in that
range should be chosen when using that lens. Default 18.

@item aperture
The aperture of the image/video (expected constant for video). Note that
aperture is only used for vignetting correction. Default 3.5.

@item focus_distance
The focus distance of the image/video (expected constant for video). Note that
focus distance is only used for vignetting and only slightly affects the
vignetting correction process. If unknown, leave it at the default value (which
is 1000).

@item scale
The scale factor which is applied after transformation. After correction the
video is no longer necessarily rectangular. This parameter controls how much of
the resulting image is visible. The value 0 means that a value will be chosen
automatically such that there is little or no unmapped area in the output
image. 1.0 means that no additional scaling is done. Lower values may result
in more of the corrected image being visible, while higher values may avoid
unmapped areas in the output.

@item target_geometry
The target geometry of the output image/video. The following values are valid
options:

@table @samp
@item rectilinear (default)
@item fisheye
@item panoramic
@item equirectangular
@item fisheye_orthographic
@item fisheye_stereographic
@item fisheye_equisolid
@item fisheye_thoby
@end table
@item reverse
Apply the reverse of image correction (instead of correcting distortion, apply
it).

@item interpolation
The type of interpolation used when correcting distortion. The following values
are valid options:

@table @samp
@item nearest
@item linear (default)
@item lanczos
@end table
@end table

@subsection Examples

@itemize
@item
Apply lens correction with make "Canon", camera model "Canon EOS 100D", and lens
model "Canon EF-S 18-55mm f/3.5-5.6 IS STM" with focal length of "18" and
aperture of "8.0".

@example
ffmpeg -i input.mov -vf lensfun=make=Canon:model="Canon EOS 100D":lens_model="Canon EF-S 18-55mm f/3.5-5.6 IS STM":focal_length=18:aperture=8 -c:v h264 -b:v 8000k output.mov
@end example

@item
Apply the same as before, but only for the first 5 seconds of video.

@example
ffmpeg -i input.mov -vf lensfun=make=Canon:model="Canon EOS 100D":lens_model="Canon EF-S 18-55mm f/3.5-5.6 IS STM":focal_length=18:aperture=8:enable='lte(t\,5)' -c:v h264 -b:v 8000k output.mov
@end example

@end itemize

@section libvmaf

Obtain the VMAF (Video Multi-Method Assessment Fusion)
score between two input videos.

The obtained VMAF score is printed through the logging system.

It requires Netflix's vmaf library (libvmaf) as a pre-requisite.
After installing the library it can be enabled using:
@code{./configure --enable-libvmaf}.
If no model path is specified it uses the default model: @code{vmaf_v0.6.1.pkl}.

The filter has following options:

@table @option
@item model_path
Set the model path which is to be used for SVM.
Default value: @code{"/usr/local/share/model/vmaf_v0.6.1.pkl"}

@item log_path
Set the file path to be used to store logs.

@item log_fmt
Set the format of the log file (csv, json or xml).

@item enable_transform
This option can enable/disable the @code{score_transform} applied to the final predicted VMAF score,
if you have specified score_transform option in the input parameter file passed to @code{run_vmaf_training.py}
Default value: @code{false}

@item phone_model
Invokes the phone model which will generate VMAF scores higher than in the
regular model, which is more suitable for laptop, TV, etc. viewing conditions.
Default value: @code{false}

@item psnr
Enables computing psnr along with vmaf.
Default value: @code{false}

@item ssim
Enables computing ssim along with vmaf.
Default value: @code{false}

@item ms_ssim
Enables computing ms_ssim along with vmaf.
Default value: @code{false}

@item pool
Set the pool method to be used for computing vmaf.
Options are @code{min}, @code{harmonic_mean} or @code{mean} (default).

@item n_threads
Set number of threads to be used when computing vmaf.
Default value: @code{0}, which makes use of all available logical processors.

@item n_subsample
Set interval for frame subsampling used when computing vmaf.
Default value: @code{1}

@item enable_conf_interval
Enables confidence interval.
Default value: @code{false}
@end table

This filter also supports the @ref{framesync} options.

@subsection Examples
@itemize
@item
On the below examples the input file @file{main.mpg} being processed is
compared with the reference file @file{ref.mpg}.

@example
ffmpeg -i main.mpg -i ref.mpg -lavfi libvmaf -f null -
@end example

@item
Example with options:
@example
ffmpeg -i main.mpg -i ref.mpg -lavfi libvmaf="psnr=1:log_fmt=json" -f null -
@end example

@item
Example with options and different containers:
@example
ffmpeg -i main.mpg -i ref.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]libvmaf=psnr=1:log_fmt=json" -f null -
@end example
@end itemize

@section limiter

Limits the pixel components values to the specified range [min, max].

The filter accepts the following options:

@table @option
@item min
Lower bound. Defaults to the lowest allowed value for the input.

@item max
Upper bound. Defaults to the highest allowed value for the input.

@item planes
Specify which planes will be processed. Defaults to all available.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section loop

Loop video frames.

The filter accepts the following options:

@table @option
@item loop
Set the number of loops. Setting this value to -1 will result in infinite loops.
Default is 0.

@item size
Set maximal size in number of frames. Default is 0.

@item start
Set first frame of loop. Default is 0.
@end table

@subsection Examples

@itemize
@item
Loop single first frame infinitely:
@example
loop=loop=-1:size=1:start=0
@end example

@item
Loop single first frame 10 times:
@example
loop=loop=10:size=1:start=0
@end example

@item
Loop 10 first frames 5 times:
@example
loop=loop=5:size=10:start=0
@end example
@end itemize

@section lut1d

Apply a 1D LUT to an input video.

The filter accepts the following options:

@table @option
@item file
Set the 1D LUT file name.

Currently supported formats:
@table @samp
@item cube
Iridas
@item csp
cineSpace
@end table

@item interp
Select interpolation mode.

Available values are:

@table @samp
@item nearest
Use values from the nearest defined point.
@item linear
Interpolate values using the linear interpolation.
@item cosine
Interpolate values using the cosine interpolation.
@item cubic
Interpolate values using the cubic interpolation.
@item spline
Interpolate values using the spline interpolation.
@end table
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@anchor{lut3d}
@section lut3d

Apply a 3D LUT to an input video.

The filter accepts the following options:

@table @option
@item file
Set the 3D LUT file name.

Currently supported formats:
@table @samp
@item 3dl
AfterEffects
@item cube
Iridas
@item dat
DaVinci
@item m3d
Pandora
@item csp
cineSpace
@end table
@item interp
Select interpolation mode.

Available values are:

@table @samp
@item nearest
Use values from the nearest defined point.
@item trilinear
Interpolate values using the 8 points defining a cube.
@item tetrahedral
Interpolate values using a tetrahedron.
@item pyramid
Interpolate values using a pyramid.
@item prism
Interpolate values using a prism.
@end table
@end table

@subsection Commands

This filter supports the @code{interp} option as @ref{commands}.

@section lumakey

Turn certain luma values into transparency.

The filter accepts the following options:

@table @option
@item threshold
Set the luma which will be used as base for transparency.
Default value is @code{0}.

@item tolerance
Set the range of luma values to be keyed out.
Default value is @code{0.01}.

@item softness
Set the range of softness. Default value is @code{0}.
Use this to control gradual transition from zero to full transparency.
@end table

@subsection Commands
This filter supports same @ref{commands} as options.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@section lut, lutrgb, lutyuv

Compute a look-up table for binding each pixel component input value
to an output value, and apply it to the input video.

@var{lutyuv} applies a lookup table to a YUV input video, @var{lutrgb}
to an RGB input video.

These filters accept the following parameters:
@table @option
@item c0
set first pixel component expression
@item c1
set second pixel component expression
@item c2
set third pixel component expression
@item c3
set fourth pixel component expression, corresponds to the alpha component

@item r
set red component expression
@item g
set green component expression
@item b
set blue component expression
@item a
alpha component expression

@item y
set Y/luminance component expression
@item u
set U/Cb component expression
@item v
set V/Cr component expression
@end table

Each of them specifies the expression to use for computing the lookup table for
the corresponding pixel component values.

The exact component associated to each of the @var{c*} options depends on the
format in input.

The @var{lut} filter requires either YUV or RGB pixel formats in input,
@var{lutrgb} requires RGB pixel formats in input, and @var{lutyuv} requires YUV.

The expressions can contain the following constants and functions:

@table @option
@item w
@item h
The input width and height.

@item val
The input value for the pixel component.

@item clipval
The input value, clipped to the @var{minval}-@var{maxval} range.

@item maxval
The maximum value for the pixel component.

@item minval
The minimum value for the pixel component.

@item negval
The negated value for the pixel component value, clipped to the
@var{minval}-@var{maxval} range; it corresponds to the expression
"maxval-clipval+minval".

@item clip(val)
The computed value in @var{val}, clipped to the
@var{minval}-@var{maxval} range.

@item gammaval(gamma)
The computed gamma correction value of the pixel component value,
clipped to the @var{minval}-@var{maxval} range. It corresponds to the
expression
"pow((clipval-minval)/(maxval-minval)\,@var{gamma})*(maxval-minval)+minval"

@end table

All expressions default to "val".

@subsection Commands

This filter supports same @ref{commands} as options.

@subsection Examples

@itemize
@item
Negate input video:
@example
lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val"
lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val"
@end example

The above is the same as:
@example
lutrgb="r=negval:g=negval:b=negval"
lutyuv="y=negval:u=negval:v=negval"
@end example

@item
Negate luminance:
@example
lutyuv=y=negval
@end example

@item
Remove chroma components, turning the video into a graytone image:
@example
lutyuv="u=128:v=128"
@end example

@item
Apply a luma burning effect:
@example
lutyuv="y=2*val"
@end example

@item
Remove green and blue components:
@example
lutrgb="g=0:b=0"
@end example

@item
Set a constant alpha channel value on input:
@example
format=rgba,lutrgb=a="maxval-minval/2"
@end example

@item
Correct luminance gamma by a factor of 0.5:
@example
lutyuv=y=gammaval(0.5)
@end example

@item
Discard least significant bits of luma:
@example
lutyuv=y='bitand(val, 128+64+32)'
@end example

@item
Technicolor like effect:
@example
lutyuv=u='(val-maxval/2)*2+maxval/2':v='(val-maxval/2)*2+maxval/2'
@end example
@end itemize

@section lut2, tlut2

The @code{lut2} filter takes two input streams and outputs one
stream.

The @code{tlut2} (time lut2) filter takes two consecutive frames
from one single stream.

This filter accepts the following parameters:
@table @option
@item c0
set first pixel component expression
@item c1
set second pixel component expression
@item c2
set third pixel component expression
@item c3
set fourth pixel component expression, corresponds to the alpha component

@item d
set output bit depth, only available for @code{lut2} filter. By default is 0,
which means bit depth is automatically picked from first input format.
@end table

The @code{lut2} filter also supports the @ref{framesync} options.

Each of them specifies the expression to use for computing the lookup table for
the corresponding pixel component values.

The exact component associated to each of the @var{c*} options depends on the
format in inputs.

The expressions can contain the following constants:

@table @option
@item w
@item h
The input width and height.

@item x
The first input value for the pixel component.

@item y
The second input value for the pixel component.

@item bdx
The first input video bit depth.

@item bdy
The second input video bit depth.
@end table

All expressions default to "x".

@subsection Commands

This filter supports the all above options as @ref{commands} except option @code{d}.

@subsection Examples

@itemize
@item
Highlight differences between two RGB video streams:
@example
lut2='ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,0,pow(2,bdx)-1)'
@end example

@item
Highlight differences between two YUV video streams:
@example
lut2='ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,pow(2,bdx-1),pow(2,bdx)-1):ifnot(x-y,pow(2,bdx-1),pow(2,bdx)-1)'
@end example

@item
Show max difference between two video streams:
@example
lut2='if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1))):if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1))):if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1)))'
@end example
@end itemize

@section maskedclamp

Clamp the first input stream with the second input and third input stream.

Returns the value of first stream to be between second input
stream - @code{undershoot} and third input stream + @code{overshoot}.

This filter accepts the following options:
@table @option
@item undershoot
Default value is @code{0}.

@item overshoot
Default value is @code{0}.

@item planes
Set which planes will be processed as bitmap, unprocessed planes will be
copied from first stream.
By default value 0xf, all planes will be processed.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section maskedmax

Merge the second and third input stream into output stream using absolute differences
between second input stream and first input stream and absolute difference between
third input stream and first input stream. The picked value will be from second input
stream if second absolute difference is greater than first one or from third input stream
otherwise.

This filter accepts the following options:
@table @option
@item planes
Set which planes will be processed as bitmap, unprocessed planes will be
copied from first stream.
By default value 0xf, all planes will be processed.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section maskedmerge

Merge the first input stream with the second input stream using per pixel
weights in the third input stream.

A value of 0 in the third stream pixel component means that pixel component
from first stream is returned unchanged, while maximum value (eg. 255 for
8-bit videos) means that pixel component from second stream is returned
unchanged. Intermediate values define the amount of merging between both
input stream's pixel components.

This filter accepts the following options:
@table @option
@item planes
Set which planes will be processed as bitmap, unprocessed planes will be
copied from first stream.
By default value 0xf, all planes will be processed.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section maskedmin

Merge the second and third input stream into output stream using absolute differences
between second input stream and first input stream and absolute difference between
third input stream and first input stream. The picked value will be from second input
stream if second absolute difference is less than first one or from third input stream
otherwise.

This filter accepts the following options:
@table @option
@item planes
Set which planes will be processed as bitmap, unprocessed planes will be
copied from first stream.
By default value 0xf, all planes will be processed.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section maskedthreshold
Pick pixels comparing absolute difference of two video streams with fixed
threshold.

If absolute difference between pixel component of first and second video
stream is equal or lower than user supplied threshold than pixel component
from first video stream is picked, otherwise pixel component from second
video stream is picked.

This filter accepts the following options:
@table @option
@item threshold
Set threshold used when picking pixels from absolute difference from two input
video streams.

@item planes
Set which planes will be processed as bitmap, unprocessed planes will be
copied from second stream.
By default value 0xf, all planes will be processed.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section maskfun
Create mask from input video.

For example it is useful to create motion masks after @code{tblend} filter.

This filter accepts the following options:

@table @option
@item low
Set low threshold. Any pixel component lower or exact than this value will be set to 0.

@item high
Set high threshold. Any pixel component higher than this value will be set to max value
allowed for current pixel format.

@item planes
Set planes to filter, by default all available planes are filtered.

@item fill
Fill all frame pixels with this value.

@item sum
Set max average pixel value for frame. If sum of all pixel components is higher that this
average, output frame will be completely filled with value set by @var{fill} option.
Typically useful for scene changes when used in combination with @code{tblend} filter.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section mcdeint

Apply motion-compensation deinterlacing.

It needs one field per frame as input and must thus be used together
with yadif=1/3 or equivalent.

This filter accepts the following options:
@table @option
@item mode
Set the deinterlacing mode.

It accepts one of the following values:
@table @samp
@item fast
@item medium
@item slow
use iterative motion estimation
@item extra_slow
like @samp{slow}, but use multiple reference frames.
@end table
Default value is @samp{fast}.

@item parity
Set the picture field parity assumed for the input video. It must be
one of the following values:

@table @samp
@item 0, tff
assume top field first
@item 1, bff
assume bottom field first
@end table

Default value is @samp{bff}.

@item qp
Set per-block quantization parameter (QP) used by the internal
encoder.

Higher values should result in a smoother motion vector field but less
optimal individual vectors. Default value is 1.
@end table

@section median

Pick median pixel from certain rectangle defined by radius.

This filter accepts the following options:

@table @option
@item radius
Set horizontal radius size. Default value is @code{1}.
Allowed range is integer from 1 to 127.

@item planes
Set which planes to process. Default is @code{15}, which is all available planes.

@item radiusV
Set vertical radius size. Default value is @code{0}.
Allowed range is integer from 0 to 127.
If it is 0, value will be picked from horizontal @code{radius} option.

@item percentile
Set median percentile. Default value is @code{0.5}.
Default value of @code{0.5} will pick always median values, while @code{0} will pick
minimum values, and @code{1} maximum values.
@end table

@subsection Commands
This filter supports same @ref{commands} as options.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@section mergeplanes

Merge color channel components from several video streams.

The filter accepts up to 4 input streams, and merge selected input
planes to the output video.

This filter accepts the following options:
@table @option
@item mapping
Set input to output plane mapping. Default is @code{0}.

The mappings is specified as a bitmap. It should be specified as a
hexadecimal number in the form 0xAa[Bb[Cc[Dd]]]. 'Aa' describes the
mapping for the first plane of the output stream. 'A' sets the number of
the input stream to use (from 0 to 3), and 'a' the plane number of the
corresponding input to use (from 0 to 3). The rest of the mappings is
similar, 'Bb' describes the mapping for the output stream second
plane, 'Cc' describes the mapping for the output stream third plane and
'Dd' describes the mapping for the output stream fourth plane.

@item format
Set output pixel format. Default is @code{yuva444p}.
@end table

@subsection Examples

@itemize
@item
Merge three gray video streams of same width and height into single video stream:
@example
[a0][a1][a2]mergeplanes=0x001020:yuv444p
@end example

@item
Merge 1st yuv444p stream and 2nd gray video stream into yuva444p video stream:
@example
[a0][a1]mergeplanes=0x00010210:yuva444p
@end example

@item
Swap Y and A plane in yuva444p stream:
@example
format=yuva444p,mergeplanes=0x03010200:yuva444p
@end example

@item
Swap U and V plane in yuv420p stream:
@example
format=yuv420p,mergeplanes=0x000201:yuv420p
@end example

@item
Cast a rgb24 clip to yuv444p:
@example
format=rgb24,mergeplanes=0x000102:yuv444p
@end example
@end itemize

@section mestimate

Estimate and export motion vectors using block matching algorithms.
Motion vectors are stored in frame side data to be used by other filters.

This filter accepts the following options:
@table @option
@item method
Specify the motion estimation method. Accepts one of the following values:

@table @samp
@item esa
Exhaustive search algorithm.
@item tss
Three step search algorithm.
@item tdls
Two dimensional logarithmic search algorithm.
@item ntss
New three step search algorithm.
@item fss
Four step search algorithm.
@item ds
Diamond search algorithm.
@item hexbs
Hexagon-based search algorithm.
@item epzs
Enhanced predictive zonal search algorithm.
@item umh
Uneven multi-hexagon search algorithm.
@end table
Default value is @samp{esa}.

@item mb_size
Macroblock size. Default @code{16}.

@item search_param
Search parameter. Default @code{7}.
@end table

@section midequalizer

Apply Midway Image Equalization effect using two video streams.

Midway Image Equalization adjusts a pair of images to have the same
histogram, while maintaining their dynamics as much as possible. It's
useful for e.g. matching exposures from a pair of stereo cameras.

This filter has two inputs and one output, which must be of same pixel format, but
may be of different sizes. The output of filter is first input adjusted with
midway histogram of both inputs.

This filter accepts the following option:

@table @option
@item planes
Set which planes to process. Default is @code{15}, which is all available planes.
@end table

@section minterpolate

Convert the video to specified frame rate using motion interpolation.

This filter accepts the following options:
@table @option
@item fps
Specify the output frame rate. This can be rational e.g. @code{60000/1001}. Frames are dropped if @var{fps} is lower than source fps. Default @code{60}.

@item mi_mode
Motion interpolation mode. Following values are accepted:
@table @samp
@item dup
Duplicate previous or next frame for interpolating new ones.
@item blend
Blend source frames. Interpolated frame is mean of previous and next frames.
@item mci
Motion compensated interpolation. Following options are effective when this mode is selected:

@table @samp
@item mc_mode
Motion compensation mode. Following values are accepted:
@table @samp
@item obmc
Overlapped block motion compensation.
@item aobmc
Adaptive overlapped block motion compensation. Window weighting coefficients are controlled adaptively according to the reliabilities of the neighboring motion vectors to reduce oversmoothing.
@end table
Default mode is @samp{obmc}.

@item me_mode
Motion estimation mode. Following values are accepted:
@table @samp
@item bidir
Bidirectional motion estimation. Motion vectors are estimated for each source frame in both forward and backward directions.
@item bilat
Bilateral motion estimation. Motion vectors are estimated directly for interpolated frame.
@end table
Default mode is @samp{bilat}.

@item me
The algorithm to be used for motion estimation. Following values are accepted:
@table @samp
@item esa
Exhaustive search algorithm.
@item tss
Three step search algorithm.
@item tdls
Two dimensional logarithmic search algorithm.
@item ntss
New three step search algorithm.
@item fss
Four step search algorithm.
@item ds
Diamond search algorithm.
@item hexbs
Hexagon-based search algorithm.
@item epzs
Enhanced predictive zonal search algorithm.
@item umh
Uneven multi-hexagon search algorithm.
@end table
Default algorithm is @samp{epzs}.

@item mb_size
Macroblock size. Default @code{16}.

@item search_param
Motion estimation search parameter. Default @code{32}.

@item vsbmc
Enable variable-size block motion compensation. Motion estimation is applied with smaller block sizes at object boundaries in order to make the them less blur. Default is @code{0} (disabled).
@end table
@end table

@item scd
Scene change detection method. Scene change leads motion vectors to be in random direction. Scene change detection replace interpolated frames by duplicate ones. May not be needed for other modes. Following values are accepted:
@table @samp
@item none
Disable scene change detection.
@item fdiff
Frame difference. Corresponding pixel values are compared and if it satisfies @var{scd_threshold} scene change is detected.
@end table
Default method is @samp{fdiff}.

@item scd_threshold
Scene change detection threshold. Default is @code{10.}.
@end table

@section mix

Mix several video input streams into one video stream.

A description of the accepted options follows.

@table @option
@item nb_inputs
The number of inputs. If unspecified, it defaults to 2.

@item weights
Specify weight of each input video stream as sequence.
Each weight is separated by space. If number of weights
is smaller than number of @var{frames} last specified
weight will be used for all remaining unset weights.

@item scale
Specify scale, if it is set it will be multiplied with sum
of each weight multiplied with pixel values to give final destination
pixel value. By default @var{scale} is auto scaled to sum of weights.

@item duration
Specify how end of stream is determined.
@table @samp
@item longest
The duration of the longest input. (default)

@item shortest
The duration of the shortest input.

@item first
The duration of the first input.
@end table
@end table

@subsection Commands

This filter supports the following commands:
@table @option
@item weights
@item scale
Syntax is same as option with same name.
@end table

@section monochrome
Convert video to gray using custom color filter.

A description of the accepted options follows.

@table @option
@item cb
Set the chroma blue spot. Allowed range is from -1 to 1.
Default value is 0.

@item cr
Set the chroma red spot. Allowed range is from -1 to 1.
Default value is 0.

@item size
Set the color filter size. Allowed range is from .1 to 10.
Default value is 1.

@item high
Set the highlights strength. Allowed range is from 0 to 1.
Default value is 0.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section mpdecimate

Drop frames that do not differ greatly from the previous frame in
order to reduce frame rate.

The main use of this filter is for very-low-bitrate encoding
(e.g. streaming over dialup modem), but it could in theory be used for
fixing movies that were inverse-telecined incorrectly.

A description of the accepted options follows.

@table @option
@item max
Set the maximum number of consecutive frames which can be dropped (if
positive), or the minimum interval between dropped frames (if
negative). If the value is 0, the frame is dropped disregarding the
number of previous sequentially dropped frames.

Default value is 0.

@item hi
@item lo
@item frac
Set the dropping threshold values.

Values for @option{hi} and @option{lo} are for 8x8 pixel blocks and
represent actual pixel value differences, so a threshold of 64
corresponds to 1 unit of difference for each pixel, or the same spread
out differently over the block.

A frame is a candidate for dropping if no 8x8 blocks differ by more
than a threshold of @option{hi}, and if no more than @option{frac} blocks (1
meaning the whole image) differ by more than a threshold of @option{lo}.

Default value for @option{hi} is 64*12, default value for @option{lo} is
64*5, and default value for @option{frac} is 0.33.
@end table

@section msad

Obtain the MSAD (Mean Sum of Absolute Differences) between two input videos.

This filter takes two input videos.

Both input videos must have the same resolution and pixel format for
this filter to work correctly. Also it assumes that both inputs
have the same number of frames, which are compared one by one.

The obtained per component, average, min and max MSAD is printed through
the logging system.

The filter stores the calculated MSAD of each frame in frame metadata.

In the below example the input file @file{main.mpg} being processed is compared
with the reference file @file{ref.mpg}.

@example
ffmpeg -i main.mpg -i ref.mpg -lavfi msad -f null -
@end example

@section negate

Negate (invert) the input video.

It accepts the following option:

@table @option

@item negate_alpha
With value 1, it negates the alpha component, if present. Default value is 0.
@end table

@subsection Commands

This filter supports same @ref{commands} as options.

@anchor{nlmeans}
@section nlmeans

Denoise frames using Non-Local Means algorithm.

Each pixel is adjusted by looking for other pixels with similar contexts. This
context similarity is defined by comparing their surrounding patches of size
@option{p}x@option{p}. Patches are searched in an area of @option{r}x@option{r}
around the pixel.

Note that the research area defines centers for patches, which means some
patches will be made of pixels outside that research area.

The filter accepts the following options.

@table @option
@item s
Set denoising strength. Default is 1.0. Must be in range [1.0, 30.0].

@item p
Set patch size. Default is 7. Must be odd number in range [0, 99].

@item pc
Same as @option{p} but for chroma planes.

The default value is @var{0} and means automatic.

@item r
Set research size. Default is 15. Must be odd number in range [0, 99].

@item rc
Same as @option{r} but for chroma planes.

The default value is @var{0} and means automatic.
@end table

@section nnedi

Deinterlace video using neural network edge directed interpolation.

This filter accepts the following options:

@table @option
@item weights
Mandatory option, without binary file filter can not work.
Currently file can be found here:
https://github.com/dubhater/vapoursynth-nnedi3/blob/master/src/nnedi3_weights.bin

@item deint
Set which frames to deinterlace, by default it is @code{all}.
Can be @code{all} or @code{interlaced}.

@item field
Set mode of operation.

Can be one of the following:

@table @samp
@item af
Use frame flags, both fields.
@item a
Use frame flags, single field.
@item t
Use top field only.
@item b
Use bottom field only.
@item tf
Use both fields, top first.
@item bf
Use both fields, bottom first.
@end table

@item planes
Set which planes to process, by default filter process all frames.

@item nsize
Set size of local neighborhood around each pixel, used by the predictor neural
network.

Can be one of the following:

@table @samp
@item s8x6
@item s16x6
@item s32x6
@item s48x6
@item s8x4
@item s16x4
@item s32x4
@end table

@item nns
Set the number of neurons in predictor neural network.
Can be one of the following:

@table @samp
@item n16
@item n32
@item n64
@item n128
@item n256
@end table

@item qual
Controls the number of different neural network predictions that are blended
together to compute the final output value. Can be @code{fast}, default or
@code{slow}.

@item etype
Set which set of weights to use in the predictor.
Can be one of the following:

@table @samp
@item a, abs
weights trained to minimize absolute error
@item s, mse
weights trained to minimize squared error
@end table

@item pscrn
Controls whether or not the prescreener neural network is used to decide
which pixels should be processed by the predictor neural network and which
can be handled by simple cubic interpolation.
The prescreener is trained to know whether cubic interpolation will be
sufficient for a pixel or whether it should be predicted by the predictor nn.
The computational complexity of the prescreener nn is much less than that of
the predictor nn. Since most pixels can be handled by cubic interpolation,
using the prescreener generally results in much faster processing.
The prescreener is pretty accurate, so the difference between using it and not
using it is almost always unnoticeable.

Can be one of the following:

@table @samp
@item none
@item original
@item new
@item new2
@item new3
@end table

Default is @code{new}.
@end table

@subsection Commands
This filter supports same @ref{commands} as options, excluding @var{weights} option.

@section noformat

Force libavfilter not to use any of the specified pixel formats for the
input to the next filter.

It accepts the following parameters:
@table @option

@item pix_fmts
A '|'-separated list of pixel format names, such as
pix_fmts=yuv420p|monow|rgb24".

@end table

@subsection Examples

@itemize
@item
Force libavfilter to use a format different from @var{yuv420p} for the
input to the vflip filter:
@example
noformat=pix_fmts=yuv420p,vflip
@end example

@item
Convert the input video to any of the formats not contained in the list:
@example
noformat=yuv420p|yuv444p|yuv410p
@end example
@end itemize

@section noise

Add noise on video input frame.

The filter accepts the following options:

@table @option
@item all_seed
@item c0_seed
@item c1_seed
@item c2_seed
@item c3_seed
Set noise seed for specific pixel component or all pixel components in case
of @var{all_seed}. Default value is @code{123457}.

@item all_strength, alls
@item c0_strength, c0s
@item c1_strength, c1s
@item c2_strength, c2s
@item c3_strength, c3s
Set noise strength for specific pixel component or all pixel components in case
@var{all_strength}. Default value is @code{0}. Allowed range is [0, 100].

@item all_flags, allf
@item c0_flags, c0f
@item c1_flags, c1f
@item c2_flags, c2f
@item c3_flags, c3f
Set pixel component flags or set flags for all components if @var{all_flags}.
Available values for component flags are:
@table @samp
@item a
averaged temporal noise (smoother)
@item p
mix random noise with a (semi)regular pattern
@item t
temporal noise (noise pattern changes between frames)
@item u
uniform noise (gaussian otherwise)
@end table
@end table

@subsection Examples

Add temporal and uniform noise to input video:
@example
noise=alls=20:allf=t+u
@end example

@section normalize

Normalize RGB video (aka histogram stretching, contrast stretching).
See: https://en.wikipedia.org/wiki/Normalization_(image_processing)

For each channel of each frame, the filter computes the input range and maps
it linearly to the user-specified output range. The output range defaults
to the full dynamic range from pure black to pure white.

Temporal smoothing can be used on the input range to reduce flickering (rapid
changes in brightness) caused when small dark or bright objects enter or leave
the scene. This is similar to the auto-exposure (automatic gain control) on a
video camera, and, like a video camera, it may cause a period of over- or
under-exposure of the video.

The R,G,B channels can be normalized independently, which may cause some
color shifting, or linked together as a single channel, which prevents
color shifting. Linked normalization preserves hue. Independent normalization
does not, so it can be used to remove some color casts. Independent and linked
normalization can be combined in any ratio.

The normalize filter accepts the following options:

@table @option
@item blackpt
@item whitept
Colors which define the output range. The minimum input value is mapped to
the @var{blackpt}. The maximum input value is mapped to the @var{whitept}.
The defaults are black and white respectively. Specifying white for
@var{blackpt} and black for @var{whitept} will give color-inverted,
normalized video. Shades of grey can be used to reduce the dynamic range
(contrast). Specifying saturated colors here can create some interesting
effects.

@item smoothing
The number of previous frames to use for temporal smoothing. The input range
of each channel is smoothed using a rolling average over the current frame
and the @var{smoothing} previous frames. The default is 0 (no temporal
smoothing).

@item independence
Controls the ratio of independent (color shifting) channel normalization to
linked (color preserving) normalization. 0.0 is fully linked, 1.0 is fully
independent. Defaults to 1.0 (fully independent).

@item strength
Overall strength of the filter. 1.0 is full strength. 0.0 is a rather
expensive no-op. Defaults to 1.0 (full strength).

@end table

@subsection Commands
This filter supports same @ref{commands} as options, excluding @var{smoothing} option.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@subsection Examples

Stretch video contrast to use the full dynamic range, with no temporal
smoothing; may flicker depending on the source content:
@example
normalize=blackpt=black:whitept=white:smoothing=0
@end example

As above, but with 50 frames of temporal smoothing; flicker should be
reduced, depending on the source content:
@example
normalize=blackpt=black:whitept=white:smoothing=50
@end example

As above, but with hue-preserving linked channel normalization:
@example
normalize=blackpt=black:whitept=white:smoothing=50:independence=0
@end example

As above, but with half strength:
@example
normalize=blackpt=black:whitept=white:smoothing=50:independence=0:strength=0.5
@end example

Map the darkest input color to red, the brightest input color to cyan:
@example
normalize=blackpt=red:whitept=cyan
@end example

@section null

Pass the video source unchanged to the output.

@section ocr
Optical Character Recognition

This filter uses Tesseract for optical character recognition. To enable
compilation of this filter, you need to configure FFmpeg with
@code{--enable-libtesseract}.

It accepts the following options:

@table @option
@item datapath
Set datapath to tesseract data. Default is to use whatever was
set at installation.

@item language
Set language, default is "eng".

@item whitelist
Set character whitelist.

@item blacklist
Set character blacklist.
@end table

The filter exports recognized text as the frame metadata @code{lavfi.ocr.text}.
The filter exports confidence of recognized words as the frame metadata @code{lavfi.ocr.confidence}.

@section ocv

Apply a video transform using libopencv.

To enable this filter, install the libopencv library and headers and
configure FFmpeg with @code{--enable-libopencv}.

It accepts the following parameters:

@table @option

@item filter_name
The name of the libopencv filter to apply.

@item filter_params
The parameters to pass to the libopencv filter. If not specified, the default
values are assumed.

@end table

Refer to the official libopencv documentation for more precise
information:
@url{http://docs.opencv.org/master/modules/imgproc/doc/filtering.html}

Several libopencv filters are supported; see the following subsections.

@anchor{dilate}
@subsection dilate

Dilate an image by using a specific structuring element.
It corresponds to the libopencv function @code{cvDilate}.

It accepts the parameters: @var{struct_el}|@var{nb_iterations}.

@var{struct_el} represents a structuring element, and has the syntax:
@var{cols}x@var{rows}+@var{anchor_x}x@var{anchor_y}/@var{shape}

@var{cols} and @var{rows} represent the number of columns and rows of
the structuring element, @var{anchor_x} and @var{anchor_y} the anchor
point, and @var{shape} the shape for the structuring element. @var{shape}
must be "rect", "cross", "ellipse", or "custom".

If the value for @var{shape} is "custom", it must be followed by a
string of the form "=@var{filename}". The file with name
@var{filename} is assumed to represent a binary image, with each
printable character corresponding to a bright pixel. When a custom
@var{shape} is used, @var{cols} and @var{rows} are ignored, the number
or columns and rows of the read file are assumed instead.

The default value for @var{struct_el} is "3x3+0x0/rect".

@var{nb_iterations} specifies the number of times the transform is
applied to the image, and defaults to 1.

Some examples:
@example
# Use the default values
ocv=dilate

# Dilate using a structuring element with a 5x5 cross, iterating two times
ocv=filter_name=dilate:filter_params=5x5+2x2/cross|2

# Read the shape from the file diamond.shape, iterating two times.
# The file diamond.shape may contain a pattern of characters like this
#   *
#  ***
# *****
#  ***
#   *
# The specified columns and rows are ignored
# but the anchor point coordinates are not
ocv=dilate:0x0+2x2/custom=diamond.shape|2
@end example

@subsection erode

Erode an image by using a specific structuring element.
It corresponds to the libopencv function @code{cvErode}.

It accepts the parameters: @var{struct_el}:@var{nb_iterations},
with the same syntax and semantics as the @ref{dilate} filter.

@subsection smooth

Smooth the input video.

The filter takes the following parameters:
@var{type}|@var{param1}|@var{param2}|@var{param3}|@var{param4}.

@var{type} is the type of smooth filter to apply, and must be one of
the following values: "blur", "blur_no_scale", "median", "gaussian",
or "bilateral". The default value is "gaussian".

The meaning of @var{param1}, @var{param2}, @var{param3}, and @var{param4}
depends on the smooth type. @var{param1} and
@var{param2} accept integer positive values or 0. @var{param3} and
@var{param4} accept floating point values.

The default value for @var{param1} is 3. The default value for the
other parameters is 0.

These parameters correspond to the parameters assigned to the
libopencv function @code{cvSmooth}.

@section oscilloscope

2D Video Oscilloscope.

Useful to measure spatial impulse, step responses, chroma delays, etc.

It accepts the following parameters:

@table @option
@item x
Set scope center x position.

@item y
Set scope center y position.

@item s
Set scope size, relative to frame diagonal.

@item t
Set scope tilt/rotation.

@item o
Set trace opacity.

@item tx
Set trace center x position.

@item ty
Set trace center y position.

@item tw
Set trace width, relative to width of frame.

@item th
Set trace height, relative to height of frame.

@item c
Set which components to trace. By default it traces first three components.

@item g
Draw trace grid. By default is enabled.

@item st
Draw some statistics. By default is enabled.

@item sc
Draw scope. By default is enabled.
@end table

@subsection Commands
This filter supports same @ref{commands} as options.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.

@subsection Examples

@itemize
@item
Inspect full first row of video frame.
@example
oscilloscope=x=0.5:y=0:s=1
@end example

@item
Inspect full last row of video frame.
@example
oscilloscope=x=0.5:y=1:s=1
@end example

@item
Inspect full 5th line of video frame of height 1080.
@example
oscilloscope=x=0.5:y=5/1080:s=1
@end example

@item
Inspect full last column of video frame.
@example
oscilloscope=x=1:y=0.5:s=1:t=1
@end example

@end itemize

@anchor{overlay}
@section overlay

Overlay one video on top of another.

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:

A description of the accepted options follows.

@table @option
@item x
@item y
Set the expression for the x and y coordinates of the overlaid video
on the main video. Default value is "0" for both expressions. In case
the expression is invalid, it is set to a huge value (meaning that the
overlay will not be displayed within the output visible area).

@item eof_action
See @ref{framesync}.

@item eval
Set when the expressions for @option{x}, and @option{y} are evaluated.

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

Default value is @samp{frame}.

@item shortest
See @ref{framesync}.

@item format
Set the format for the output video.

It accepts the following values:
@table @samp
@item yuv420
force YUV420 output

@item yuv420p10
force YUV420p10 output

@item yuv422
force YUV422 output

@item yuv422p10
force YUV422p10 output

@item yuv444
force YUV444 output

@item rgb
force packed RGB output

@item gbrp
force planar RGB output

@item auto
automatically pick format
@end table

Default value is @samp{yuv420}.

@item repeatlast
See @ref{framesync}.

@item alpha
Set format of alpha of the overlaid video, it can be @var{straight} or
@var{premultiplied}. Default is @var{straight}.
@end table

The @option{x}, and @option{y} expressions 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 hsub
@item vsub
horizontal and vertical chroma subsample values of the output
format. For example for the pixel format "yuv422p" @var{hsub} is 2 and
@var{vsub} is 1.

@item n
the number of input frame, starting from 0

@item pos
the position in the file of the input frame, NAN if unknown

@item t
The timestamp, expressed in seconds. It's NAN if the input timestamp is unknown.

@end table

This filter also supports the @ref{framesync} options.

Note that the @var{n}, @var{pos}, @var{t} variables are available only
when evaluation is done @emph{per frame}, and will evaluate to NAN
when @option{eval} is set to @samp{init}.

Be aware that frames are taken from each input video in timestamp
order, hence, if their initial timestamps differ, it is a good idea
to pass the two inputs through a @var{setpts=PTS-STARTPTS} filter to
have them begin in the same zero timestamp, as the example for
the @var{movie} filter does.

You can chain together more overlays but you should test the
efficiency of such approach.

@subsection Commands

This filter supports the following commands:
@table @option
@item x
@item y
Modify the x and y of the overlay input.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.
@end table

@subsection Examples

@itemize
@item
Draw the overlay at 10 pixels from the bottom right corner of the main
video:
@example
overlay=main_w-overlay_w-10:main_h-overlay_h-10
@end example

Using named options the example above becomes:
@example
overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
@end example

@item
Insert a transparent PNG logo in the bottom left corner of the input,
using the @command{ffmpeg} tool with the @code{-filter_complex} option:
@example
ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
@end example

@item
Insert 2 different transparent PNG logos (second logo on bottom
right corner) using the @command{ffmpeg} tool:
@example
ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
@end example

@item
Add a transparent color layer on top of the main video; @code{WxH}
must specify the size of the main input to the overlay filter:
@example
color=color=red@@.3:size=WxH [over]; [in][over] overlay [out]
@end example

@item
Play an original video and a filtered version (here with the deshake
filter) side by side using the @command{ffplay} tool:
@example
ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
@end example

The above command is the same as:
@example
ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
@end example

@item
Make a sliding overlay appearing from the left to the right top part of the
screen starting since time 2:
@example
overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
@end example

@item
Compose output by putting two input videos side to side:
@example
ffmpeg -i left.avi -i right.avi -filter_complex "
nullsrc=size=200x100 [background];
[0:v] setpts=PTS-STARTPTS, scale=100x100 [left];
[1:v] setpts=PTS-STARTPTS, scale=100x100 [right];
[background][left]       overlay=shortest=1       [background+left];
[background+left][right] overlay=shortest=1:x=100 [left+right]
"
@end example

@item
Mask 10-20 seconds of a video by applying the delogo filter to a section
@example
ffmpeg -i test.avi -codec:v:0 wmv2 -ar 11025 -b:v 9000k
-vf '[in]split[split_main][split_delogo];[split_delogo]trim=start=360:end=371,delogo=0:0:640:480[delogoed];[split_main][delogoed]overlay=eof_action=pass[out]'
masked.avi
@end example

@item
Chain several overlays in cascade:
@example
nullsrc=s=200x200 [bg];
testsrc=s=100x100, split=4 [in0][in1][in2][in3];
[in0] lutrgb=r=0, [bg]   overlay=0:0     [mid0];
[in1] lutrgb=g=0, [mid0] overlay=100:0   [mid1];
[in2] lutrgb=b=0, [mid1] overlay=0:100   [mid2];
[in3] null,       [mid2] overlay=100:100 [out0]
@end example

@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.

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 the x and y coordinates of the overlaid video on the main video.
Default value is "0" for both expressions.

@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.

@item x
@item y
Specify the offsets to place the input image at within the padded area,
with respect to the top/left border of the output image.

The @var{x} expression can reference the value set by the @var{y}
expression, and vice versa.

The default value of @var{x} and @var{y} is 0.

If @var{x} or @var{y} evaluate to a negative number, they'll be changed
so the input image is centered on the padded area.

@item color
Specify the color of the padded area. For the syntax of this option,
check the @ref{color syntax,,"Color" section in the ffmpeg-utils
manual,ffmpeg-utils}.

The default value of @var{color} is "black".

@item eval
Specify when to evaluate  @var{width}, @var{height}, @var{x} and @var{y} 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

Default value is @samp{init}.

@item aspect
Pad to aspect instead to a resolution.

@end table

The value for the @var{width}, @var{height}, @var{x}, and @var{y}
options are expressions containing the following constants:

@table @option
@item in_w
@item in_h
The input video 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 width and height (the size of the padded area), as
specified by the @var{width} and @var{height} expressions.

@item ow
@item oh
These are the same as @var{out_w} and @var{out_h}.

@item x
@item y
The x and y offsets as specified by the @var{x} and @var{y}
expressions, or NAN if not yet specified.

@item a
same as @var{iw} / @var{ih}

@item sar
input sample aspect ratio

@item dar
input display aspect ratio, it is the same as (@var{iw} / @var{ih}) * @var{sar}

@item hsub
@item vsub
The horizontal and vertical chroma subsample values. For example for the
pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1.
@end table

@subsection Examples

@itemize
@item
Add paddings with the color "violet" to the input video. The output video
size is 640x480, and the top-left corner of the input video is placed at
column 0, row 40
@example
pad=640:480:0:40:violet
@end example

The example above is equivalent to the following command:
@example
pad=width=640:height=480:x=0:y=40:color=violet
@end example

@item
Pad the input to get an output with dimensions increased by 3/2,
and put the input video at the center of the padded area:
@example
pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2"
@end example

@item
Pad the input to get a squared output with size equal to the maximum
value between the input width and height, and put the input video at
the center of the padded area:
@example
pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2"
@end example

@item
Pad the input to get a final w/h ratio of 16:9:
@example
pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
@end example

@item
In case of anamorphic video, in order to set the output display aspect
correctly, it is necessary to use @var{sar} in the expression,
according to the relation:
@example
(ih * X / ih) * sar = output_dar
X = output_dar / sar
@end example

Thus the previous example needs to be modified to:
@example
pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
@end example

@item
Double the output size and put the input video in the bottom-right
corner of the output padded area:
@example
pad="2*iw:2*ih:ow-iw:oh-ih"
@end example
@end itemize

@anchor{palettegen}
@section palettegen

Generate one palette for a whole video stream.

It accepts the following options:

@table @option
@item max_colors
Set the maximum number of colors to quantize in the palette.
Note: the palette will still contain 256 colors; the unused palette entries
will be black.

@item reserve_transparent
Create a palette of 255 colors maximum and reserve the last one for
transparency. Reserving the transparency color is useful for GIF optimization.
If not set, the maximum of colors in the palette will be 256. You probably want
to disable this option for a standalone image.
Set by default.

@item transparency_color
Set the color that will be used as background for transparency.

@item stats_mode
Set statistics mode.

It accepts the following values:
@table @samp
@item full
Compute full frame histograms.
@item diff
Compute histograms only for the part that differs from previous frame. This
might be relevant to give more importance to the moving part of your input if
the background is static.
@item single
Compute new histogram for each frame.
@end table

Default value is @var{full}.
@end table

The filter also exports the frame metadata @code{lavfi.color_quant_ratio}
(@code{nb_color_in / nb_color_out}) which you can use to evaluate the degree of
color quantization of the palette. This information is also visible at
@var{info} logging level.

@subsection Examples

@itemize
@item
Generate a representative palette of a given video using @command{ffmpeg}:
@example
ffmpeg -i input.mkv -vf palettegen palette.png
@end example
@end itemize

@section paletteuse

Use a palette to downsample an input video stream.

The filter takes two inputs: one video stream and a palette. The palette must
be a 256 pixels image.

It accepts the following options:

@table @option
@item dither
Select dithering mode. Available algorithms are:
@table @samp
@item bayer
Ordered 8x8 bayer dithering (deterministic)
@item heckbert
Dithering as defined by Paul Heckbert in 1982 (simple error diffusion).
Note: this dithering is sometimes considered "wrong" and is included as a
reference.
@item floyd_steinberg
Floyd and Steingberg dithering (error diffusion)
@item sierra2
Frankie Sierra dithering v2 (error diffusion)
@item sierra2_4a
Frankie Sierra dithering v2 "Lite" (error diffusion)
@end table

Default is @var{sierra2_4a}.

@item bayer_scale
When @var{bayer} dithering is selected, this option defines the scale of the
pattern (how much the crosshatch pattern is visible). A low value means more
visible pattern for less banding, and higher value means less visible pattern
at the cost of more banding.

The option must be an integer value in the range [0,5]. Default is @var{2}.

@item diff_mode
If set, define the zone to process

@table @samp
@item rectangle
Only the changing rectangle will be reprocessed. This is similar to GIF
cropping/offsetting compression mechanism. This option can be useful for speed
if only a part of the image is changing, and has use cases such as limiting the
scope of the error diffusal @option{dither} to the rectangle that bounds the
moving scene (it leads to more deterministic output if the scene doesn't change
much, and as a result less moving noise and better GIF compression).
@end table

Default is @var{none}.

@item new
Take new palette for each output frame.

@item alpha_threshold
Sets the alpha threshold for transparency. Alpha values above this threshold
will be treated as completely opaque, and values below this threshold will be
treated as completely transparent.

The option must be an integer value in the range [0,255]. Default is @var{128}.
@end table

@subsection Examples

@itemize
@item
Use a palette (generated for example with @ref{palettegen}) to encode a GIF
using @command{ffmpeg}:
@example
ffmpeg -i input.mkv -i palette.png -lavfi paletteuse output.gif
@end example
@end itemize

@section perspective

Correct perspective of video not recorded perpendicular to the screen.

A description of the accepted parameters follows.

@table @option
@item x0
@item y0
@item x1
@item y1
@item x2
@item y2
@item x3
@item y3
Set coordinates expression for top left, top right, bottom left and bottom right corners.
Default values are @code{0:0:W:0:0:H:W:H} with which perspective will remain unchanged.
If the @code{sense} option is set to @code{source}, then the specified points will be sent
to the corners of the destination. If the @code{sense} option is set to @code{destination},
then the corners of the source will be sent to the specified coordinates.

The expressions can use the following variables:

@table @option
@item W
@item H
the width and height of video frame.
@item in
Input frame count.
@item on
Output frame count.
@end table

@item interpolation
Set interpolation for perspective correction.

It accepts the following values:
@table @samp
@item linear
@item cubic
@end table

Default value is @samp{linear}.

@item sense
Set interpretation of coordinate options.

It accepts the following values:
@table @samp
@item 0, source

Send point in the source specified by the given coordinates to
the corners of the destination.

@item 1, destination

Send the corners of the source to the point in the destination specified
by the given coordinates.

Default value is @samp{source}.
@end table

@item eval
Set when the expressions for coordinates @option{x0,y0,...x3,y3} are evaluated.

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

Default value is @samp{init}.
@end table

@section phase

Delay interlaced video by one field time so that the field order changes.

The intended use is to fix PAL movies that have been captured with the
opposite field order to the film-to-video transfer.

A description of the accepted parameters follows.

@table @option
@item mode
Set phase mode.

It accepts the following values:
@table @samp
@item t
Capture field order top-first, transfer bottom-first.
Filter will delay the bottom field.

@item b
Capture field order bottom-first, transfer top-first.
Filter will delay the top field.

@item p
Capture and transfer with the same field order. This mode only exists
for the documentation of the other options to refer to, but if you
actually select it, the filter will faithfully do nothing.

@item a
Capture field order determined automatically by field flags, transfer
opposite.
Filter selects among @samp{t} and @samp{b} modes on a frame by frame
basis using field flags. If no field information is available,
then this works just like @samp{u}.

@item u
Capture unknown or varying, transfer opposite.
Filter selects among @samp{t} and @samp{b} on a frame by frame basis by
analyzing the images and selecting the alternative that produces best
match between the fields.

@item T
Capture top-first, transfer unknown or varying.
Filter selects among @samp{t} and @samp{p} using image analysis.

@item B
Capture bottom-first, transfer unknown or varying.
Filter selects among @samp{b} and @samp{p} using image analysis.

@item A
Capture determined by field flags, transfer unknown or varying.
Filter selects among @samp{t}, @samp{b} and @samp{p} using field flags and
image analysis. If no field information is available, then this works just
like @samp{U}. This is the default mode.

@item U
Both capture and transfer unknown or varying.
Filter selects among @samp{t}, @samp{b} and @samp{p} using image analysis only.
@end table
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section photosensitivity
Reduce various flashes in video, so to help users with epilepsy.

It accepts the following options:
@table @option
@item frames, f
Set how many frames to use when filtering. Default is 30.

@item threshold, t
Set detection threshold factor. Default is 1.
Lower is stricter.

@item skip
Set how many pixels to skip when sampling frames. Default is 1.
Allowed range is from 1 to 1024.

@item bypass
Leave frames unchanged. Default is disabled.
@end table

@section pixdesctest

Pixel format descriptor test filter, mainly useful for internal
testing. The output video should be equal to the input video.

For example:
@example
format=monow, pixdesctest
@end example

can be used to test the monowhite pixel format descriptor definition.

@section pixscope

Display sample values of color channels. Mainly useful for checking color
and levels. Minimum supported resolution is 640x480.

The filters accept the following options:

@table @option
@item x
Set scope X position, relative offset on X axis.

@item y
Set scope Y position, relative offset on Y axis.

@item w
Set scope width.

@item h
Set scope height.

@item o
Set window opacity. This window also holds statistics about pixel area.

@item wx
Set window X position, relative offset on X axis.

@item wy
Set window Y position, relative offset on Y axis.
@end table

@subsection Commands

This filter supports same @ref{commands} as options.

@section pp

Enable the specified chain of postprocessing subfilters using libpostproc. This
library should be automatically selected with a GPL build (@code{--enable-gpl}).
Subfilters must be separated by '/' and can be disabled by prepending a '-'.
Each subfilter and some options have a short and a long name that can be used
interchangeably, i.e. dr/dering are the same.

The filters accept the following options:

@table @option
@item subfilters
Set postprocessing subfilters string.
@end table

All subfilters share common options to determine their scope:

@table @option
@item a/autoq
Honor the quality commands for this subfilter.

@item c/chrom
Do chrominance filtering, too (default).

@item y/nochrom
Do luminance filtering only (no chrominance).

@item n/noluma
Do chrominance filtering only (no luminance).
@end table

These options can be appended after the subfilter name, separated by a '|'.

Available subfilters are:

@table @option
@item hb/hdeblock[|difference[|flatness]]
Horizontal deblocking filter
@table @option
@item difference
Difference factor where higher values mean more deblocking (default: @code{32}).
@item flatness
Flatness threshold where lower values mean more deblocking (default: @code{39}).
@end table

@item vb/vdeblock[|difference[|flatness]]
Vertical deblocking filter
@table @option
@item difference
Difference factor where higher values mean more deblocking (default: @code{32}).
@item flatness
Flatness threshold where lower values mean more deblocking (default: @code{39}).
@end table

@item ha/hadeblock[|difference[|flatness]]
Accurate horizontal deblocking filter
@table @option
@item difference
Difference factor where higher values mean more deblocking (default: @code{32}).
@item flatness
Flatness threshold where lower values mean more deblocking (default: @code{39}).
@end table

@item va/vadeblock[|difference[|flatness]]
Accurate vertical deblocking filter
@table @option
@item difference
Difference factor where higher values mean more deblocking (default: @code{32}).
@item flatness
Flatness threshold where lower values mean more deblocking (default: @code{39}).
@end table
@end table

The horizontal and vertical deblocking filters share the difference and
flatness values so you cannot set different horizontal and vertical
thresholds.

@table @option
@item h1/x1hdeblock
Experimental horizontal deblocking filter

@item v1/x1vdeblock
Experimental vertical deblocking filter

@item dr/dering
Deringing filter

@item tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], temporal noise reducer
@table @option
@item threshold1
larger -> stronger filtering
@item threshold2
larger -> stronger filtering
@item threshold3
larger -> stronger filtering
@end table

@item al/autolevels[:f/fullyrange], automatic brightness / contrast correction
@table @option
@item f/fullyrange
Stretch luminance to @code{0-255}.
@end table

@item lb/linblenddeint
Linear blend deinterlacing filter that deinterlaces the given block by
filtering all lines with a @code{(1 2 1)} filter.

@item li/linipoldeint
Linear interpolating deinterlacing filter that deinterlaces the given block by
linearly interpolating every second line.

@item ci/cubicipoldeint
Cubic interpolating deinterlacing filter deinterlaces the given block by
cubically interpolating every second line.

@item md/mediandeint
Median deinterlacing filter that deinterlaces the given block by applying a
median filter to every second line.

@item fd/ffmpegdeint
FFmpeg deinterlacing filter that deinterlaces the given block by filtering every
second line with a @code{(-1 4 2 4 -1)} filter.

@item l5/lowpass5
Vertically applied FIR lowpass deinterlacing filter that deinterlaces the given
block by filtering all lines with a @code{(-1 2 6 2 -1)} filter.

@item fq/forceQuant[|quantizer]
Overrides the quantizer table from the input with the constant quantizer you
specify.
@table @option
@item quantizer
Quantizer to use
@end table

@item de/default
Default pp filter combination (@code{hb|a,vb|a,dr|a})

@item fa/fast
Fast pp filter combination (@code{h1|a,v1|a,dr|a})

@item ac
High quality pp filter combination (@code{ha|a|128|7,va|a,dr|a})
@end table

@subsection Examples

@itemize
@item
Apply horizontal and vertical deblocking, deringing and automatic
brightness/contrast:
@example
pp=hb/vb/dr/al
@end example

@item
Apply default filters without brightness/contrast correction:
@example
pp=de/-al
@end example

@item
Apply default filters and temporal denoiser:
@example
pp=default/tmpnoise|1|2|3
@end example

@item
Apply deblocking on luminance only, and switch vertical deblocking on or off
automatically depending on available CPU time:
@example
pp=hb|y/vb|a
@end example
@end itemize

@section pp7
Apply Postprocessing filter 7. It is variant of the @ref{spp} filter,
similar to spp = 6 with 7 point DCT, where only the center sample is
used after IDCT.

The filter accepts the following options:

@table @option
@item qp
Force a constant quantization parameter. It accepts an integer in range
0 to 63. If not set, the filter will use the QP from the video stream
(if available).

@item mode
Set thresholding mode. Available modes are:

@table @samp
@item hard
Set hard thresholding.
@item soft
Set soft thresholding (better de-ringing effect, but likely blurrier).
@item medium
Set medium thresholding (good results, default).
@end table
@end table

@section premultiply
Apply alpha premultiply effect to input video stream using first plane
of second stream as alpha.

Both streams must have same dimensions and same pixel format.

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 inplace
Do not require 2nd input for processing, instead use alpha plane from input stream.
@end table

@section prewitt
Apply prewitt 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 pseudocolor

Alter frame colors in video with pseudocolors.

This filter accepts the following options:

@table @option
@item c0
set pixel first component expression

@item c1
set pixel second component expression

@item c2
set pixel third component expression

@item c3
set pixel fourth component expression, corresponds to the alpha component

@item index, i
set component to use as base for altering colors

@item preset, p
Pick one of built-in LUTs. By default is set to none.

Available LUTs:
@table @samp
@item magma
@item inferno
@item plasma
@item viridis
@item turbo
@item cividis
@item range1
@item range2
@item shadows
@item highlights
@end table

@item opacity
Set opacity of output colors. Allowed range is from 0 to 1.
Default value is set to 1.
@end table

Each of the expression options specifies the expression to use for computing
the lookup table for the corresponding pixel component values.

The expressions can contain the following constants and functions:

@table @option
@item w
@item h
The input width and height.

@item val
The input value for the pixel component.

@item ymin, umin, vmin, amin
The minimum allowed component value.

@item ymax, umax, vmax, amax
The maximum allowed component value.
@end table

All expressions default to "val".

@subsection Commands

This filter supports the all above options as @ref{commands}.

@subsection Examples

@itemize
@item
Change too high luma values to gradient:
@example
pseudocolor="'if(between(val,ymax,amax),lerp(ymin,ymax,(val-ymax)/(amax-ymax)),-1):if(between(val,ymax,amax),lerp(umax,umin,(val-ymax)/(amax-ymax)),-1):if(between(val,ymax,amax),lerp(vmin,vmax,(val-ymax)/(amax-ymax)),-1):-1'"
@end example
@end itemize

@section psnr

Obtain the average, maximum and minimum PSNR (Peak Signal to Noise
Ratio) between two input videos.

This filter takes in input two input videos, the first input is
considered the "main" source and is passed unchanged to the
output. The second input is used as a "reference" video for computing
the PSNR.

Both video inputs must have the same resolution and pixel format for
this filter to work correctly. Also it assumes that both inputs
have the same number of frames, which are compared one by one.

The obtained average PSNR is printed through the logging system.

The filter stores the accumulated MSE (mean squared error) of each
frame, and at the end of the processing it is averaged across all frames
equally, and the following formula is applied to obtain the PSNR:

@example
PSNR = 10*log10(MAX^2/MSE)
@end example

Where MAX is the average of the maximum values of each component of the
image.

The description of the accepted parameters follows.

@table @option
@item stats_file, f
If specified the filter will use the named file to save the PSNR of
each individual frame. When filename equals "-" the data is sent to
standard output.

@item stats_version
Specifies which version of the stats file format to use. Details of
each format are written below.
Default value is 1.

@item stats_add_max
Determines whether the max value is output to the stats log.
Default value is 0.
Requires stats_version >= 2. If this is set and stats_version < 2,
the filter will return an error.
@end table

This filter also supports the @ref{framesync} options.

The file printed if @var{stats_file} is selected, contains a sequence of
key/value pairs of the form @var{key}:@var{value} for each compared
couple of frames.

If a @var{stats_version} greater than 1 is specified, a header line precedes
the list of per-frame-pair stats, with key value pairs following the frame
format with the following parameters:

@table @option
@item psnr_log_version
The version of the log file format. Will match @var{stats_version}.

@item fields
A comma separated list of the per-frame-pair parameters included in
the log.
@end table

A description of each shown per-frame-pair parameter follows:

@table @option
@item n
sequential number of the input frame, starting from 1

@item mse_avg
Mean Square Error pixel-by-pixel average difference of the compared
frames, averaged over all the image components.

@item mse_y, mse_u, mse_v, mse_r, mse_g, mse_b, mse_a
Mean Square Error pixel-by-pixel average difference of the compared
frames for the component specified by the suffix.

@item psnr_y, psnr_u, psnr_v, psnr_r, psnr_g, psnr_b, psnr_a
Peak Signal to Noise ratio of the compared frames for the component
specified by the suffix.

@item max_avg, max_y, max_u, max_v
Maximum allowed value for each channel, and average over all
channels.
@end table

@subsection Examples
@itemize
@item
For example:
@example
movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
[main][ref] psnr="stats_file=stats.log" [out]
@end example

On this example the input file being processed is compared with the
reference file @file{ref_movie.mpg}. The PSNR of each individual frame
is stored in @file{stats.log}.

@item
Another example with different containers:
@example
ffmpeg -i main.mpg -i ref.mkv -lavfi  "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]psnr" -f null -
@end example
@end itemize

@anchor{pullup}
@section pullup

Pulldown reversal (inverse telecine) filter, capable of handling mixed
hard-telecine, 24000/1001 fps progressive, and 30000/1001 fps progressive
content.

The pullup filter is designed to take advantage of future context in making
its decisions. This filter is stateless in the sense that it does not lock
onto a pattern to follow, but it instead looks forward to the following
fields in order to identify matches and rebuild progressive frames.

To produce content with an even framerate, insert the fps filter after
pullup, use @code{fps=24000/1001} if the input frame rate is 29.97fps,
@code{fps=24} for 30fps and the (rare) telecined 25fps input.

The filter accepts the following options:

@table @option
@item jl
@item jr
@item jt
@item jb
These options set the amount of "junk" to ignore at the left, right, top, and
bottom of the image, respectively. Left and right are in units of 8 pixels,
while top and bottom are in units of 2 lines.
The default is 8 pixels on each side.

@item sb
Set the strict breaks. Setting this option to 1 will reduce the chances of
filter generating an occasional mismatched frame, but it may also cause an
excessive number of frames to be dropped during high motion sequences.
Conversely, setting it to -1 will make filter match fields more easily.
This may help processing of video where there is slight blurring between
the fields, but may also cause there to be interlaced frames in the output.
Default value is @code{0}.

@item mp
Set the metric plane to use. It accepts the following values:
@table @samp
@item l
Use luma plane.

@item u
Use chroma blue plane.

@item v
Use chroma red plane.
@end table

This option may be set to use chroma plane instead of the default luma plane
for doing filter's computations. This may improve accuracy on very clean
source material, but more likely will decrease accuracy, especially if there
is chroma noise (rainbow effect) or any grayscale video.
The main purpose of setting @option{mp} to a chroma plane is to reduce CPU
load and make pullup usable in realtime on slow machines.
@end table

For best results (without duplicated frames in the output file) it is
necessary to change the output frame rate. For example, to inverse
telecine NTSC input:
@example
ffmpeg -i input -vf pullup -r 24000/1001 ...
@end example

@section qp

Change video quantization parameters (QP).

The filter accepts the following option:

@table @option
@item qp
Set expression for quantization parameter.
@end table

The expression is evaluated through the eval API and can contain, among others,
the following constants:

@table @var
@item known
1 if index is not 129, 0 otherwise.

@item qp
Sequential index starting from -129 to 128.
@end table

@subsection Examples

@itemize
@item
Some equation like:
@example
qp=2+2*sin(PI*qp)
@end example
@end itemize

@section random

Flush video frames from internal cache of frames into a random order.
No frame is discarded.
Inspired by @ref{frei0r} nervous filter.

@table @option
@item frames
Set size in number of frames of internal cache, in range from @code{2} to
@code{512}. Default is @code{30}.

@item seed
Set seed for random number generator, must be an integer included between
@code{0} and @code{UINT32_MAX}. If not specified, or if explicitly set to
less than @code{0}, the filter will try to use a good random seed on a
best effort basis.
@end table

@section readeia608

Read closed captioning (EIA-608) information from the top lines of a video frame.

This filter adds frame metadata for @code{lavfi.readeia608.X.cc} and
@code{lavfi.readeia608.X.line}, where @code{X} is the number of the identified line
with EIA-608 data (starting from 0). A description of each metadata value follows:

@table @option
@item lavfi.readeia608.X.cc
The two bytes stored as EIA-608 data (printed in hexadecimal).

@item lavfi.readeia608.X.line
The number of the line on which the EIA-608 data was identified and read.
@end table

This filter accepts the following options:

@table @option
@item scan_min
Set the line to start scanning for EIA-608 data. Default is @code{0}.

@item scan_max
Set the line to end scanning for EIA-608 data. Default is @code{29}.

@item spw
Set the ratio of width reserved for sync code detection.
Default is @code{0.27}. Allowed range is @code{[0.1 - 0.7]}.

@item chp
Enable checking the parity bit. In the event of a parity error, the filter will output
@code{0x00} for that character. Default is false.

@item lp
Lowpass lines prior to further processing. Default is enabled.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@subsection Examples

@itemize
@item
Output a csv with presentation time and the first two lines of identified EIA-608 captioning data.
@example
ffprobe -f lavfi -i movie=captioned_video.mov,readeia608 -show_entries frame=pkt_pts_time:frame_tags=lavfi.readeia608.0.cc,lavfi.readeia608.1.cc -of csv
@end example
@end itemize

@section readvitc

Read vertical interval timecode (VITC) information from the top lines of a
video frame.

The filter adds frame metadata key @code{lavfi.readvitc.tc_str} with the
timecode value, if a valid timecode has been detected. Further metadata key
@code{lavfi.readvitc.found} is set to 0/1 depending on whether
timecode data has been found or not.

This filter accepts the following options:

@table @option
@item scan_max
Set the maximum number of lines to scan for VITC data. If the value is set to
@code{-1} the full video frame is scanned. Default is @code{45}.

@item thr_b
Set the luma threshold for black. Accepts float numbers in the range [0.0,1.0],
default value is @code{0.2}. The value must be equal or less than @code{thr_w}.

@item thr_w
Set the luma threshold for white. Accepts float numbers in the range [0.0,1.0],
default value is @code{0.6}. The value must be equal or greater than @code{thr_b}.
@end table

@subsection Examples

@itemize
@item
Detect and draw VITC data onto the video frame; if no valid VITC is detected,
draw @code{--:--:--:--} as a placeholder:
@example
ffmpeg -i input.avi -filter:v 'readvitc,drawtext=fontfile=FreeMono.ttf:text=%@{metadata\\:lavfi.readvitc.tc_str\\:--\\\\\\:--\\\\\\:--\\\\\\:--@}:x=(w-tw)/2:y=400-ascent'
@end example
@end itemize

@section remap

Remap pixels using 2nd: Xmap and 3rd: Ymap input video stream.

Destination pixel at position (X, Y) will be picked from source (x, y) position
where x = Xmap(X, Y) and y = Ymap(X, Y). If mapping values are out of range, zero
value for pixel will be used for destination pixel.

Xmap and Ymap input video streams must be of same dimensions. Output video stream
will have Xmap/Ymap video stream dimensions.
Xmap and Ymap input video streams are 16bit depth, single channel.

@table @option
@item format
Specify pixel format of output from this filter. Can be @code{color} or @code{gray}.
Default is @code{color}.

@item fill
Specify the color of the unmapped pixels. For the syntax of this option,
check the @ref{color syntax,,"Color" section in the ffmpeg-utils
manual,ffmpeg-utils}. Default color is @code{black}.
@end table

@section removegrain

The removegrain filter is a spatial denoiser for progressive video.

@table @option
@item m0
Set mode for the first plane.

@item m1
Set mode for the second plane.

@item m2
Set mode for the third plane.

@item m3
Set mode for the fourth plane.
@end table

Range of mode is from 0 to 24. Description of each mode follows:

@table @var
@item 0
Leave input plane unchanged. Default.

@item 1
Clips the pixel with the minimum and maximum of the 8 neighbour pixels.

@item 2
Clips the pixel with the second minimum and maximum of the 8 neighbour pixels.

@item 3
Clips the pixel with the third minimum and maximum of the 8 neighbour pixels.

@item 4
Clips the pixel with the fourth minimum and maximum of the 8 neighbour pixels.
This is equivalent to a median filter.

@item 5
Line-sensitive clipping giving the minimal change.

@item 6
Line-sensitive clipping, intermediate.

@item 7
Line-sensitive clipping, intermediate.

@item 8
Line-sensitive clipping, intermediate.

@item 9
Line-sensitive clipping on a line where the neighbours pixels are the closest.

@item 10
Replaces the target pixel with the closest neighbour.

@item 11
[1 2 1] horizontal and vertical kernel blur.

@item 12
Same as mode 11.

@item 13
Bob mode, interpolates top field from the line where the neighbours
pixels are the closest.

@item 14
Bob mode, interpolates bottom field from the line where the neighbours
pixels are the closest.

@item 15
Bob mode, interpolates top field. Same as 13 but with a more complicated
interpolation formula.

@item 16
Bob mode, interpolates bottom field. Same as 14 but with a more complicated
interpolation formula.

@item 17
Clips the pixel with the minimum and maximum of respectively the maximum and
minimum of each pair of opposite neighbour pixels.

@item 18
Line-sensitive clipping using opposite neighbours whose greatest distance from
the current pixel is minimal.

@item 19
Replaces the pixel with the average of its 8 neighbours.

@item 20
Averages the 9 pixels ([1 1 1] horizontal and vertical blur).

@item 21
Clips pixels using the averages of opposite neighbour.

@item 22
Same as mode 21 but simpler and faster.

@item 23
Small edge and halo removal, but reputed useless.

@item 24
Similar as 23.
@end table

@section removelogo

Suppress a TV station logo, using an image file to determine which
pixels comprise the logo. It works by filling in the pixels that
comprise the logo with neighboring pixels.

The filter accepts the following options:

@table @option
@item filename, f
Set the filter bitmap file, which can be any image format supported by
libavformat. The width and height of the image file must match those of the
video stream being processed.
@end table

Pixels in the provided bitmap image with a value of zero are not
considered part of the logo, non-zero pixels are considered part of
the logo. If you use white (255) for the logo and black (0) for the
rest, you will be safe. For making the filter bitmap, it is
recommended to take a screen capture of a black frame with the logo
visible, and then using a threshold filter followed by the erode
filter once or twice.

If needed, little splotches can be fixed manually. Remember that if
logo pixels are not covered, the filter quality will be much
reduced. Marking too many pixels as part of the logo does not hurt as
much, but it will increase the amount of blurring needed to cover over
the image and will destroy more information than necessary, and extra
pixels will slow things down on a large logo.

@section repeatfields

This filter uses the repeat_field flag from the Video ES headers and hard repeats
fields based on its value.

@section reverse

Reverse a video clip.

Warning: This filter requires memory to buffer the entire clip, so trimming
is suggested.

@subsection Examples

@itemize
@item
Take the first 5 seconds of a clip, and reverse it.
@example
trim=end=5,reverse
@end example
@end itemize

@section rgbashift
Shift R/G/B/A pixels horizontally and/or vertically.

The filter accepts the following options:
@table @option
@item rh
Set amount to shift red horizontally.
@item rv
Set amount to shift red vertically.
@item gh
Set amount to shift green horizontally.
@item gv
Set amount to shift green vertically.
@item bh
Set amount to shift blue horizontally.
@item bv
Set amount to shift blue vertically.
@item ah
Set amount to shift alpha horizontally.
@item av
Set amount to shift alpha vertically.
@item edge
Set edge mode, can be @var{smear}, default, or @var{warp}.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section roberts
Apply roberts cross 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 rotate

Rotate video by an arbitrary angle expressed in radians.

The filter accepts the following options:

A description of the optional parameters follows.
@table @option
@item angle, a
Set an expression for the angle by which to rotate the input video
clockwise, expressed as a number of radians. A negative value will
result in a counter-clockwise rotation. By default it is set to "0".

This expression is evaluated for each frame.

@item out_w, ow
Set the output width expression, default value is "iw".
This expression is evaluated just once during configuration.

@item out_h, oh
Set the output height expression, default value is "ih".
This expression is evaluated just once during configuration.

@item bilinear
Enable bilinear interpolation if set to 1, a value of 0 disables
it. Default value is 1.

@item fillcolor, c
Set the color used to fill the output area not covered by the rotated
image. For the general syntax of this option, check the
@ref{color syntax,,"Color" section in the ffmpeg-utils manual,ffmpeg-utils}.
If the special value "none" is selected then no
background is printed (useful for example if the background is never shown).

Default value is "black".
@end table

The expressions for the angle and the output size can contain the
following constants and functions:

@table @option
@item n
sequential number of the input frame, starting from 0. It is always NAN
before the first frame is filtered.

@item t
time in seconds of the input frame, it is set to 0 when the filter is
configured. It is always NAN before the first frame is filtered.

@item hsub
@item vsub
horizontal and vertical chroma subsample values. For example for the
pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1.

@item in_w, iw
@item in_h, ih
the input video width and height

@item out_w, ow
@item out_h, oh
the output width and height, that is the size of the padded area as
specified by the @var{width} and @var{height} expressions

@item rotw(a)
@item roth(a)
the minimal width/height required for completely containing the input
video rotated by @var{a} radians.

These are only available when computing the @option{out_w} and
@option{out_h} expressions.
@end table

@subsection Examples

@itemize
@item
Rotate the input by PI/6 radians clockwise:
@example
rotate=PI/6
@end example

@item
Rotate the input by PI/6 radians counter-clockwise:
@example
rotate=-PI/6
@end example

@item
Rotate the input by 45 degrees clockwise:
@example
rotate=45*PI/180
@end example

@item
Apply a constant rotation with period T, starting from an angle of PI/3:
@example
rotate=PI/3+2*PI*t/T
@end example

@item
Make the input video rotation oscillating with a period of T
seconds and an amplitude of A radians:
@example
rotate=A*sin(2*PI/T*t)
@end example

@item
Rotate the video, output size is chosen so that the whole rotating
input video is always completely contained in the output:
@example
rotate='2*PI*t:ow=hypot(iw,ih):oh=ow'
@end example

@item
Rotate the video, reduce the output size so that no background is ever
shown:
@example
rotate=2*PI*t:ow='min(iw,ih)/sqrt(2)':oh=ow:c=none
@end example
@end itemize

@subsection Commands

The filter supports the following commands:

@table @option
@item a, angle
Set the angle expression.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.
@end table

@section sab

Apply Shape Adaptive Blur.

The filter accepts the following options:

@table @option
@item luma_radius, lr
Set luma blur filter strength, must be a value in range 0.1-4.0, default
value is 1.0. A greater value will result in a more blurred image, and
in slower processing.

@item luma_pre_filter_radius, lpfr
Set luma pre-filter radius, must be a value in the 0.1-2.0 range, default
value is 1.0.

@item luma_strength, ls
Set luma maximum difference between pixels to still be considered, must
be a value in the 0.1-100.0 range, default value is 1.0.

@item chroma_radius, cr
Set chroma blur filter strength, must be a value in range -0.9-4.0. A
greater value will result in a more blurred image, and in slower
processing.

@item chroma_pre_filter_radius, cpfr
Set chroma pre-filter radius, must be a value in the -0.9-2.0 range.

@item chroma_strength, cs
Set chroma maximum difference between pixels to still be considered,
must be a value in the -0.9-100.0 range.
@end table

Each chroma option value, if not explicitly specified, is set to the
corresponding luma option value.

@anchor{scale}
@section scale

Scale (resize) the input video, using the libswscale library.

The scale filter forces the output display aspect ratio to be the same
of the input, by changing the output sample aspect ratio.

If the input image format is different from the format requested by
the next filter, the scale filter will convert the input to the
requested format.

@subsection Options
The filter accepts the following options, or any of the options
supported by the libswscale scaler.

See @ref{scaler_options,,the ffmpeg-scaler manual,ffmpeg-scaler} for
the complete list of scaler options.

@table @option
@item width, w
@item height, h
Set the output video dimension expression. Default value is the input
dimension.

If the @var{width} or @var{w} value is 0, the input width is used for
the output. If the @var{height} or @var{h} value is 0, the input height
is used for the output.

If one and only one of the values is -n with n >= 1, the scale filter
will use a value that maintains the aspect ratio of the input image,
calculated from the other specified dimension. After that it will,
however, make sure that the calculated dimension is divisible by n and
adjust the value if necessary.

If both values are -n with n >= 1, the behavior will be identical to
both values being set to 0 as previously detailed.

See below for the list of accepted constants for use in the dimension
expression.

@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

Default value is @samp{init}.


@item interl
Set the interlacing mode. It accepts the following values:

@table @samp
@item 1
Force interlaced aware scaling.

@item 0
Do not apply interlaced scaling.

@item -1
Select interlaced aware scaling depending on whether the source frames
are flagged as interlaced or not.
@end table

Default value is @samp{0}.

@item flags
Set libswscale scaling flags. See
@ref{sws_flags,,the ffmpeg-scaler manual,ffmpeg-scaler} for the
complete list of values. If not explicitly specified the filter applies
the default flags.


@item param0, param1
Set libswscale input parameters for scaling algorithms that need them. See
@ref{sws_params,,the ffmpeg-scaler manual,ffmpeg-scaler} for the
complete documentation. If not explicitly specified the filter applies
empty parameters.



@item size, s
Set the video size. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.

@item in_color_matrix
@item out_color_matrix
Set in/output YCbCr color space type.

This allows the autodetected value to be overridden as well as allows forcing
a specific value used for the output and encoder.

If not specified, the color space type depends on the pixel format.

Possible values:

@table @samp
@item auto
Choose automatically.

@item bt709
Format conforming to International Telecommunication Union (ITU)
Recommendation BT.709.

@item fcc
Set color space conforming to the United States Federal Communications
Commission (FCC) Code of Federal Regulations (CFR) Title 47 (2003) 73.682 (a).

@item bt601
@item bt470
@item smpte170m
Set color space conforming to:

@itemize
@item
ITU Radiocommunication Sector (ITU-R) Recommendation BT.601

@item
ITU-R Rec. BT.470-6 (1998) Systems B, B1, and G

@item
Society of Motion Picture and Television Engineers (SMPTE) ST 170:2004

@end itemize

@item smpte240m
Set color space conforming to SMPTE ST 240:1999.

@item bt2020
Set color space conforming to ITU-R BT.2020 non-constant luminance system.
@end table

@item in_range
@item out_range
Set in/output YCbCr sample range.

This allows the autodetected value to be overridden as well as allows forcing
a specific value used for the output and encoder. If not specified, the
range depends on the pixel format. Possible values:

@table @samp
@item auto/unknown
Choose automatically.

@item jpeg/full/pc
Set full range (0-255 in case of 8-bit luma).

@item mpeg/limited/tv
Set "MPEG" range (16-235 in case of 8-bit luma).
@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.

@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 hsub
@item vsub
horizontal and vertical input chroma subsample values. For example for the
pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1.

@item ohsub
@item ovsub
horizontal and vertical output chroma subsample values. For example for the
pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1.

@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}.
@end table

@subsection Examples

@itemize
@item
Scale the input video to a size of 200x100
@example
scale=w=200:h=100
@end example

This is equivalent to:
@example
scale=200:100
@end example

or:
@example
scale=200x100
@end example

@item
Specify a size abbreviation for the output size:
@example
scale=qcif
@end example

which can also be written as:
@example
scale=size=qcif
@end example

@item
Scale the input to 2x:
@example
scale=w=2*iw:h=2*ih
@end example

@item
The above is the same as:
@example
scale=2*in_w:2*in_h
@end example

@item
Scale the input to 2x with forced interlaced scaling:
@example
scale=2*iw:2*ih:interl=1
@end example

@item
Scale the input to half size:
@example
scale=w=iw/2:h=ih/2
@end example

@item
Increase the width, and set the height to the same size:
@example
scale=3/2*iw:ow
@end example

@item
Seek Greek harmony:
@example
scale=iw:1/PHI*iw
scale=ih*PHI:ih
@end example

@item
Increase the height, and set the width to 3/2 of the height:
@example
scale=w=3/2*oh:h=3/5*ih
@end example

@item
Increase the size, making the size a multiple of the chroma
subsample values:
@example
scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
@end example

@item
Increase the width to a maximum of 500 pixels,
keeping the same aspect ratio as the input:
@example
scale=w='min(500\, iw*3/2):h=-1'
@end example

@item
Make pixels square by combining scale and setsar:
@example
scale='trunc(ih*dar):ih',setsar=1/1
@end example

@item
Make pixels square by combining scale and setsar,
making sure the resulting resolution is even (required by some codecs):
@example
scale='trunc(ih*dar/2)*2:trunc(ih/2)*2',setsar=1/1
@end example
@end itemize

@subsection Commands

This filter supports the following commands:
@table @option
@item width, w
@item height, h
Set the output video dimension expression.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.
@end table

@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.

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.

@end table

@section scale2ref

Scale (resize) the input video, based on a reference video.

See the scale filter for available options, scale2ref supports the same but
uses the reference video instead of the main input as basis. scale2ref 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_hsub
@item main_vsub
The main input video's horizontal and vertical chroma subsample values.
For example for the pixel format "yuv422p" @var{hsub} is 2 and @var{vsub}
is 1.

@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[b][a];[a][b]overlay'
@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=w=oh*mdar:h=ih/10[logo-out][video-out]
@end example
@end itemize

@subsection Commands

This filter supports the following commands:
@table @option
@item width, w
@item height, h
Set the output video dimension expression.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.
@end table

@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.

Available values are:
@table @samp
@item absolute
Specified adjustments are applied "as-is" (added/subtracted to original pixel
component value).
@item relative
Specified adjustments are relative to the original component value.
@end table
Default is @code{absolute}.
@item reds
Adjustments for red pixels (pixels where the red component is the maximum)
@item yellows
Adjustments for yellow pixels (pixels where the blue component is the minimum)
@item greens
Adjustments for green pixels (pixels where the green component is the maximum)
@item cyans
Adjustments for cyan pixels (pixels where the red component is the minimum)
@item blues
Adjustments for blue pixels (pixels where the blue component is the maximum)
@item magentas
Adjustments for magenta pixels (pixels where the green component is the minimum)
@item whites
Adjustments for white pixels (pixels where all components are greater than 128)
@item neutrals
Adjustments for all pixels except pure black and pure white
@item blacks
Adjustments for black pixels (pixels where all components are lesser than 128)
@item psfile
Specify a Photoshop selective color file (@code{.asv}) to import the settings from.
@end table

All the adjustment settings (@option{reds}, @option{yellows}, ...) accept up to
4 space separated floating point adjustment values in the [-1,1] range,
respectively to adjust the amount of cyan, magenta, yellow and black for the
pixels of its range.

@subsection Examples

@itemize
@item
Increase cyan by 50% and reduce yellow by 33% in every green areas, and
increase magenta by 27% in blue areas:
@example
selectivecolor=greens=.5 0 -.33 0:blues=0 .27
@end example

@item
Use a Photoshop selective color preset:
@example
selectivecolor=psfile=MySelectiveColorPresets/Misty.asv
@end example
@end itemize

@anchor{separatefields}
@section separatefields

The @code{separatefields} takes a frame-based video input and splits
each frame into its components fields, producing a new half height clip
with twice the frame rate and twice the frame count.

This filter use field-dominance information in frame to decide which
of each pair of fields to place first in the output.
If it gets it wrong use @ref{setfield} filter before @code{separatefields} filter.

@section setdar, setsar

The @code{setdar} filter sets the Display Aspect Ratio for the filter
output video.

This is done by changing the specified Sample (aka Pixel) Aspect
Ratio, according to the following equation:
@example
@var{DAR} = @var{HORIZONTAL_RESOLUTION} / @var{VERTICAL_RESOLUTION} * @var{SAR}
@end example

Keep in mind that the @code{setdar} filter does not modify the pixel
dimensions of the video frame. Also, the display aspect ratio set by
this filter may be changed by later filters in the filterchain,
e.g. in case of scaling or if another "setdar" or a "setsar" filter is
applied.

The @code{setsar} filter sets the Sample (aka Pixel) Aspect Ratio for
the filter output video.

Note that as a consequence of the application of this filter, the
output display aspect ratio will change according to the equation
above.

Keep in mind that the sample aspect ratio set by the @code{setsar}
filter may be changed by later filters in the filterchain, e.g. if
another "setsar" or a "setdar" filter is applied.

It accepts the following parameters:

@table @option
@item r, ratio, dar (@code{setdar} only), sar (@code{setsar} only)
Set the aspect ratio used by the filter.

The parameter can be a floating point number string, an expression, or
a string of the form @var{num}:@var{den}, where @var{num} and
@var{den} are the numerator and denominator of the aspect ratio. If
the parameter is not specified, it is assumed the value "0".
In case the form "@var{num}:@var{den}" is used, the @code{:} character
should be escaped.

@item max
Set the maximum integer value to use for expressing numerator and
denominator when reducing the expressed aspect ratio to a rational.
Default value is @code{100}.

@end table

The parameter @var{sar} is an expression containing
the following constants:

@table @option
@item E, PI, PHI
These are approximated values for the mathematical constants e
(Euler's number), pi (Greek pi), and phi (the golden ratio).

@item w, h
The input width and height.

@item a
These are the same as @var{w} / @var{h}.

@item sar
The input sample aspect ratio.

@item dar
The input display aspect ratio. It is the same as
(@var{w} / @var{h}) * @var{sar}.

@item hsub, vsub
Horizontal and vertical chroma subsample values. For example, for the
pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1.
@end table

@subsection Examples

@itemize

@item
To change the display aspect ratio to 16:9, specify one of the following:
@example
setdar=dar=1.77777
setdar=dar=16/9
@end example

@item
To change the sample aspect ratio to 10:11, specify:
@example
setsar=sar=10/11
@end example

@item
To set a display aspect ratio of 16:9, and specify a maximum integer value of
1000 in the aspect ratio reduction, use the command:
@example
setdar=ratio=16/9:max=1000
@end example

@end itemize

@anchor{setfield}
@section setfield

Force field for the output video frame.

The @code{setfield} filter marks the interlace type field for the
output frames. It does not change the input frame, but only sets the
corresponding property, which affects how the frame is treated by
following filters (e.g. @code{fieldorder} or @code{yadif}).

The filter accepts the following options:

@table @option

@item mode
Available values are:

@table @samp
@item auto
Keep the same field property.

@item bff
Mark the frame as bottom-field-first.

@item tff
Mark the frame as top-field-first.

@item prog
Mark the frame as progressive.
@end table
@end table

@anchor{setparams}
@section setparams

Force frame parameter for the output video frame.

The @code{setparams} filter marks interlace and color range for the
output frames. It does not change the input frame, but only sets the
corresponding property, which affects how the frame is treated by
filters/encoders.

@table @option
@item field_mode
Available values are:

@table @samp
@item auto
Keep the same field property (default).

@item bff
Mark the frame as bottom-field-first.

@item tff
Mark the frame as top-field-first.

@item prog
Mark the frame as progressive.
@end table

@item range
Available values are:

@table @samp
@item auto
Keep the same color range property (default).

@item unspecified, unknown
Mark the frame as unspecified color range.

@item limited, tv, mpeg
Mark the frame as limited range.

@item full, pc, jpeg
Mark the frame as full range.
@end table

@item color_primaries
Set the color primaries.
Available values are:

@table @samp
@item auto
Keep the same color primaries property (default).

@item bt709
@item unknown
@item bt470m
@item bt470bg
@item smpte170m
@item smpte240m
@item film
@item bt2020
@item smpte428
@item smpte431
@item smpte432
@item jedec-p22
@end table

@item color_trc
Set the color transfer.
Available values are:

@table @samp
@item auto
Keep the same color trc property (default).

@item bt709
@item unknown
@item bt470m
@item bt470bg
@item smpte170m
@item smpte240m
@item linear
@item log100
@item log316
@item iec61966-2-4
@item bt1361e
@item iec61966-2-1
@item bt2020-10
@item bt2020-12
@item smpte2084
@item smpte428
@item arib-std-b67
@end table

@item colorspace
Set the colorspace.
Available values are:

@table @samp
@item auto
Keep the same colorspace property (default).

@item gbr
@item bt709
@item unknown
@item fcc
@item bt470bg
@item smpte170m
@item smpte240m
@item ycgco
@item bt2020nc
@item bt2020c
@item smpte2085
@item chroma-derived-nc
@item chroma-derived-c
@item ictcp
@end table
@end table

@section shear
Apply shear transform to input video.

This filter supports the following options:

@table @option
@item shx
Shear factor in X-direction. Default value is 0.
Allowed range is from -2 to 2.

@item shy
Shear factor in Y-direction. Default value is 0.
Allowed range is from -2 to 2.

@item fillcolor, c
Set the color used to fill the output area not covered by the transformed
video. For the general syntax of this option, check the
@ref{color syntax,,"Color" section in the ffmpeg-utils manual,ffmpeg-utils}.
If the special value "none" is selected then no
background is printed (useful for example if the background is never shown).

Default value is "black".

@item interp
Set interpolation type. Can be @code{bilinear} or @code{nearest}. Default is @code{bilinear}.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section showinfo

Show a line containing various information for each input video frame.
The input video is not modified.

This filter supports the following options:

@table @option
@item checksum
Calculate checksums of each plane. By default enabled.
@end table

The shown line contains a sequence of key/value pairs of the form
@var{key}:@var{value}.

The following values are shown in the output:

@table @option
@item n
The (sequential) number of the input frame, starting from 0.

@item pts
The Presentation TimeStamp of the input frame, expressed as a number of
time base units. The time base unit depends on the filter input pad.

@item pts_time
The Presentation TimeStamp of the input frame, expressed as a number of
seconds.

@item pos
The position of the frame in the input stream, or -1 if this information is
unavailable and/or meaningless (for example in case of synthetic video).

@item fmt
The pixel format name.

@item sar
The sample aspect ratio of the input frame, expressed in the form
@var{num}/@var{den}.

@item s
The size of the input frame. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.

@item i
The type of interlaced mode ("P" for "progressive", "T" for top field first, "B"
for bottom field first).

@item iskey
This is 1 if the frame is a key frame, 0 otherwise.

@item type
The picture type of the input frame ("I" for an I-frame, "P" for a
P-frame, "B" for a B-frame, or "?" for an unknown type).
Also refer to the documentation of the @code{AVPictureType} enum and of
the @code{av_get_picture_type_char} function defined in
@file{libavutil/avutil.h}.

@item checksum
The Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame.

@item plane_checksum
The Adler-32 checksum (printed in hexadecimal) of each plane of the input frame,
expressed in the form "[@var{c0} @var{c1} @var{c2} @var{c3}]".

@item mean
The mean value of pixels in each plane of the input frame, expressed in the form
"[@var{mean0} @var{mean1} @var{mean2} @var{mean3}]".

@item stdev
The standard deviation of pixel values in each plane of the input frame, expressed
in the form "[@var{stdev0} @var{stdev1} @var{stdev2} @var{stdev3}]".

@end table

@section showpalette

Displays the 256 colors palette of each frame. This filter is only relevant for
@var{pal8} pixel format frames.

It accepts the following option:

@table @option
@item s
Set the size of the box used to represent one palette color entry. Default is
@code{30} (for a @code{30x30} pixel box).
@end table

@section shuffleframes

Reorder and/or duplicate and/or drop video frames.

It accepts the following parameters:

@table @option
@item mapping
Set the destination indexes of input frames.
This is space or '|' separated list of indexes that maps input frames to output
frames. Number of indexes also sets maximal value that each index may have.
'-1' index have special meaning and that is to drop frame.
@end table

The first frame has the index 0. The default is to keep the input unchanged.

@subsection Examples

@itemize
@item
Swap second and third frame of every three frames of the input:
@example
ffmpeg -i INPUT -vf "shuffleframes=0 2 1" OUTPUT
@end example

@item
Swap 10th and 1st frame of every ten frames of the input:
@example
ffmpeg -i INPUT -vf "shuffleframes=9 1 2 3 4 5 6 7 8 0" OUTPUT
@end example
@end itemize

@section shufflepixels

Reorder pixels in video frames.

This filter accepts the following options:

@table @option
@item direction, d
Set shuffle direction. Can be forward or inverse direction.
Default direction is forward.

@item mode, m
Set shuffle mode. Can be horizontal, vertical or block mode.

@item width, w
@item height, h
Set shuffle block_size. In case of horizontal shuffle mode only width
part of size is used, and in case of vertical shuffle mode only height
part of size is used.

@item seed, s
Set random seed used with shuffling pixels. Mainly useful to set to be able
to reverse filtering process to get original input.
For example, to reverse forward shuffle you need to use same parameters
and exact same seed and to set direction to inverse.
@end table

@section shuffleplanes

Reorder and/or duplicate video planes.

It accepts the following parameters:

@table @option

@item map0
The index of the input plane to be used as the first output plane.

@item map1
The index of the input plane to be used as the second output plane.

@item map2
The index of the input plane to be used as the third output plane.

@item map3
The index of the input plane to be used as the fourth output plane.

@end table

The first plane has the index 0. The default is to keep the input unchanged.

@subsection Examples

@itemize
@item
Swap the second and third planes of the input:
@example
ffmpeg -i INPUT -vf shuffleplanes=0:2:1:3 OUTPUT
@end example
@end itemize

@anchor{signalstats}
@section signalstats
Evaluate various visual metrics that assist in determining issues associated
with the digitization of analog video media.

By default the filter will log these metadata values:

@table @option
@item YMIN
Display the minimal Y value contained within the input frame. Expressed in
range of [0-255].

@item YLOW
Display the Y value at the 10% percentile within the input frame. Expressed in
range of [0-255].

@item YAVG
Display the average Y value within the input frame. Expressed in range of
[0-255].

@item YHIGH
Display the Y value at the 90% percentile within the input frame. Expressed in
range of [0-255].

@item YMAX
Display the maximum Y value contained within the input frame. Expressed in
range of [0-255].

@item UMIN
Display the minimal U value contained within the input frame. Expressed in
range of [0-255].

@item ULOW
Display the U value at the 10% percentile within the input frame. Expressed in
range of [0-255].

@item UAVG
Display the average U value within the input frame. Expressed in range of
[0-255].

@item UHIGH
Display the U value at the 90% percentile within the input frame. Expressed in
range of [0-255].

@item UMAX
Display the maximum U value contained within the input frame. Expressed in
range of [0-255].

@item VMIN
Display the minimal V value contained within the input frame. Expressed in
range of [0-255].

@item VLOW
Display the V value at the 10% percentile within the input frame. Expressed in
range of [0-255].

@item VAVG
Display the average V value within the input frame. Expressed in range of
[0-255].

@item VHIGH
Display the V value at the 90% percentile within the input frame. Expressed in
range of [0-255].

@item VMAX
Display the maximum V value contained within the input frame. Expressed in
range of [0-255].

@item SATMIN
Display the minimal saturation value contained within the input frame.
Expressed in range of [0-~181.02].

@item SATLOW
Display the saturation value at the 10% percentile within the input frame.
Expressed in range of [0-~181.02].

@item SATAVG
Display the average saturation value within the input frame. Expressed in range
of [0-~181.02].

@item SATHIGH
Display the saturation value at the 90% percentile within the input frame.
Expressed in range of [0-~181.02].

@item SATMAX
Display the maximum saturation value contained within the input frame.
Expressed in range of [0-~181.02].

@item HUEMED
Display the median value for hue within the input frame. Expressed in range of
[0-360].

@item HUEAVG
Display the average value for hue within the input frame. Expressed in range of
[0-360].

@item YDIF
Display the average of sample value difference between all values of the Y
plane in the current frame and corresponding values of the previous input frame.
Expressed in range of [0-255].

@item UDIF
Display the average of sample value difference between all values of the U
plane in the current frame and corresponding values of the previous input frame.
Expressed in range of [0-255].

@item VDIF
Display the average of sample value difference between all values of the V
plane in the current frame and corresponding values of the previous input frame.
Expressed in range of [0-255].

@item YBITDEPTH
Display bit depth of Y plane in current frame.
Expressed in range of [0-16].

@item UBITDEPTH
Display bit depth of U plane in current frame.
Expressed in range of [0-16].

@item VBITDEPTH
Display bit depth of V plane in current frame.
Expressed in range of [0-16].
@end table

The filter accepts the following options:

@table @option
@item stat
@item out

@option{stat} specify an additional form of image analysis.
@option{out} output video with the specified type of pixel highlighted.

Both options accept the following values:

@table @samp
@item tout
Identify @var{temporal outliers} pixels. A @var{temporal outlier} is a pixel
unlike the neighboring pixels of the same field. Examples of temporal outliers
include the results of video dropouts, head clogs, or tape tracking issues.

@item vrep
Identify @var{vertical line repetition}. Vertical line repetition includes
similar rows of pixels within a frame. In born-digital video vertical line
repetition is common, but this pattern is uncommon in video digitized from an
analog source. When it occurs in video that results from the digitization of an
analog source it can indicate concealment from a dropout compensator.

@item brng
Identify pixels that fall outside of legal broadcast range.
@end table

@item color, c
Set the highlight color for the @option{out} option. The default color is
yellow.
@end table

@subsection Examples

@itemize
@item
Output data of various video metrics:
@example
ffprobe -f lavfi movie=example.mov,signalstats="stat=tout+vrep+brng" -show_frames
@end example

@item
Output specific data about the minimum and maximum values of the Y plane per frame:
@example
ffprobe -f lavfi movie=example.mov,signalstats -show_entries frame_tags=lavfi.signalstats.YMAX,lavfi.signalstats.YMIN
@end example

@item
Playback video while highlighting pixels that are outside of broadcast range in red.
@example
ffplay example.mov -vf signalstats="out=brng:color=red"
@end example

@item
Playback video with signalstats metadata drawn over the frame.
@example
ffplay example.mov -vf signalstats=stat=brng+vrep+tout,drawtext=fontfile=FreeSerif.ttf:textfile=signalstat_drawtext.txt
@end example

The contents of signalstat_drawtext.txt used in the command are:
@example
time %@{pts:hms@}
Y (%@{metadata:lavfi.signalstats.YMIN@}-%@{metadata:lavfi.signalstats.YMAX@})
U (%@{metadata:lavfi.signalstats.UMIN@}-%@{metadata:lavfi.signalstats.UMAX@})
V (%@{metadata:lavfi.signalstats.VMIN@}-%@{metadata:lavfi.signalstats.VMAX@})
saturation maximum: %@{metadata:lavfi.signalstats.SATMAX@}

@end example
@end itemize

@anchor{signature}
@section signature

Calculates the MPEG-7 Video Signature. The filter can handle more than one
input. In this case the matching between the inputs can be calculated additionally.
The filter always passes through the first input. The signature of each stream can
be written into a file.

It accepts the following options:

@table @option
@item detectmode
Enable or disable the matching process.

Available values are:

@table @samp
@item off
Disable the calculation of a matching (default).
@item full
Calculate the matching for the whole video and output whether the whole video
matches or only parts.
@item fast
Calculate only until a matching is found or the video ends. Should be faster in
some cases.
@end table

@item nb_inputs
Set the number of inputs. The option value must be a non negative integer.
Default value is 1.

@item filename
Set the path to which the output is written. If there is more than one input,
the path must be a prototype, i.e. must contain %d or %0nd (where n is a positive
integer), that will be replaced with the input number. If no filename is
specified, no output will be written. This is the default.

@item format
Choose the output format.

Available values are:

@table @samp
@item binary
Use the specified binary representation (default).
@item xml
Use the specified xml representation.
@end table

@item th_d
Set threshold to detect one word as similar. The option value must be an integer
greater than zero. The default value is 9000.

@item th_dc
Set threshold to detect all words as similar. The option value must be an integer
greater than zero. The default value is 60000.

@item th_xh
Set threshold to detect frames as similar. The option value must be an integer
greater than zero. The default value is 116.

@item th_di
Set the minimum length of a sequence in frames to recognize it as matching
sequence. The option value must be a non negative integer value.
The default value is 0.

@item th_it
Set the minimum relation, that matching frames to all frames must have.
The option value must be a double value between 0 and 1. The default value is 0.5.
@end table

@subsection Examples

@itemize
@item
To calculate the signature of an input video and store it in signature.bin:
@example
ffmpeg -i input.mkv -vf signature=filename=signature.bin -map 0:v -f null -
@end example

@item
To detect whether two videos match and store the signatures in XML format in
signature0.xml and signature1.xml:
@example
ffmpeg -i input1.mkv -i input2.mkv -filter_complex "[0:v][1:v] signature=nb_inputs=2:detectmode=full:format=xml:filename=signature%d.xml" -map :v -f null -
@end example

@end itemize

@anchor{smartblur}
@section smartblur

Blur the input video without impacting the outlines.

It accepts the following options:

@table @option
@item luma_radius, lr
Set the luma radius. The option value must be a float number in
the range [0.1,5.0] that specifies the variance of the gaussian filter
used to blur the image (slower if larger). Default value is 1.0.

@item luma_strength, ls
Set the luma strength. The option value must be a float number
in the range [-1.0,1.0] that configures the blurring. A value included
in [0.0,1.0] will blur the image whereas a value included in
[-1.0,0.0] will sharpen the image. Default value is 1.0.

@item luma_threshold, lt
Set the luma threshold used as a coefficient to determine
whether a pixel should be blurred or not. The option value must be an
integer in the range [-30,30]. A value of 0 will filter all the image,
a value included in [0,30] will filter flat areas and a value included
in [-30,0] will filter edges. Default value is 0.

@item chroma_radius, cr
Set the chroma radius. The option value must be a float number in
the range [0.1,5.0] that specifies the variance of the gaussian filter
used to blur the image (slower if larger). Default value is @option{luma_radius}.

@item chroma_strength, cs
Set the chroma strength. The option value must be a float number
in the range [-1.0,1.0] that configures the blurring. A value included
in [0.0,1.0] will blur the image whereas a value included in
[-1.0,0.0] will sharpen the image. Default value is @option{luma_strength}.

@item chroma_threshold, ct
Set the chroma threshold used as a coefficient to determine
whether a pixel should be blurred or not. The option value must be an
integer in the range [-30,30]. A value of 0 will filter all the image,
a value included in [0,30] will filter flat areas and a value included
in [-30,0] will filter edges. Default value is @option{luma_threshold}.
@end table

If a chroma option is not explicitly set, the corresponding luma value
is set.

@section sobel
Apply sobel 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}.

@anchor{spp}
@section spp

Apply a simple postprocessing filter that compresses and decompresses the image
at several (or - in the case of @option{quality} level @code{6} - all) shifts
and average the results.

The filter accepts the following options:

@table @option
@item quality
Set quality. This option defines the number of levels for averaging. It accepts
an integer in the range 0-6. If set to @code{0}, the filter will have no
effect. A value of @code{6} means the higher quality. For each increment of
that value the speed drops by a factor of approximately 2.  Default value is
@code{3}.

@item qp
Force a constant quantization parameter. If not set, the filter will use the QP
from the video stream (if available).

@item mode
Set thresholding mode. Available modes are:

@table @samp
@item hard
Set hard thresholding (default).
@item soft
Set soft thresholding (better de-ringing effect, but likely blurrier).
@end table

@item use_bframe_qp
Enable the use of the QP from the B-Frames if set to @code{1}. Using this
option may cause flicker since the B-Frames have often larger QP. Default is
@code{0} (not enabled).
@end table

@subsection Commands

This filter supports the following commands:
@table @option
@item quality, level
Set quality level. The value @code{max} can be used to set the maximum level,
currently @code{6}.
@end table

@anchor{sr}
@section sr

Scale the input by applying one of the super-resolution methods based on
convolutional neural networks. Supported models:

@itemize
@item
Super-Resolution Convolutional Neural Network model (SRCNN).
See @url{https://arxiv.org/abs/1501.00092}.

@item
Efficient Sub-Pixel Convolutional Neural Network model (ESPCN).
See @url{https://arxiv.org/abs/1609.05158}.
@end itemize

Training scripts as well as scripts for model file (.pb) saving can be found at
@url{https://github.com/XueweiMeng/sr/tree/sr_dnn_native}. Original repository
is at @url{https://github.com/HighVoltageRocknRoll/sr.git}.

Native model files (.model) can be generated from TensorFlow model
files (.pb) by using tools/python/convert.py

The filter accepts the following options:

@table @option
@item dnn_backend
Specify which DNN backend to use for model loading and execution. This option accepts
the following values:

@table @samp
@item native
Native implementation of DNN loading and execution.

@item tensorflow
TensorFlow backend. To enable this backend you
need to install the TensorFlow for C library (see
@url{https://www.tensorflow.org/install/install_c}) and configure FFmpeg with
@code{--enable-libtensorflow}
@end table

Default value is @samp{native}.

@item model
Set path to model file specifying network architecture and its parameters.
Note that different backends use different file formats. TensorFlow backend
can load files for both formats, while native backend can load files for only
its format.

@item scale_factor
Set scale factor for SRCNN model. Allowed values are @code{2}, @code{3} and @code{4}.
Default value is @code{2}. Scale factor is necessary for SRCNN model, because it accepts
input upscaled using bicubic upscaling with proper scale factor.
@end table

This feature can also be finished with @ref{dnn_processing} filter.

@section ssim

Obtain the SSIM (Structural SImilarity Metric) between two input videos.

This filter takes in input two input videos, the first input is
considered the "main" source and is passed unchanged to the
output. The second input is used as a "reference" video for computing
the SSIM.

Both video inputs must have the same resolution and pixel format for
this filter to work correctly. Also it assumes that both inputs
have the same number of frames, which are compared one by one.

The filter stores the calculated SSIM of each frame.

The description of the accepted parameters follows.

@table @option
@item stats_file, f
If specified the filter will use the named file to save the SSIM of
each individual frame. When filename equals "-" the data is sent to
standard output.
@end table

The file printed if @var{stats_file} is selected, contains a sequence of
key/value pairs of the form @var{key}:@var{value} for each compared
couple of frames.

A description of each shown parameter follows:

@table @option
@item n
sequential number of the input frame, starting from 1

@item Y, U, V, R, G, B
SSIM of the compared frames for the component specified by the suffix.

@item All
SSIM of the compared frames for the whole frame.

@item dB
Same as above but in dB representation.
@end table

This filter also supports the @ref{framesync} options.

@subsection Examples
@itemize
@item
For example:
@example
movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
[main][ref] ssim="stats_file=stats.log" [out]
@end example

On this example the input file being processed is compared with the
reference file @file{ref_movie.mpg}. The SSIM of each individual frame
is stored in @file{stats.log}.

@item
Another example with both psnr and ssim at same time:
@example
ffmpeg -i main.mpg -i ref.mpg -lavfi  "ssim;[0:v][1:v]psnr" -f null -
@end example

@item
Another example with different containers:
@example
ffmpeg -i main.mpg -i ref.mkv -lavfi  "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]ssim" -f null -
@end example
@end itemize

@section stereo3d

Convert between different stereoscopic image formats.

The filters accept the following options:

@table @option
@item in
Set stereoscopic image format of input.

Available values for input image formats are:
@table @samp
@item sbsl
side by side parallel (left eye left, right eye right)

@item sbsr
side by side crosseye (right eye left, left eye right)

@item sbs2l
side by side parallel with half width resolution
(left eye left, right eye right)

@item sbs2r
side by side crosseye with half width resolution
(right eye left, left eye right)

@item abl
@item tbl
above-below (left eye above, right eye below)

@item abr
@item tbr
above-below (right eye above, left eye below)

@item ab2l
@item tb2l
above-below with half height resolution
(left eye above, right eye below)

@item ab2r
@item tb2r
above-below with half height resolution
(right eye above, left eye below)

@item al
alternating frames (left eye first, right eye second)

@item ar
alternating frames (right eye first, left eye second)

@item irl
interleaved rows (left eye has top row, right eye starts on next row)

@item irr
interleaved rows (right eye has top row, left eye starts on next row)

@item icl
interleaved columns, left eye first

@item icr
interleaved columns, right eye first

Default value is @samp{sbsl}.
@end table

@item out
Set stereoscopic image format of output.

@table @samp
@item sbsl
side by side parallel (left eye left, right eye right)

@item sbsr
side by side crosseye (right eye left, left eye right)

@item sbs2l
side by side parallel with half width resolution
(left eye left, right eye right)

@item sbs2r
side by side crosseye with half width resolution
(right eye left, left eye right)

@item abl
@item tbl
above-below (left eye above, right eye below)

@item abr
@item tbr
above-below (right eye above, left eye below)

@item ab2l
@item tb2l
above-below with half height resolution
(left eye above, right eye below)

@item ab2r
@item tb2r
above-below with half height resolution
(right eye above, left eye below)

@item al
alternating frames (left eye first, right eye second)

@item ar
alternating frames (right eye first, left eye second)

@item irl
interleaved rows (left eye has top row, right eye starts on next row)

@item irr
interleaved rows (right eye has top row, left eye starts on next row)

@item arbg
anaglyph red/blue gray
(red filter on left eye, blue filter on right eye)

@item argg
anaglyph red/green gray
(red filter on left eye, green filter on right eye)

@item arcg
anaglyph red/cyan gray
(red filter on left eye, cyan filter on right eye)

@item arch
anaglyph red/cyan half colored
(red filter on left eye, cyan filter on right eye)

@item arcc
anaglyph red/cyan color
(red filter on left eye, cyan filter on right eye)

@item arcd
anaglyph red/cyan color optimized with the least squares projection of dubois
(red filter on left eye, cyan filter on right eye)

@item agmg
anaglyph green/magenta gray
(green filter on left eye, magenta filter on right eye)

@item agmh
anaglyph green/magenta half colored
(green filter on left eye, magenta filter on right eye)

@item agmc
anaglyph green/magenta colored
(green filter on left eye, magenta filter on right eye)

@item agmd
anaglyph green/magenta color optimized with the least squares projection of dubois
(green filter on left eye, magenta filter on right eye)

@item aybg
anaglyph yellow/blue gray
(yellow filter on left eye, blue filter on right eye)

@item aybh
anaglyph yellow/blue half colored
(yellow filter on left eye, blue filter on right eye)

@item aybc
anaglyph yellow/blue colored
(yellow filter on left eye, blue filter on right eye)

@item aybd
anaglyph yellow/blue color optimized with the least squares projection of dubois
(yellow filter on left eye, blue filter on right eye)

@item ml
mono output (left eye only)

@item mr
mono output (right eye only)

@item chl
checkerboard, left eye first

@item chr
checkerboard, right eye first

@item icl
interleaved columns, left eye first

@item icr
interleaved columns, right eye first

@item hdmi
HDMI frame pack
@end table

Default value is @samp{arcd}.
@end table

@subsection Examples

@itemize
@item
Convert input video from side by side parallel to anaglyph yellow/blue dubois:
@example
stereo3d=sbsl:aybd
@end example

@item
Convert input video from above below (left eye above, right eye below) to side by side crosseye.
@example
stereo3d=abl:sbsr
@end example
@end itemize

@section streamselect, astreamselect
Select video or audio streams.

The filter accepts the following options:

@table @option
@item inputs
Set number of inputs. Default is 2.

@item map
Set input indexes to remap to outputs.
@end table

@subsection Commands

The @code{streamselect} and @code{astreamselect} filter supports the following
commands:

@table @option
@item map
Set input indexes to remap to outputs.
@end table

@subsection Examples

@itemize
@item
Select first 5 seconds 1st stream and rest of time 2nd stream:
@example
sendcmd='5.0 streamselect map 1',streamselect=inputs=2:map=0
@end example

@item
Same as above, but for audio:
@example
asendcmd='5.0 astreamselect map 1',astreamselect=inputs=2:map=0
@end example
@end itemize

@anchor{subtitles}
@section subtitles

Draw subtitles on top of input video using the libass library.

To enable compilation of this filter you need to configure FFmpeg with
@code{--enable-libass}. This filter also requires a build with libavcodec and
libavformat to convert the passed subtitles file to ASS (Advanced Substation
Alpha) subtitles format.

The filter accepts the following options:

@table @option
@item filename, f
Set the filename of the subtitle file to read. It must be specified.

@item original_size
Specify the size of the original video, the video for which the ASS file
was composed. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
Due to a misdesign in ASS aspect ratio arithmetic, this is necessary to
correctly scale the fonts if the aspect ratio has been changed.

@item fontsdir
Set a directory path containing fonts that can be used by the filter.
These fonts will be used in addition to whatever the font provider uses.

@item alpha
Process alpha channel, by default alpha channel is untouched.

@item charenc
Set subtitles input character encoding. @code{subtitles} filter only. Only
useful if not UTF-8.

@item stream_index, si
Set subtitles stream index. @code{subtitles} filter only.

@item force_style
Override default style or script info parameters of the subtitles. It accepts a
string containing ASS style format @code{KEY=VALUE} couples separated by ",".
@end table

If the first key is not specified, it is assumed that the first value
specifies the @option{filename}.

For example, to render the file @file{sub.srt} on top of the input
video, use the command:
@example
subtitles=sub.srt
@end example

which is equivalent to:
@example
subtitles=filename=sub.srt
@end example

To render the default subtitles stream from file @file{video.mkv}, use:
@example
subtitles=video.mkv
@end example

To render the second subtitles stream from that file, use:
@example
subtitles=video.mkv:si=1
@end example

To make the subtitles stream from @file{sub.srt} appear in 80% transparent blue
@code{DejaVu Serif}, use:
@example
subtitles=sub.srt:force_style='Fontname=DejaVu Serif,PrimaryColour=&HCCFF0000'
@end example

@section super2xsai

Scale the input by 2x and smooth using the Super2xSaI (Scale and
Interpolate) pixel art scaling algorithm.

Useful for enlarging pixel art images without reducing sharpness.

@section swaprect

Swap two rectangular objects in video.

This filter accepts the following options:

@table @option
@item w
Set object width.

@item h
Set object height.

@item x1
Set 1st rect x coordinate.

@item y1
Set 1st rect y coordinate.

@item x2
Set 2nd rect x coordinate.

@item y2
Set 2nd rect y coordinate.

All expressions are evaluated once for each frame.
@end table

The all options are expressions containing the following constants:

@table @option
@item w
@item h
The input width and height.

@item a
same as @var{w} / @var{h}

@item sar
input sample aspect ratio

@item dar
input display aspect ratio, it is the same as (@var{w} / @var{h}) * @var{sar}

@item n
The number of the input frame, starting from 0.

@item t
The timestamp expressed in seconds. It's NAN if the input timestamp is unknown.

@item pos
the position in the file of the input frame, NAN if unknown
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section swapuv
Swap U & V plane.

@section tblend
Blend successive video frames.

See @ref{blend}

@section telecine

Apply telecine process to the video.

This filter accepts the following options:

@table @option
@item first_field
@table @samp
@item top, t
top field first
@item bottom, b
bottom field first
The default value is @code{top}.
@end table

@item pattern
A string of numbers representing the pulldown pattern you wish to apply.
The default value is @code{23}.
@end table

@example
Some typical patterns:

NTSC output (30i):
27.5p: 32222
24p: 23 (classic)
24p: 2332 (preferred)
20p: 33
18p: 334
16p: 3444

PAL output (25i):
27.5p: 12222
24p: 222222222223 ("Euro pulldown")
16.67p: 33
16p: 33333334
@end example

@section thistogram

Compute and draw a color distribution histogram for the input video across time.

Unlike @ref{histogram} video filter which only shows histogram of single input frame
at certain time, this filter shows also past histograms of number of frames defined
by @code{width} option.

The computed histogram is a representation of the color component
distribution in an image.

The filter accepts the following options:

@table @option
@item width, w
Set width of single color component output. Default value is @code{0}.
Value of @code{0} means width will be picked from input video.
This also set number of passed histograms to keep.
Allowed range is [0, 8192].

@item display_mode, d
Set display mode.
It accepts the following values:
@table @samp
@item stack
Per color component graphs are placed below each other.

@item parade
Per color component graphs are placed side by side.

@item overlay
Presents information identical to that in the @code{parade}, except
that the graphs representing color components are superimposed directly
over one another.
@end table
Default is @code{stack}.

@item levels_mode, m
Set mode. Can be either @code{linear}, or @code{logarithmic}.
Default is @code{linear}.

@item components, c
Set what color components to display.
Default is @code{7}.

@item bgopacity, b
Set background opacity. Default is @code{0.9}.

@item envelope, e
Show envelope. Default is disabled.

@item ecolor, ec
Set envelope color. Default is @code{gold}.

@item slide
Set slide mode.

Available values for slide is:
@table @samp
@item frame
Draw new frame when right border is reached.

@item replace
Replace old columns with new ones.

@item scroll
Scroll from right to left.

@item rscroll
Scroll from left to right.

@item picture
Draw single picture.
@end table

Default is @code{replace}.
@end table

@section threshold

Apply threshold effect to video stream.

This filter needs four video streams to perform thresholding.
First stream is stream we are filtering.
Second stream is holding threshold values, third stream is holding min values,
and last, fourth stream is holding max values.

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.
@end table

For example if first stream pixel's component value is less then threshold value
of pixel component from 2nd threshold stream, third stream value will picked,
otherwise fourth stream pixel component value will be picked.

Using color source filter one can perform various types of thresholding:

@subsection Examples

@itemize
@item
Binary threshold, using gray color as threshold:
@example
ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=black -f lavfi -i color=white -lavfi threshold output.avi
@end example

@item
Inverted binary threshold, using gray color as threshold:
@example
ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=white -f lavfi -i color=black -lavfi threshold output.avi
@end example

@item
Truncate binary threshold, using gray color as threshold:
@example
ffmpeg -i 320x240.avi -f lavfi -i color=gray -i 320x240.avi -f lavfi -i color=gray -lavfi threshold output.avi
@end example

@item
Threshold to zero, using gray color as threshold:
@example
ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=white -i 320x240.avi -lavfi threshold output.avi
@end example

@item
Inverted threshold to zero, using gray color as threshold:
@example
ffmpeg -i 320x240.avi -f lavfi -i color=gray -i 320x240.avi -f lavfi -i color=white -lavfi threshold output.avi
@end example
@end itemize

@section thumbnail
Select the most representative frame in a given sequence of consecutive frames.

The filter accepts the following options:

@table @option
@item n
Set the frames batch size to analyze; in a set of @var{n} frames, the filter
will pick one of them, and then handle the next batch of @var{n} frames until
the end. Default is @code{100}.
@end table

Since the filter keeps track of the whole frames sequence, a bigger @var{n}
value will result in a higher memory usage, so a high value is not recommended.

@subsection Examples

@itemize
@item
Extract one picture each 50 frames:
@example
thumbnail=50
@end example

@item
Complete example of a thumbnail creation with @command{ffmpeg}:
@example
ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
@end example
@end itemize

@anchor{tile}
@section tile

Tile several successive frames together.

The @ref{untile} filter can do the reverse.

The filter accepts the following options:

@table @option

@item layout
Set the grid size (i.e. the number of lines and columns). For the syntax of
this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.

@item nb_frames
Set the maximum number of frames to render in the given area. It must be less
than or equal to @var{w}x@var{h}. The default value is @code{0}, meaning all
the area will be used.

@item margin
Set the outer border margin in pixels.

@item padding
Set the inner border thickness (i.e. the number of pixels between frames). For
more advanced padding options (such as having different values for the edges),
refer to the pad video filter.

@item color
Specify the color of the unused area. For the syntax of this option, check the
@ref{color syntax,,"Color" section in the ffmpeg-utils manual,ffmpeg-utils}.
The default value of @var{color} is "black".

@item overlap
Set the number of frames to overlap when tiling several successive frames together.
The value must be between @code{0} and @var{nb_frames - 1}.

@item init_padding
Set the number of frames to initially be empty before displaying first output frame.
This controls how soon will one get first output frame.
The value must be between @code{0} and @var{nb_frames - 1}.
@end table

@subsection Examples

@itemize
@item
Produce 8x8 PNG tiles of all keyframes (@option{-skip_frame nokey}) in a movie:
@example
ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
@end example
The @option{-vsync 0} is necessary to prevent @command{ffmpeg} from
duplicating each output frame to accommodate the originally detected frame
rate.

@item
Display @code{5} pictures in an area of @code{3x2} frames,
with @code{7} pixels between them, and @code{2} pixels of initial margin, using
mixed flat and named options:
@example
tile=3x2:nb_frames=5:padding=7:margin=2
@end example
@end itemize

@section tinterlace

Perform various types of temporal field interlacing.

Frames are counted starting from 1, so the first input frame is
considered odd.

The filter accepts the following options:

@table @option

@item mode
Specify the mode of the interlacing. This option can also be specified
as a value alone. See below for a list of values for this option.

Available values are:

@table @samp
@item merge, 0
Move odd frames into the upper field, even into the lower field,
generating a double height frame at half frame rate.
@example
 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111                           33333
22222                           44444
11111                           33333
22222                           44444
11111                           33333
22222                           44444
11111                           33333
22222                           44444
@end example

@item drop_even, 1
Only output odd frames, even frames are dropped, generating a frame with
unchanged height at half frame rate.

@example
 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111                           33333
11111                           33333
11111                           33333
11111                           33333
@end example

@item drop_odd, 2
Only output even frames, odd frames are dropped, generating a frame with
unchanged height at half frame rate.

@example
 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
                22222                           44444
                22222                           44444
                22222                           44444
                22222                           44444
@end example

@item pad, 3
Expand each frame to full height, but pad alternate lines with black,
generating a frame with double height at the same input frame rate.

@example
 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444
@end example


@item interleave_top, 4
Interleave the upper field from odd frames with the lower field from
even frames, generating a frame with unchanged height at half frame rate.

@example
 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-

Output:
11111                           33333
22222                           44444
11111                           33333
22222                           44444
@end example


@item interleave_bottom, 5
Interleave the lower field from odd frames with the upper field from
even frames, generating a frame with unchanged height at half frame rate.

@example
 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444

Output:
22222                           44444
11111                           33333
22222                           44444
11111                           33333
@end example


@item interlacex2, 6
Double frame rate with unchanged height. Frames are inserted each
containing the second temporal field from the previous input frame and
the first temporal field from the next input frame. This mode relies on
the top_field_first flag. Useful for interlaced video displays with no
field synchronisation.

@example
 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
 11111           22222           33333           44444
11111           22222           33333           44444
 11111           22222           33333           44444

Output:
11111   22222   22222   33333   33333   44444   44444
 11111   11111   22222   22222   33333   33333   44444
11111   22222   22222   33333   33333   44444   44444
 11111   11111   22222   22222   33333   33333   44444
@end example


@item mergex2, 7
Move odd frames into the upper field, even into the lower field,
generating a double height frame at same frame rate.

@example
 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444
@end example

@end table

Numeric values are deprecated but are accepted for backward
compatibility reasons.

Default mode is @code{merge}.

@item flags
Specify flags influencing the filter process.

Available value for @var{flags} is:

@table @option
@item low_pass_filter, vlpf
Enable linear vertical low-pass filtering in the filter.
Vertical low-pass filtering is required when creating an interlaced
destination from a progressive source which contains high-frequency
vertical detail. Filtering will reduce interlace 'twitter' and Moire
patterning.

@item complex_filter, cvlpf
Enable complex vertical low-pass filtering.
This will slightly less reduce interlace 'twitter' and Moire
patterning but better retain detail and subjective sharpness impression.

@item bypass_il
Bypass already interlaced frames, only adjust the frame rate.
@end table

Vertical low-pass filtering and bypassing already interlaced frames can only be
enabled for @option{mode} @var{interleave_top} and @var{interleave_bottom}.

@end table

@section tmedian
Pick median pixels from several successive input video frames.

The filter accepts the following options:

@table @option
@item radius
Set radius of median filter.
Default is 1. Allowed range is from 1 to 127.

@item planes
Set which planes to filter. Default value is @code{15}, by which all planes are processed.

@item percentile
Set median percentile. Default value is @code{0.5}.
Default value of @code{0.5} will pick always median values, while @code{0} will pick
minimum values, and @code{1} maximum values.
@end table

@subsection Commands

This filter supports all above options as @ref{commands}, excluding option @code{radius}.

@section tmidequalizer

Apply Temporal Midway Video Equalization effect.

Midway Video Equalization adjusts a sequence of video frames to have the same
histograms, while maintaining their dynamics as much as possible. It's
useful for e.g. matching exposures from a video frames sequence.

This filter accepts the following option:

@table @option
@item radius
Set filtering radius. Default is @code{5}. Allowed range is from 1 to 127.

@item sigma
Set filtering sigma. Default is @code{0.5}. This controls strength of filtering.
Setting this option to 0 effectively does nothing.

@item planes
Set which planes to process. Default is @code{15}, which is all available planes.
@end table

@section tmix

Mix successive video frames.

A description of the accepted options follows.

@table @option
@item frames
The number of successive frames to mix. If unspecified, it defaults to 3.

@item weights
Specify weight of each input video frame.
Each weight is separated by space. If number of weights is smaller than
number of @var{frames} last specified weight will be used for all remaining
unset weights.

@item scale
Specify scale, if it is set it will be multiplied with sum
of each weight multiplied with pixel values to give final destination
pixel value. By default @var{scale} is auto scaled to sum of weights.
@end table

@subsection Examples

@itemize
@item
Average 7 successive frames:
@example
tmix=frames=7:weights="1 1 1 1 1 1 1"
@end example

@item
Apply simple temporal convolution:
@example
tmix=frames=3:weights="-1 3 -1"
@end example

@item
Similar as above but only showing temporal differences:
@example
tmix=frames=3:weights="-1 2 -1":scale=1
@end example
@end itemize

@subsection Commands

This filter supports the following commands:
@table @option
@item weights
@item scale
Syntax is same as option with same name.
@end table

@anchor{tonemap}
@section tonemap
Tone map colors from different dynamic ranges.

This filter expects data in single precision floating point, as it needs to
operate on (and can output) out-of-range values. Another filter, such as
@ref{zscale}, is needed to convert the resulting frame to a usable format.

The tonemapping algorithms implemented only work on linear light, so input
data should be linearized beforehand (and possibly correctly tagged).

@example
ffmpeg -i INPUT -vf zscale=transfer=linear,tonemap=clip,zscale=transfer=bt709,format=yuv420p OUTPUT
@end example

@subsection Options
The filter accepts the following options.

@table @option
@item tonemap
Set the tone map algorithm to use.

Possible values are:
@table @var
@item none
Do not apply any tone map, only desaturate overbright pixels.

@item clip
Hard-clip any out-of-range values. Use it for perfect color accuracy for
in-range values, while distorting out-of-range values.

@item linear
Stretch the entire reference gamut to a linear multiple of the display.

@item gamma
Fit a logarithmic transfer between the tone curves.

@item reinhard
Preserve overall image brightness with a simple curve, using nonlinear
contrast, which results in flattening details and degrading color accuracy.

@item hable
Preserve both dark and bright details better than @var{reinhard}, at the cost
of slightly darkening everything. Use it when detail preservation is more
important than color and brightness accuracy.

@item mobius
Smoothly map out-of-range values, while retaining contrast and colors for
in-range material as much as possible. Use it when color accuracy is more
important than detail preservation.
@end table

Default is none.

@item param
Tune the tone mapping algorithm.

This affects the following algorithms:
@table @var
@item none
Ignored.

@item linear
Specifies the scale factor to use while stretching.
Default to 1.0.

@item gamma
Specifies the exponent of the function.
Default to 1.8.

@item clip
Specify an extra linear coefficient to multiply into the signal before clipping.
Default to 1.0.

@item reinhard
Specify the local contrast coefficient at the display peak.
Default to 0.5, which means that in-gamut values will be about half as bright
as when clipping.

@item hable
Ignored.

@item mobius
Specify the transition point from linear to mobius transform. Every value
below this point is guaranteed to be mapped 1:1. The higher the value, the
more accurate the result will be, at the cost of losing bright details.
Default to 0.3, which due to the steep initial slope still preserves in-range
colors fairly accurately.
@end table

@item desat
Apply desaturation for highlights that exceed this level of brightness. The
higher the parameter, the more color information will be preserved. This
setting helps prevent unnaturally blown-out colors for super-highlights, by
(smoothly) turning into white instead. This makes images feel more natural,
at the cost of reducing information about out-of-range colors.

The default of 2.0 is somewhat conservative and will mostly just apply to
skies or directly sunlit surfaces. A setting of 0.0 disables this option.

This option works only if the input frame has a supported color tag.

@item peak
Override signal/nominal/reference peak with this value. Useful when the
embedded peak information in display metadata is not reliable or when tone
mapping from a lower range to a higher range.
@end table

@section tpad

Temporarily pad video frames.

The filter accepts the following options:

@table @option
@item start
Specify number of delay frames before input video stream. Default is 0.

@item stop
Specify number of padding frames after input video stream.
Set to -1 to pad indefinitely. Default is 0.

@item start_mode
Set kind of frames added to beginning of stream.
Can be either @var{add} or @var{clone}.
With @var{add} frames of solid-color are added.
With @var{clone} frames are clones of first frame.
Default is @var{add}.

@item stop_mode
Set kind of frames added to end of stream.
Can be either @var{add} or @var{clone}.
With @var{add} frames of solid-color are added.
With @var{clone} frames are clones of last frame.
Default is @var{add}.

@item start_duration, stop_duration
Specify the duration of the start/stop delay. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.
These options override @var{start} and @var{stop}. Default is 0.

@item color
Specify the color of the padded area. For the syntax of this option,
check the @ref{color syntax,,"Color" section in the ffmpeg-utils
manual,ffmpeg-utils}.

The default value of @var{color} is "black".
@end table

@anchor{transpose}
@section transpose

Transpose rows with columns in the input video and optionally flip it.

It accepts the following parameters:

@table @option

@item dir
Specify the transposition direction.

Can assume the following values:
@table @samp
@item 0, 4, cclock_flip
Rotate by 90 degrees counterclockwise and vertically flip (default), that is:
@example
L.R     L.l
. . ->  . .
l.r     R.r
@end example

@item 1, 5, clock
Rotate by 90 degrees clockwise, that is:
@example
L.R     l.L
. . ->  . .
l.r     r.R
@end example

@item 2, 6, cclock
Rotate by 90 degrees counterclockwise, that is:
@example
L.R     R.r
. . ->  . .
l.r     L.l
@end example

@item 3, 7, clock_flip
Rotate by 90 degrees clockwise and vertically flip, that is:
@example
L.R     r.R
. . ->  . .
l.r     l.L
@end example
@end table

For values between 4-7, the transposition is only done if the input
video geometry is portrait and not landscape. These values are
deprecated, the @code{passthrough} option should be used instead.

Numerical values are deprecated, and should be dropped in favor of
symbolic constants.

@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.
@item portrait
Preserve portrait geometry (when @var{height} >= @var{width}).
@item landscape
Preserve landscape geometry (when @var{width} >= @var{height}).
@end table

Default value is @code{none}.
@end table

For example to rotate by 90 degrees clockwise and preserve portrait
layout:
@example
transpose=dir=1:passthrough=portrait
@end example

The command above can also be specified as:
@example
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.

It accepts the following parameters:
@table @option
@item start
Specify the time of the start of the kept section, i.e. the frame with the
timestamp @var{start} will be the first frame in the output.

@item end
Specify the time of the first frame that will be dropped, i.e. the frame
immediately preceding the one with the timestamp @var{end} will be the last
frame in the output.

@item start_pts
This is the same as @var{start}, except this option sets the start timestamp
in timebase units instead of seconds.

@item end_pts
This is the same as @var{end}, except this option sets the end timestamp
in timebase units instead of seconds.

@item duration
The maximum duration of the output in seconds.

@item start_frame
The number of the first frame that should be passed to the output.

@item end_frame
The number of the first frame that should be dropped.
@end table

@option{start}, @option{end}, and @option{duration} are expressed as time
duration specifications; see
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.

Note that the first two sets of the start/end options and the @option{duration}
option look at the frame timestamp, while the _frame variants simply count the
frames that pass through the filter. Also note that this filter does not modify
the timestamps. If you wish for the output timestamps to start at zero, insert a
setpts filter after the trim filter.

If multiple start or end options are set, this filter tries to be greedy and
keep all the frames that match at least one of the specified constraints. To keep
only the part that matches all the constraints at once, chain multiple trim
filters.

The defaults are such that all the input is kept. So it is possible to set e.g.
just the end values to keep everything before the specified time.

Examples:
@itemize
@item
Drop everything except the second minute of input:
@example
ffmpeg -i INPUT -vf trim=60:120
@end example

@item
Keep only the first second:
@example
ffmpeg -i INPUT -vf trim=duration=1
@end example

@end itemize

@section unpremultiply
Apply alpha unpremultiply effect to input video stream using first plane
of second stream as alpha.

Both streams must have same dimensions and same pixel format.

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.

If the format has 1 or 2 components, then luma is bit 0.
If the format has 3 or 4 components:
for RGB formats bit 0 is green, bit 1 is blue and bit 2 is red;
for YUV formats bit 0 is luma, bit 1 is chroma-U and bit 2 is chroma-V.
If present, the alpha channel is always the last bit.

@item inplace
Do not require 2nd input for processing, instead use alpha plane from input stream.
@end table

@anchor{unsharp}
@section unsharp

Sharpen or blur the input video.

It accepts the following parameters:

@table @option
@item luma_msize_x, lx
Set the luma matrix horizontal size. It must be an odd integer between
3 and 23. The default value is 5.

@item luma_msize_y, ly
Set the luma matrix vertical size. It must be an odd integer between 3
and 23. The default value is 5.

@item luma_amount, la
Set the luma effect strength. It must be a floating point number, reasonable
values lay between -1.5 and 1.5.

Negative values will blur the input video, while positive values will
sharpen it, a value of zero will disable the effect.

Default value is 1.0.

@item chroma_msize_x, cx
Set the chroma matrix horizontal size. It must be an odd integer
between 3 and 23. The default value is 5.

@item chroma_msize_y, cy
Set the chroma matrix vertical size. It must be an odd integer
between 3 and 23. The default value is 5.

@item chroma_amount, ca
Set the chroma effect strength. It must be a floating point number, reasonable
values lay between -1.5 and 1.5.

Negative values will blur the input video, while positive values will
sharpen it, a value of zero will disable the effect.

Default value is 0.0.

@end table

All parameters are optional and default to the equivalent of the
string '5:5:1.0:5:5:0.0'.

@subsection Examples

@itemize
@item
Apply strong luma sharpen effect:
@example
unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
@end example

@item
Apply a strong blur of both luma and chroma parameters:
@example
unsharp=7:7:-2:7:7:-2
@end example
@end itemize

@anchor{untile}
@section untile

Decompose a video made of tiled images into the individual images.

The frame rate of the output video is the frame rate of the input video
multiplied by the number of tiles.

This filter does the reverse of @ref{tile}.

The filter accepts the following options:

@table @option

@item layout
Set the grid size (i.e. the number of lines and columns). For the syntax of
this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
@end table

@subsection Examples

@itemize
@item
Produce a 1-second video from a still image file made of 25 frames stacked
vertically, like an analogic film reel:
@example
ffmpeg -r 1 -i image.jpg -vf untile=1x25 movie.mkv
@end example
@end itemize

@section uspp

Apply ultra slow/simple postprocessing filter that compresses and decompresses
the image at several (or - in the case of @option{quality} level @code{8} - all)
shifts and average the results.

The way this differs from the behavior of spp is that uspp actually encodes &
decodes each case with libavcodec Snow, whereas spp uses a simplified intra only 8x8
DCT similar to MJPEG.

The filter accepts the following options:

@table @option
@item quality
Set quality. This option defines the number of levels for averaging. It accepts
an integer in the range 0-8. If set to @code{0}, the filter will have no
effect. A value of @code{8} means the higher quality. For each increment of
that value the speed drops by a factor of approximately 2.  Default value is
@code{3}.

@item qp
Force a constant quantization parameter. If not set, the filter will use the QP
from the video stream (if available).
@end table

@section v360

Convert 360 videos between various formats.

The filter accepts the following options:

@table @option

@item input
@item output
Set format of the input/output video.

Available formats:

@table @samp

@item e
@item equirect
Equirectangular projection.

@item c3x2
@item c6x1
@item c1x6
Cubemap with 3x2/6x1/1x6 layout.

Format specific options:

@table @option
@item in_pad
@item out_pad
Set padding proportion for the input/output cubemap. Values in decimals.

Example values:
@table @samp
@item 0
No padding.
@item 0.01
1% of face is padding. For example, with 1920x1280 resolution face size would be 640x640 and padding would be 3 pixels from each side. (640 * 0.01 = 6 pixels)
@end table

Default value is @b{@samp{0}}.
Maximum value is @b{@samp{0.1}}.

@item fin_pad
@item fout_pad
Set fixed padding for the input/output cubemap. Values in pixels.

Default value is @b{@samp{0}}. If greater than zero it overrides other padding options.

@item in_forder
@item out_forder
Set order of faces for the input/output cubemap. Choose one direction for each position.

Designation of directions:
@table @samp
@item r
right
@item l
left
@item u
up
@item d
down
@item f
forward
@item b
back
@end table

Default value is @b{@samp{rludfb}}.

@item in_frot
@item out_frot
Set rotation of faces for the input/output cubemap. Choose one angle for each position.

Designation of angles:
@table @samp
@item 0
0 degrees clockwise
@item 1
90 degrees clockwise
@item 2
180 degrees clockwise
@item 3
270 degrees clockwise
@end table

Default value is @b{@samp{000000}}.
@end table

@item eac
Equi-Angular Cubemap.

@item flat
@item gnomonic
@item rectilinear
Regular video.

Format specific options:
@table @option
@item h_fov
@item v_fov
@item d_fov
Set output horizontal/vertical/diagonal field of view. Values in degrees.

If diagonal field of view is set it overrides horizontal and vertical field of view.

@item ih_fov
@item iv_fov
@item id_fov
Set input horizontal/vertical/diagonal field of view. Values in degrees.

If diagonal field of view is set it overrides horizontal and vertical field of view.
@end table

@item dfisheye
Dual fisheye.

Format specific options:
@table @option
@item h_fov
@item v_fov
@item d_fov
Set output horizontal/vertical/diagonal field of view. Values in degrees.

If diagonal field of view is set it overrides horizontal and vertical field of view.

@item ih_fov
@item iv_fov
@item id_fov
Set input horizontal/vertical/diagonal field of view. Values in degrees.

If diagonal field of view is set it overrides horizontal and vertical field of view.
@end table

@item barrel
@item fb
@item barrelsplit
Facebook's 360 formats.

@item sg
Stereographic format.

Format specific options:
@table @option
@item h_fov
@item v_fov
@item d_fov
Set output horizontal/vertical/diagonal field of view. Values in degrees.

If diagonal field of view is set it overrides horizontal and vertical field of view.

@item ih_fov
@item iv_fov
@item id_fov
Set input horizontal/vertical/diagonal field of view. Values in degrees.

If diagonal field of view is set it overrides horizontal and vertical field of view.
@end table

@item mercator
Mercator format.

@item ball
Ball format, gives significant distortion toward the back.

@item hammer
Hammer-Aitoff map projection format.

@item sinusoidal
Sinusoidal map projection format.

@item fisheye
Fisheye projection.

Format specific options:
@table @option
@item h_fov
@item v_fov
@item d_fov
Set output horizontal/vertical/diagonal field of view. Values in degrees.

If diagonal field of view is set it overrides horizontal and vertical field of view.

@item ih_fov
@item iv_fov
@item id_fov
Set input horizontal/vertical/diagonal field of view. Values in degrees.

If diagonal field of view is set it overrides horizontal and vertical field of view.
@end table

@item pannini
Pannini projection.

Format specific options:
@table @option
@item h_fov
Set output pannini parameter.

@item ih_fov
Set input pannini parameter.
@end table

@item cylindrical
Cylindrical projection.

Format specific options:
@table @option
@item h_fov
@item v_fov
@item d_fov
Set output horizontal/vertical/diagonal field of view. Values in degrees.

If diagonal field of view is set it overrides horizontal and vertical field of view.

@item ih_fov
@item iv_fov
@item id_fov
Set input horizontal/vertical/diagonal field of view. Values in degrees.

If diagonal field of view is set it overrides horizontal and vertical field of view.
@end table

@item perspective
Perspective projection. @i{(output only)}

Format specific options:
@table @option
@item v_fov
Set perspective parameter.
@end table

@item tetrahedron
Tetrahedron projection.

@item tsp
Truncated square pyramid projection.

@item he
@item hequirect
Half equirectangular projection.

@item equisolid
Equisolid format.

Format specific options:
@table @option
@item h_fov
@item v_fov
@item d_fov
Set output horizontal/vertical/diagonal field of view. Values in degrees.

If diagonal field of view is set it overrides horizontal and vertical field of view.

@item ih_fov
@item iv_fov
@item id_fov
Set input horizontal/vertical/diagonal field of view. Values in degrees.

If diagonal field of view is set it overrides horizontal and vertical field of view.
@end table

@item og
Orthographic format.

Format specific options:
@table @option
@item h_fov
@item v_fov
@item d_fov
Set output horizontal/vertical/diagonal field of view. Values in degrees.

If diagonal field of view is set it overrides horizontal and vertical field of view.

@item ih_fov
@item iv_fov
@item id_fov
Set input horizontal/vertical/diagonal field of view. Values in degrees.

If diagonal field of view is set it overrides horizontal and vertical field of view.
@end table

@item octahedron
Octahedron projection.
@end table

@item interp
Set interpolation method.@*
@i{Note: more complex interpolation methods require much more memory to run.}

Available methods:

@table @samp
@item near
@item nearest
Nearest neighbour.
@item line
@item linear
Bilinear interpolation.
@item lagrange9
Lagrange9 interpolation.
@item cube
@item cubic
Bicubic interpolation.
@item lanc
@item lanczos
Lanczos interpolation.
@item sp16
@item spline16
Spline16 interpolation.
@item gauss
@item gaussian
Gaussian interpolation.
@item mitchell
Mitchell interpolation.
@end table

Default value is @b{@samp{line}}.

@item w
@item h
Set the output video resolution.

Default resolution depends on formats.

@item in_stereo
@item out_stereo
Set the input/output stereo format.

@table @samp
@item 2d
2D mono
@item sbs
Side by side
@item tb
Top bottom
@end table

Default value is @b{@samp{2d}} for input and output format.

@item yaw
@item pitch
@item roll
Set rotation for the output video. Values in degrees.

@item rorder
Set rotation order for the output video. Choose one item for each position.

@table @samp
@item y, Y
yaw
@item p, P
pitch
@item r, R
roll
@end table

Default value is @b{@samp{ypr}}.

@item h_flip
@item v_flip
@item d_flip
Flip the output video horizontally(swaps left-right)/vertically(swaps up-down)/in-depth(swaps back-forward). Boolean values.

@item ih_flip
@item iv_flip
Set if input video is flipped horizontally/vertically. Boolean values.

@item in_trans
Set if input video is transposed. Boolean value, by default disabled.

@item out_trans
Set if output video needs to be transposed. Boolean value, by default disabled.

@item alpha_mask
Build mask in alpha plane for all unmapped pixels by marking them fully transparent. Boolean value, by default disabled.
@end table

@subsection Examples

@itemize
@item
Convert equirectangular video to cubemap with 3x2 layout and 1% padding using bicubic interpolation:
@example
ffmpeg -i input.mkv -vf v360=e:c3x2:cubic:out_pad=0.01 output.mkv
@end example
@item
Extract back view of Equi-Angular Cubemap:
@example
ffmpeg -i input.mkv -vf v360=eac:flat:yaw=180 output.mkv
@end example
@item
Convert transposed and horizontally flipped Equi-Angular Cubemap in side-by-side stereo format to equirectangular top-bottom stereo format:
@example
v360=eac:equirect:in_stereo=sbs:in_trans=1:ih_flip=1:out_stereo=tb
@end example
@end itemize

@subsection Commands

This filter supports subset of above options as @ref{commands}.

@section vaguedenoiser

Apply a wavelet based denoiser.

It transforms each frame from the video input into the wavelet domain,
using Cohen-Daubechies-Feauveau 9/7. Then it applies some filtering to
the obtained coefficients. It does an inverse wavelet transform after.
Due to wavelet properties, it should give a nice smoothed result, and
reduced noise, without blurring picture features.

This filter accepts the following options:

@table @option
@item threshold
The filtering strength. The higher, the more filtered the video will be.
Hard thresholding can use a higher threshold than soft thresholding
before the video looks overfiltered. Default value is 2.

@item method
The filtering method the filter will use.

It accepts the following values:
@table @samp
@item hard
All values under the threshold will be zeroed.

@item soft
All values under the threshold will be zeroed. All values above will be
reduced by the threshold.

@item garrote
Scales or nullifies coefficients - intermediary between (more) soft and
(less) hard thresholding.
@end table

Default is garrote.

@item nsteps
Number of times, the wavelet will decompose the picture. Picture can't
be decomposed beyond a particular point (typically, 8 for a 640x480
frame - as 2^9 = 512 > 480). Valid values are integers between 1 and 32. Default value is 6.

@item percent
Partial of full denoising (limited coefficients shrinking), from 0 to 100. Default value is 85.

@item planes
A list of the planes to process. By default all planes are processed.

@item type
The threshold type the filter will use.

It accepts the following values:
@table @samp
@item universal
Threshold used is same for all decompositions.

@item bayes
Threshold used depends also on each decomposition coefficients.
@end table

Default is universal.
@end table

@section vectorscope

Display 2 color component values in the two dimensional graph (which is called
a vectorscope).

This filter accepts the following options:

@table @option
@item mode, m
Set vectorscope mode.

It accepts the following values:
@table @samp
@item gray
@item tint
Gray values are displayed on graph, higher brightness means more pixels have
same component color value on location in graph. This is the default mode.

@item color
Gray values are displayed on graph. Surrounding pixels values which are not
present in video frame are drawn in gradient of 2 color components which are
set by option @code{x} and @code{y}. The 3rd color component is static.

@item color2
Actual color components values present in video frame are displayed on graph.

@item color3
Similar as color2 but higher frequency of same values @code{x} and @code{y}
on graph increases value of another color component, which is luminance by
default values of @code{x} and @code{y}.

@item color4
Actual colors present in video frame are displayed on graph. If two different
colors map to same position on graph then color with higher value of component
not present in graph is picked.

@item color5
Gray values are displayed on graph. Similar to @code{color} but with 3rd color
component picked from radial gradient.
@end table

@item x
Set which color component will be represented on X-axis. Default is @code{1}.

@item y
Set which color component will be represented on Y-axis. Default is @code{2}.

@item intensity, i
Set intensity, used by modes: gray, color, color3 and color5 for increasing brightness
of color component which represents frequency of (X, Y) location in graph.

@item envelope, e
@table @samp
@item none
No envelope, this is default.

@item instant
Instant envelope, even darkest single pixel will be clearly highlighted.

@item peak
Hold maximum and minimum values presented in graph over time. This way you
can still spot out of range values without constantly looking at vectorscope.

@item peak+instant
Peak and instant envelope combined together.
@end table

@item graticule, g
Set what kind of graticule to draw.
@table @samp
@item none
@item green
@item color
@item invert
@end table

@item opacity, o
Set graticule opacity.

@item flags, f
Set graticule flags.

@table @samp
@item white
Draw graticule for white point.

@item black
Draw graticule for black point.

@item name
Draw color points short names.
@end table

@item bgopacity, b
Set background opacity.

@item lthreshold, l
Set low threshold for color component not represented on X or Y axis.
Values lower than this value will be ignored. Default is 0.
Note this value is multiplied with actual max possible value one pixel component
can have. So for 8-bit input and low threshold value of 0.1 actual threshold
is 0.1 * 255 = 25.

@item hthreshold, h
Set high threshold for color component not represented on X or Y axis.
Values higher than this value will be ignored. Default is 1.
Note this value is multiplied with actual max possible value one pixel component
can have. So for 8-bit input and high threshold value of 0.9 actual threshold
is 0.9 * 255 = 230.

@item colorspace, c
Set what kind of colorspace to use when drawing graticule.
@table @samp
@item auto
@item 601
@item 709
@end table
Default is auto.

@item tint0, t0
@item tint1, t1
Set color tint for gray/tint vectorscope mode. By default both options are zero.
This means no tint, and output will remain gray.
@end table

@anchor{vidstabdetect}
@section vidstabdetect

Analyze video stabilization/deshaking. Perform pass 1 of 2, see
@ref{vidstabtransform} for pass 2.

This filter generates a file with relative translation and rotation
transform information about subsequent frames, which is then used by
the @ref{vidstabtransform} filter.

To enable compilation of this filter you need to configure FFmpeg with
@code{--enable-libvidstab}.

This filter accepts the following options:

@table @option
@item result
Set the path to the file used to write the transforms information.
Default value is @file{transforms.trf}.

@item shakiness
Set how shaky the video is and how quick the camera is. It accepts an
integer in the range 1-10, a value of 1 means little shakiness, a
value of 10 means strong shakiness. Default value is 5.

@item accuracy
Set the accuracy of the detection process. It must be a value in the
range 1-15. A value of 1 means low accuracy, a value of 15 means high
accuracy. Default value is 15.

@item stepsize
Set stepsize of the search process. The region around minimum is
scanned with 1 pixel resolution. Default value is 6.

@item mincontrast
Set minimum contrast. Below this value a local measurement field is
discarded. Must be a floating point value in the range 0-1. Default
value is 0.3.

@item tripod
Set reference frame number for tripod mode.

If enabled, the motion of the frames is compared to a reference frame
in the filtered stream, identified by the specified number. The idea
is to compensate all movements in a more-or-less static scene and keep
the camera view absolutely still.

If set to 0, it is disabled. The frames are counted starting from 1.

@item show
Show fields and transforms in the resulting frames. It accepts an
integer in the range 0-2. Default value is 0, which disables any
visualization.
@end table

@subsection Examples

@itemize
@item
Use default values:
@example
vidstabdetect
@end example

@item
Analyze strongly shaky movie and put the results in file
@file{mytransforms.trf}:
@example
vidstabdetect=shakiness=10:accuracy=15:result="mytransforms.trf"
@end example

@item
Visualize the result of internal transformations in the resulting
video:
@example
vidstabdetect=show=1
@end example

@item
Analyze a video with medium shakiness using @command{ffmpeg}:
@example
ffmpeg -i input -vf vidstabdetect=shakiness=5:show=1 dummy.avi
@end example
@end itemize

@anchor{vidstabtransform}
@section vidstabtransform

Video stabilization/deshaking: pass 2 of 2,
see @ref{vidstabdetect} for pass 1.

Read a file with transform information for each frame and
apply/compensate them. Together with the @ref{vidstabdetect}
filter this can be used to deshake videos. See also
@url{http://public.hronopik.de/vid.stab}. It is important to also use
the @ref{unsharp} filter, see below.

To enable compilation of this filter you need to configure FFmpeg with
@code{--enable-libvidstab}.

@subsection Options

@table @option
@item input
Set path to the file used to read the transforms. Default value is
@file{transforms.trf}.

@item smoothing
Set the number of frames (value*2 + 1) used for lowpass filtering the
camera movements. Default value is 10.

For example a number of 10 means that 21 frames are used (10 in the
past and 10 in the future) to smoothen the motion in the video. A
larger value leads to a smoother video, but limits the acceleration of
the camera (pan/tilt movements). 0 is a special case where a static
camera is simulated.

@item optalgo
Set the camera path optimization algorithm.

Accepted values are:
@table @samp
@item gauss
gaussian kernel low-pass filter on camera motion (default)
@item avg
averaging on transformations
@end table

@item maxshift
Set maximal number of pixels to translate frames. Default value is -1,
meaning no limit.

@item maxangle
Set maximal angle in radians (degree*PI/180) to rotate frames. Default
value is -1, meaning no limit.

@item crop
Specify how to deal with borders that may be visible due to movement
compensation.

Available values are:
@table @samp
@item keep
keep image information from previous frame (default)
@item black
fill the border black
@end table

@item invert
Invert transforms if set to 1. Default value is 0.

@item relative
Consider transforms as relative to previous frame if set to 1,
absolute if set to 0. Default value is 0.

@item zoom
Set percentage to zoom. A positive value will result in a zoom-in
effect, a negative value in a zoom-out effect. Default value is 0 (no
zoom).

@item optzoom
Set optimal zooming to avoid borders.

Accepted values are:
@table @samp
@item 0
disabled
@item 1
optimal static zoom value is determined (only very strong movements
will lead to visible borders) (default)
@item 2
optimal adaptive zoom value is determined (no borders will be
visible), see @option{zoomspeed}
@end table

Note that the value given at zoom is added to the one calculated here.

@item zoomspeed
Set percent to zoom maximally each frame (enabled when
@option{optzoom} is set to 2). Range is from 0 to 5, default value is
0.25.

@item interpol
Specify type of interpolation.

Available values are:
@table @samp
@item no
no interpolation
@item linear
linear only horizontal
@item bilinear
linear in both directions (default)
@item bicubic
cubic in both directions (slow)
@end table

@item tripod
Enable virtual tripod mode if set to 1, which is equivalent to
@code{relative=0:smoothing=0}. Default value is 0.

Use also @code{tripod} option of @ref{vidstabdetect}.

@item debug
Increase log verbosity if set to 1. Also the detected global motions
are written to the temporary file @file{global_motions.trf}. Default
value is 0.
@end table

@subsection Examples

@itemize
@item
Use @command{ffmpeg} for a typical stabilization with default values:
@example
ffmpeg -i inp.mpeg -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 inp_stabilized.mpeg
@end example

Note the use of the @ref{unsharp} filter which is always recommended.

@item
Zoom in a bit more and load transform data from a given file:
@example
vidstabtransform=zoom=5:input="mytransforms.trf"
@end example

@item
Smoothen the video even more:
@example
vidstabtransform=smoothing=30
@end example
@end itemize

@section vflip

Flip the input video vertically.

For example, to vertically flip a video with @command{ffmpeg}:
@example
ffmpeg -i in.avi -vf "vflip" out.avi
@end example

@section vfrdet

Detect variable frame rate video.

This filter tries to detect if the input is variable or constant frame rate.

At end it will output number of frames detected as having variable delta pts,
and ones with constant delta pts.
If there was frames with variable delta, than it will also show min, max and
average delta encountered.

@section vibrance

Boost or alter saturation.

The filter accepts the following options:
@table @option
@item intensity
Set strength of boost if positive value or strength of alter if negative value.
Default is 0. Allowed range is from -2 to 2.

@item rbal
Set the red balance. Default is 1. Allowed range is from -10 to 10.

@item gbal
Set the green balance. Default is 1. Allowed range is from -10 to 10.

@item bbal
Set the blue balance. Default is 1. Allowed range is from -10 to 10.

@item rlum
Set the red luma coefficient.

@item glum
Set the green luma coefficient.

@item blum
Set the blue luma coefficient.

@item alternate
If @code{intensity} is negative and this is set to 1, colors will change,
otherwise colors will be less saturated, more towards gray.
@end table

@subsection Commands

This filter supports the all above options as @ref{commands}.

@section vif

Obtain the average VIF (Visual Information Fidelity) between two input videos.

This filter takes two input videos.

Both input videos must have the same resolution and pixel format for
this filter to work correctly. Also it assumes that both inputs
have the same number of frames, which are compared one by one.

The obtained average VIF score is printed through the logging system.

The filter stores the calculated VIF score of each frame.

In the below example the input file @file{main.mpg} being processed is compared
with the reference file @file{ref.mpg}.

@example
ffmpeg -i main.mpg -i ref.mpg -lavfi vif -f null -
@end example

@anchor{vignette}
@section vignette

Make or reverse a natural vignetting effect.

The filter accepts the following options:

@table @option
@item angle, a
Set lens angle expression as a number of radians.

The value is clipped in the @code{[0,PI/2]} range.

Default value: @code{"PI/5"}

@item x0
@item y0
Set center coordinates expressions. Respectively @code{"w/2"} and @code{"h/2"}
by default.

@item mode
Set forward/backward mode.

Available modes are:
@table @samp
@item forward
The larger the distance from the central point, the darker the image becomes.

@item backward
The larger the distance from the central point, the brighter the image becomes.
This can be used to reverse a vignette effect, though there is no automatic
detection to extract the lens @option{angle} and other settings (yet). It can
also be used to create a burning effect.
@end table

Default value is @samp{forward}.

@item eval
Set evaluation mode for the expressions (@option{angle}, @option{x0}, @option{y0}).

It accepts the following values:
@table @samp
@item init
Evaluate expressions only once during the filter initialization.

@item frame
Evaluate expressions for each incoming frame. This is way slower than the
@samp{init} mode since it requires all the scalers to be re-computed, but it
allows advanced dynamic expressions.
@end table

Default value is @samp{init}.

@item dither
Set dithering to reduce the circular banding effects. Default is @code{1}
(enabled).

@item aspect
Set vignette aspect. This setting allows one to adjust the shape of the vignette.
Setting this value to the SAR of the input will make a rectangular vignetting
following the dimensions of the video.

Default is @code{1/1}.
@end table

@subsection Expressions

The @option{alpha}, @option{x0} and @option{y0} expressions can contain the
following parameters.

@table @option
@item w
@item h
input width and height

@item n
the number of input frame, starting from 0

@item pts
the PTS (Presentation TimeStamp) time of the filtered video frame, expressed in
@var{TB} units, NAN if undefined

@item r
frame rate of the input video, NAN if the input frame rate is unknown

@item t
the PTS (Presentation TimeStamp) of the filtered video frame,
expressed in seconds, NAN if undefined

@item tb
time base of the input video
@end table


@subsection Examples

@itemize
@item
Apply simple strong vignetting effect:
@example
vignette=PI/4
@end example

@item
Make a flickering vignetting:
@example
vignette='PI/4+random(1)*PI/50':eval=frame
@end example

@end itemize

@section vmafmotion

Obtain the average VMAF motion score of a video.
It is one of the component metrics of VMAF.

The obtained average motion score is printed through the logging system.

The filter accepts the following options:

@table @option
@item stats_file
If specified, the filter will use the named file to save the motion score of
each frame with respect to the previous frame.
When filename equals "-" the data is sent to standard output.
@end table

Example:
@example
ffmpeg -i ref.mpg -vf vmafmotion -f null -
@end example

@section vstack
Stack input videos vertically.

All streams must be of same pixel format and of same width.

Note that this filter is faster than using @ref{overlay} and @ref{pad} filter
to create same output.

The filter accepts the following options:

@table @option
@item inputs
Set number of input streams. Default is 2.

@item shortest
If set to 1, force the output to terminate when the shortest input
terminates. Default value is 0.
@end table

@section w3fdif

Deinterlace the input video ("w3fdif" stands for "Weston 3 Field
Deinterlacing Filter").

Based on the process described by Martin Weston for BBC R&D, and
implemented based on the de-interlace algorithm written by Jim
Easterbrook for BBC R&D, the Weston 3 field deinterlacing filter
uses filter coefficients calculated by BBC R&D.

This filter uses field-dominance information in frame to decide which
of each pair of fields to place first in the output.
If it gets it wrong use @ref{setfield} filter before @code{w3fdif} filter.

There are two sets of filter coefficients, so called "simple"
and "complex". Which set of filter coefficients is used can
be set by passing an optional parameter:

@table @option
@item filter
Set the interlacing filter coefficients. Accepts one of the following values:

@table @samp
@item simple
Simple filter coefficient set.
@item complex
More-complex filter coefficient set.
@end table
Default value is @samp{complex}.

@item mode
The interlacing mode to adopt. It accepts one of the following values:

@table @option
@item frame
Output one frame for each frame.
@item field
Output one frame for each field.
@end table

The default value is @code{field}.

@item parity
The picture field parity assumed for the input interlaced video. It accepts one
of the following values:

@table @option
@item tff
Assume the top field is first.
@item bff
Assume the bottom field is first.
@item 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 @samp
@item all
Deinterlace all frames,
@item interlaced
Only deinterlace frames marked as interlaced.
@end table

Default value is @samp{all}.
@end table

@subsection Commands
This filter supports same @ref{commands} as options.

@section waveform
Video waveform monitor.

The waveform monitor plots color component intensity. By default luminance
only. Each column of the waveform corresponds to a column of pixels in the
source video.

It accepts the following options:

@table @option
@item mode, m
Can be either @code{row}, or @code{column}. Default is @code{column}.
In row mode, the graph on the left side represents color component value 0 and
the right side represents value = 255. In column mode, the top side represents
color component value = 0 and bottom side represents value = 255.

@item intensity, i
Set intensity. Smaller values are useful to find out how many values of the same
luminance are distributed across input rows/columns.
Default value is @code{0.04}. Allowed range is [0, 1].

@item mirror, r
Set mirroring mode. @code{0} means unmirrored, @code{1} means mirrored.
In mirrored mode, higher values will be represented on the left
side for @code{row} mode and at the top for @code{column} mode. Default is
@code{1} (mirrored).

@item display, d
Set display mode.
It accepts the following values:
@table @samp
@item overlay
Presents information identical to that in the @code{parade}, except
that the graphs representing color components are superimposed directly
over one another.

This display mode makes it easier to spot relative differences or similarities
in overlapping areas of the color components that are supposed to be identical,
such as neutral whites, grays, or blacks.

@item stack
Display separate graph for the color components side by side in
@code{row} mode or one below the other in @code{column} mode.

@item parade
Display separate graph for the color components side by side in
@code{column} mode or one below the other in @code{row} mode.

Using this display mode makes it easy to spot color casts in the highlights
and shadows of an image, by comparing the contours of the top and the bottom
graphs of each waveform. Since whites, grays, and blacks are characterized
by exactly equal amounts of red, green, and blue, neutral areas of the picture
should display three waveforms of roughly equal width/height. If not, the
correction is easy to perform by making level adjustments the three waveforms.
@end table
Default is @code{stack}.

@item components, c
Set which color components to display. Default is 1, which means only luminance
or red color component if input is in RGB colorspace. If is set for example to
7 it will display all 3 (if) available color components.

@item envelope, e
@table @samp
@item none
No envelope, this is default.

@item instant
Instant envelope, minimum and maximum values presented in graph will be easily
visible even with small @code{step} value.

@item peak
Hold minimum and maximum values presented in graph across time. This way you
can still spot out of range values without constantly looking at waveforms.

@item peak+instant
Peak and instant envelope combined together.
@end table

@item filter, f
@table @samp
@item lowpass
No filtering, this is default.

@item flat
Luma and chroma combined together.

@item aflat
Similar as above, but shows difference between blue and red chroma.

@item xflat
Similar as above, but use different colors.

@item yflat
Similar as above, but again with different colors.

@item chroma
Displays only chroma.

@item color
Displays actual color value on waveform.

@item acolor
Similar as above, but with luma showing frequency of chroma values.
@end table

@item graticule, g
Set which graticule to display.

@table @samp
@item none
Do not display graticule.

@item green
Display green graticule showing legal broadcast ranges.

@item orange
Display orange graticule showing legal broadcast ranges.

@item invert
Display invert graticule showing legal broadcast ranges.
@end table

@item opacity, o
Set graticule opacity.

@item flags, fl
Set graticule flags.

@table @samp
@item numbers
Draw numbers above lines. By default enabled.

@item dots
Draw dots instead of lines.
@end table

@item scale, s
Set scale used for displaying graticule.

@table @samp
@item digital
@item millivolts
@item ire
@end table
Default is digital.

@item bgopacity, b
Set background opacity.

@item tint0, t0
@item tint1, t1
Set tint for output.
Only used with lowpass filter and when display is not overlay and input
pixel formats are not RGB.
@end table

@section weave, doubleweave

The @code{weave} takes a field-based video input and join
each two sequential fields into single frame, producing a new double
height clip with half the frame rate and half the frame count.

The @code{doubleweave} works same as @code{weave} but without
halving frame rate and frame count.

It accepts the following option:

@table @option
@item first_field
Set first field. Available values are:

@table @samp
@item top, t
Set the frame as top-field-first.

@item bottom, b
Set the frame as bottom-field-first.
@end table
@end table

@subsection Examples

@itemize
@item
Interlace video using @ref{select} and @ref{separatefields} filter:
@example
separatefields,select=eq(mod(n,4),0)+eq(mod(n,4),3),weave
@end example
@end itemize

@section xbr
Apply the xBR high-quality magnification filter which is designed for pixel
art. It follows a set of edge-detection rules, see
@url{https://forums.libretro.com/t/xbr-algorithm-tutorial/123}.

It accepts the following option:

@table @option
@item n
Set the scaling dimension: @code{2} for @code{2xBR}, @code{3} for
@code{3xBR} and @code{4} for @code{4xBR}.
Default is @code{3}.
@end table

@section xfade

Apply cross fade from one input video stream to another input video stream.
The cross fade is applied for specified duration.

The filter accepts the following options:

@table @option
@item transition
Set one of available transition effects:

@table @samp
@item custom
@item fade
@item wipeleft
@item wiperight
@item wipeup
@item wipedown
@item slideleft
@item slideright
@item slideup
@item slidedown
@item circlecrop
@item rectcrop
@item distance
@item fadeblack
@item fadewhite
@item radial
@item smoothleft
@item smoothright
@item smoothup
@item smoothdown
@item circleopen
@item circleclose
@item vertopen
@item vertclose
@item horzopen
@item horzclose
@item dissolve
@item pixelize
@item diagtl
@item diagtr
@item diagbl
@item diagbr
@item hlslice
@item hrslice
@item vuslice
@item vdslice
@item hblur
@item fadegrays
@item wipetl
@item wipetr
@item wipebl
@item wipebr
@item squeezeh
@item squeezev
@end table
Default transition effect is fade.

@item duration
Set cross fade duration in seconds.
Default duration is 1 second.

@item offset
Set cross fade start relative to first input stream in seconds.
Default offset is 0.

@item expr
Set expression for custom transition effect.

The expressions can use the following variables and functions:

@table @option
@item X
@item Y
The coordinates of the current sample.

@item W
@item H
The width and height of the image.

@item P
Progress of transition effect.

@item PLANE
Currently processed plane.

@item A
Return value of first input at current location and plane.

@item B
Return value of second input at current location and plane.

@item a0(x, y)
@item a1(x, y)
@item a2(x, y)
@item a3(x, y)
Return the value of the pixel at location (@var{x},@var{y}) of the
first/second/third/fourth component of first input.

@item b0(x, y)
@item b1(x, y)
@item b2(x, y)
@item b3(x, y)
Return the value of the pixel at location (@var{x},@var{y}) of the
first/second/third/fourth component of second input.
@end table
@end table

@subsection Examples

@itemize
@item
Cross fade from one input video to another input video, with fade transition and duration of transition
of 2 seconds starting at offset of 5 seconds:
@example
ffmpeg -i first.mp4 -i second.mp4 -filter_complex xfade=transition=fade:duration=2:offset=5 output.mp4
@end example
@end itemize

@section xmedian
Pick median pixels from several input videos.

The filter accepts the following options:

@table @option
@item inputs
Set number of inputs.
Default is 3. Allowed range is from 3 to 255.
If number of inputs is even number, than result will be mean value between two median values.

@item planes
Set which planes to filter. Default value is @code{15}, by which all planes are processed.

@item percentile
Set median percentile. Default value is @code{0.5}.
Default value of @code{0.5} will pick always median values, while @code{0} will pick
minimum values, and @code{1} maximum values.
@end table

@subsection Commands

This filter supports all above options as @ref{commands}, excluding option @code{inputs}.

@section xstack
Stack video inputs into custom layout.

All streams must be of same pixel format.

The filter accepts the following options:

@table @option
@item inputs
Set number of input streams. Default is 2.

@item layout
Specify layout of inputs.
This option requires the desired layout configuration to be explicitly set by the user.
This sets position of each video input in output. Each input
is separated by '|'.
The first number represents the column, and the second number represents the row.
Numbers start at 0 and are separated by '_'. Optionally one can use wX and hX,
where X is video input from which to take width or height.
Multiple values can be used when separated by '+'. In such
case values are summed together.

Note that if inputs are of different sizes gaps may appear, as not all of
the output video frame will be filled. Similarly, videos can overlap each
other if their position doesn't leave enough space for the full frame of
adjoining videos.

For 2 inputs, a default layout of @code{0_0|w0_0} is set. In all other cases,
a layout must be set by the user.

@item shortest
If set to 1, force the output to terminate when the shortest input
terminates. Default value is 0.

@item fill
If set to valid color, all unused pixels will be filled with that color.
By default fill is set to none, so it is disabled.
@end table

@subsection Examples

@itemize
@item
Display 4 inputs into 2x2 grid.

Layout:
@example
input1(0, 0)  | input3(w0, 0)
input2(0, h0) | input4(w0, h0)
@end example

@example
xstack=inputs=4:layout=0_0|0_h0|w0_0|w0_h0
@end example

Note that if inputs are of different sizes, gaps or overlaps may occur.

@item
Display 4 inputs into 1x4 grid.

Layout:
@example
input1(0, 0)
input2(0, h0)
input3(0, h0+h1)
input4(0, h0+h1+h2)
@end example

@example
xstack=inputs=4:layout=0_0|0_h0|0_h0+h1|0_h0+h1+h2
@end example

Note that if inputs are of different widths, unused space will appear.

@item
Display 9 inputs into 3x3 grid.

Layout:
@example
input1(0, 0)       | input4(w0, 0)      | input7(w0+w3, 0)
input2(0, h0)      | input5(w0, h0)     | input8(w0+w3, h0)
input3(0, h0+h1)   | input6(w0, h0+h1)  | input9(w0+w3, h0+h1)
@end example

@example
xstack=inputs=9:layout=0_0|0_h0|0_h0+h1|w0_0|w0_h0|w0_h0+h1|w0+w3_0|w0+w3_h0|w0+w3_h0+h1
@end example

Note that if inputs are of different sizes, gaps or overlaps may occur.

@item
Display 16 inputs into 4x4 grid.

Layout:
@example
input1(0, 0)       | input5(w0, 0)       | input9 (w0+w4, 0)       | input13(w0+w4+w8, 0)
input2(0, h0)      | input6(w0, h0)      | input10(w0+w4, h0)      | input14(w0+w4+w8, h0)
input3(0, h0+h1)   | input7(w0, h0+h1)   | input11(w0+w4, h0+h1)   | input15(w0+w4+w8, h0+h1)
input4(0, h0+h1+h2)| input8(w0, h0+h1+h2)| input12(w0+w4, h0+h1+h2)| input16(w0+w4+w8, h0+h1+h2)
@end example

@example
xstack=inputs=16:layout=0_0|0_h0|0_h0+h1|0_h0+h1+h2|w0_0|w0_h0|w0_h0+h1|w0_h0+h1+h2|w0+w4_0|
w0+w4_h0|w0+w4_h0+h1|w0+w4_h0+h1+h2|w0+w4+w8_0|w0+w4+w8_h0|w0+w4+w8_h0+h1|w0+w4+w8_h0+h1+h2
@end example

Note that if inputs are of different sizes, gaps or overlaps may occur.

@end itemize

@anchor{yadif}
@section yadif

Deinterlace the input video ("yadif" means "yet another deinterlacing
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
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 yaepblur

Apply blur filter while preserving edges ("yaepblur" means "yet another edge preserving blur filter").
The algorithm is described in
"J. S. Lee, Digital image enhancement and noise filtering by use of local statistics, IEEE Trans. Pattern Anal. Mach. Intell. PAMI-2, 1980."

It accepts the following parameters:

@table @option
@item radius, r
Set the window radius. Default value is 3.

@item planes, p
Set which planes to filter. Default is only the first plane.

@item sigma, s
Set blur strength. Default value is 128.
@end table

@subsection Commands
This filter supports same @ref{commands} as options.

@section zoompan

Apply Zoom & Pan effect.

This filter accepts the following options:

@table @option
@item zoom, z
Set the zoom expression. Range is 1-10. Default is 1.

@item x
@item y
Set the x and y expression. Default is 0.

@item d
Set the duration expression in number of frames.
This sets for how many number of frames effect will last for
single input image. Default is 90.

@item s
Set the output image size, default is 'hd720'.

@item fps
Set the output frame rate, default is '25'.
@end table

Each expression can contain the following constants:

@table @option
@item in_w, iw
Input width.

@item in_h, ih
Input height.

@item out_w, ow
Output width.

@item out_h, oh
Output height.

@item in
Input frame count.

@item on
Output frame count.

@item in_time, it
The input timestamp expressed in seconds. It's NAN if the input timestamp is unknown.

@item out_time, time, ot
The output timestamp expressed in seconds.

@item x
@item y
Last calculated 'x' and 'y' position from 'x' and 'y' expression
for current input frame.

@item px
@item py
'x' and 'y' of last output frame of previous input frame or 0 when there was
not yet such frame (first input frame).

@item zoom
Last calculated zoom from 'z' expression for current input frame.

@item pzoom
Last calculated zoom of last output frame of previous input frame.

@item duration
Number of output frames for current input frame. Calculated from 'd' expression
for each input frame.

@item pduration
number of output frames created for previous input frame

@item a
Rational number: input width / input height

@item sar
sample aspect ratio

@item dar
display aspect ratio

@end table

@subsection Examples

@itemize
@item
Zoom in up to 1.5x and pan at same time to some spot near center of picture:
@example
zoompan=z='min(zoom+0.0015,1.5)':d=700:x='if(gte(zoom,1.5),x,x+1/a)':y='if(gte(zoom,1.5),y,y+1)':s=640x360
@end example

@item
Zoom in up to 1.5x and pan always at center of picture:
@example
zoompan=z='min(zoom+0.0015,1.5)':d=700:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
@end example

@item
Same as above but without pausing:
@example
zoompan=z='min(max(zoom,pzoom)+0.0015,1.5)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
@end example

@item
Zoom in 2x into center of picture only for the first second of the input video:
@example
zoompan=z='if(between(in_time,0,1),2,1)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
@end example

@end itemize

@anchor{zscale}
@section zscale
Scale (resize) the input video, using the z.lib library:
@url{https://github.com/sekrit-twc/zimg}. To enable compilation of this
filter, you need to configure FFmpeg with @code{--enable-libzimg}.

The zscale filter forces the output display aspect ratio to be the same
as the input, by changing the output sample aspect ratio.

If the input image format is different from the format requested by
the next filter, the zscale filter will convert the input to the
requested format.

@subsection Options
The filter accepts the following options.

@table @option
@item width, w
@item height, h
Set the output video dimension expression. Default value is the input
dimension.

If the @var{width} or @var{w} value is 0, the input width is used for
the output. If the @var{height} or @var{h} value is 0, the input height
is used for the output.

If one and only one of the values is -n with n >= 1, the zscale filter
will use a value that maintains the aspect ratio of the input image,
calculated from the other specified dimension. After that it will,
however, make sure that the calculated dimension is divisible by n and
adjust the value if necessary.

If both values are -n with n >= 1, the behavior will be identical to
both values being set to 0 as previously detailed.

See below for the list of accepted constants for use in the dimension
expression.

@item size, s
Set the video size. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.

@item dither, d
Set the dither type.

Possible values are:
@table @var
@item none
@item ordered
@item random
@item error_diffusion
@end table

Default is none.

@item filter, f
Set the resize filter type.

Possible values are:
@table @var
@item point
@item bilinear
@item bicubic
@item spline16
@item spline36
@item lanczos
@end table

Default is bilinear.

@item range, r
Set the color range.

Possible values are:
@table @var
@item input
@item limited
@item full
@end table

Default is same as input.

@item primaries, p
Set the color primaries.

Possible values are:
@table @var
@item input
@item 709
@item unspecified
@item 170m
@item 240m
@item 2020
@end table

Default is same as input.

@item transfer, t
Set the transfer characteristics.

Possible values are:
@table @var
@item input
@item 709
@item unspecified
@item 601
@item linear
@item 2020_10
@item 2020_12
@item smpte2084
@item iec61966-2-1
@item arib-std-b67
@end table

Default is same as input.

@item matrix, m
Set the colorspace matrix.

Possible value are:
@table @var
@item input
@item 709
@item unspecified
@item 470bg
@item 170m
@item 2020_ncl
@item 2020_cl
@end table

Default is same as input.

@item rangein, rin
Set the input color range.

Possible values are:
@table @var
@item input
@item limited
@item full
@end table

Default is same as input.

@item primariesin, pin
Set the input color primaries.

Possible values are:
@table @var
@item input
@item 709
@item unspecified
@item 170m
@item 240m
@item 2020
@end table

Default is same as input.

@item transferin, tin
Set the input transfer characteristics.

Possible values are:
@table @var
@item input
@item 709
@item unspecified
@item 601
@item linear
@item 2020_10
@item 2020_12
@end table

Default is same as input.

@item matrixin, min
Set the input colorspace matrix.

Possible value are:
@table @var
@item input
@item 709
@item unspecified
@item 470bg
@item 170m
@item 2020_ncl
@item 2020_cl
@end table

@item chromal, c
Set the output chroma location.

Possible values are:
@table @var
@item input
@item left
@item center
@item topleft
@item top
@item bottomleft
@item bottom
@end table

@item chromalin, cin
Set the input chroma location.

Possible values are:
@table @var
@item input
@item left
@item center
@item topleft
@item top
@item bottomleft
@item bottom
@end table

@item npl
Set the nominal peak luminance.

@item param_a
Parameter A for scaling filters. Parameter "b" for bicubic, and the number of
filter taps for lanczos.

@item param_b
Parameter B for scaling filters. Parameter "c" for bicubic.
@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 hsub
@item vsub
horizontal and vertical input chroma subsample values. For example for the
pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1.

@item ohsub
@item ovsub
horizontal and vertical output chroma subsample values. For example for the
pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1.
@end table

@subsection Commands

This filter supports the following commands:
@table @option
@item width, w
@item height, h
Set the output video dimension expression.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.
@end table

@c man end VIDEO FILTERS

@chapter OpenCL Video Filters
@c man begin OPENCL VIDEO FILTERS

Below is a description of the currently available OpenCL video filters.

To enable compilation of these filters you need to configure FFmpeg with
@code{--enable-opencl}.

Running OpenCL filters requires you to initialize a hardware device and to pass that device to all filters in any filter graph.
@table @option

@item -init_hw_device opencl[=@var{name}][:@var{device}[,@var{key=value}...]]
Initialise a new hardware device of type @var{opencl} called @var{name}, using the
given device parameters.

@item -filter_hw_device @var{name}
Pass the hardware device called @var{name} to all filters in any filter graph.

@end table

For more detailed information see @url{https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options}

@itemize
@item
Example of choosing the first device on the second platform and running avgblur_opencl filter with default parameters on it.
@example
-init_hw_device opencl=gpu:1.0 -filter_hw_device gpu -i INPUT -vf "hwupload, avgblur_opencl, hwdownload" OUTPUT
@end example
@end itemize

Since OpenCL filters are not able to access frame data in normal memory, all frame data needs to be uploaded(@ref{hwupload}) to hardware surfaces connected to the appropriate device before being used and then downloaded(@ref{hwdownload}) back to normal memory. Note that @ref{hwupload} will upload to a surface with the same layout as the software frame, so it may be necessary to add a @ref{format} filter immediately before to get the input into the right format and @ref{hwdownload} does not support all formats on the output - it may be necessary to insert an additional @ref{format} filter immediately following in the graph to get the output in a supported format.

@section avgblur_opencl

Apply average blur filter.

The filter accepts the following options:

@table @option
@item sizeX
Set horizontal radius size.
Range is @code{[1, 1024]} and default value is @code{1}.

@item planes
Set which planes to filter. Default value is @code{0xf}, by which all planes are processed.

@item sizeY
Set vertical radius size. Range is @code{[1, 1024]} and default value is @code{0}. If zero, @code{sizeX} value will be used.
@end table

@subsection Example

@itemize
@item
Apply average blur filter with horizontal and vertical size of 3, setting each pixel of the output to the average value of the 7x7 region centered on it in the input. For pixels on the edges of the image, the region does not extend beyond the image boundaries, and so out-of-range coordinates are not used in the calculations.
@example
-i INPUT -vf "hwupload, avgblur_opencl=3, hwdownload" OUTPUT
@end example
@end itemize

@section boxblur_opencl

Apply a boxblur algorithm to the input video.

It accepts the following parameters:

@table @option

@item luma_radius, lr
@item luma_power, lp
@item chroma_radius, cr
@item chroma_power, cp
@item alpha_radius, ar
@item alpha_power, ap

@end table

A description of the accepted options follows.

@table @option
@item luma_radius, lr
@item chroma_radius, cr
@item alpha_radius, ar
Set an expression for the box radius in pixels used for blurring the
corresponding input plane.

The radius value must be a non-negative number, and must not be
greater than the value of the expression @code{min(w,h)/2} for the
luma and alpha planes, and of @code{min(cw,ch)/2} for the chroma
planes.

Default value for @option{luma_radius} is "2". If not specified,
@option{chroma_radius} and @option{alpha_radius} default to the
corresponding value set for @option{luma_radius}.

The expressions can contain the following constants:
@table @option
@item w
@item h
The input width and height in pixels.

@item cw
@item ch
The input chroma image width and height in pixels.

@item hsub
@item vsub
The horizontal and vertical chroma subsample values. For example, for the
pixel format "yuv422p", @var{hsub} is 2 and @var{vsub} is 1.
@end table

@item luma_power, lp
@item chroma_power, cp
@item alpha_power, ap
Specify how many times the boxblur filter is applied to the
corresponding plane.

Default value for @option{luma_power} is 2. If not specified,
@option{chroma_power} and @option{alpha_power} default to the
corresponding value set for @option{luma_power}.

A value of 0 will disable the effect.
@end table

@subsection Examples

Apply boxblur filter, setting each pixel of the output to the average value of box-radiuses @var{luma_radius}, @var{chroma_radius}, @var{alpha_radius} for each plane respectively. The filter will apply @var{luma_power}, @var{chroma_power}, @var{alpha_power} times onto the corresponding plane. For pixels on the edges of the image, the radius does not extend beyond the image boundaries, and so out-of-range coordinates are not used in the calculations.

@itemize
@item
Apply a boxblur filter with the luma, chroma, and alpha radius
set to 2 and luma, chroma, and alpha power set to 3. The filter will run 3 times with box-radius set to 2 for every plane of the image.
@example
-i INPUT -vf "hwupload, boxblur_opencl=luma_radius=2:luma_power=3, hwdownload" OUTPUT
-i INPUT -vf "hwupload, boxblur_opencl=2:3, hwdownload" OUTPUT
@end example

@item
Apply a boxblur filter with luma radius set to 2, luma_power to 1, chroma_radius to 4, chroma_power to 5, alpha_radius to 3 and alpha_power to 7.

For the luma plane, a 2x2 box radius will be run once.

For the chroma plane, a 4x4 box radius will be run 5 times.

For the alpha plane, a 3x3 box radius will be run 7 times.
@example
-i INPUT -vf "hwupload, boxblur_opencl=2:1:4:5:3:7, hwdownload" OUTPUT
@end example
@end itemize

@section colorkey_opencl
RGB colorspace color keying.

The filter accepts the following options:

@table @option
@item color
The color which will be replaced with transparency.

@item similarity
Similarity percentage with the key color.

0.01 matches only the exact key color, while 1.0 matches everything.

@item blend
Blend percentage.

0.0 makes pixels either fully transparent, or not transparent at all.

Higher values result in semi-transparent pixels, with a higher transparency
the more similar the pixels color is to the key color.
@end table

@subsection Examples

@itemize
@item
Make every semi-green pixel in the input transparent with some slight blending:
@example
-i INPUT -vf "hwupload, colorkey_opencl=green:0.3:0.1, hwdownload" OUTPUT
@end example
@end itemize

@section convolution_opencl

Apply convolution of 3x3, 5x5, 7x7 matrix.

The filter accepts the following options:

@table @option
@item 0m
@item 1m
@item 2m
@item 3m
Set matrix for each plane.
Matrix is sequence of 9, 25 or 49 signed numbers.
Default value for each plane is @code{0 0 0 0 1 0 0 0 0}.

@item 0rdiv
@item 1rdiv
@item 2rdiv
@item 3rdiv
Set multiplier for calculated value for each plane.
If unset or 0, it will be sum of all matrix elements.
The option value must be a float number greater or equal to @code{0.0}. Default value is @code{1.0}.

@item 0bias
@item 1bias
@item 2bias
@item 3bias
Set bias for each plane. This value is added to the result of the multiplication.
Useful for making the overall image brighter or darker.
The option value must be a float number greater or equal to @code{0.0}. Default value is @code{0.0}.

@end table

@subsection Examples

@itemize
@item
Apply sharpen:
@example
-i INPUT -vf "hwupload, convolution_opencl=0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0, hwdownload" OUTPUT
@end example

@item
Apply blur:
@example
-i INPUT -vf "hwupload, convolution_opencl=1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1/9:1/9:1/9:1/9, hwdownload" OUTPUT
@end example

@item
Apply edge enhance:
@example
-i INPUT -vf "hwupload, convolution_opencl=0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:5:1:1:1:0:128:128:128, hwdownload" OUTPUT
@end example

@item
Apply edge detect:
@example
-i INPUT -vf "hwupload, convolution_opencl=0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:5:5:5:1:0:128:128:128, hwdownload" OUTPUT
@end example

@item
Apply laplacian edge detector which includes diagonals:
@example
-i INPUT -vf "hwupload, convolution_opencl=1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:5:5:5:1:0:128:128:0, hwdownload" OUTPUT
@end example

@item
Apply emboss:
@example
-i INPUT -vf "hwupload, convolution_opencl=-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2, hwdownload" OUTPUT
@end example
@end itemize

@section erosion_opencl

Apply erosion effect to the video.

This filter replaces the pixel by the local(3x3) minimum.

It accepts the following options:

@table @option
@item threshold0
@item threshold1
@item threshold2
@item threshold3
Limit the maximum change for each plane. Range is @code{[0, 65535]} and default value is @code{65535}.
If @code{0}, plane will remain unchanged.

@item coordinates
Flag which specifies the pixel to refer to.
Range is @code{[0, 255]} and default value is @code{255}, i.e. all eight pixels are used.

Flags to local 3x3 coordinates region centered on @code{x}:

    1 2 3

    4 x 5

    6 7 8
@end table

@subsection Example

@itemize
@item
Apply erosion filter with threshold0 set to 30, threshold1 set 40, threshold2 set to 50 and coordinates set to 231, setting each pixel of the output to the local minimum between pixels: 1, 2, 3, 6, 7, 8 of the 3x3 region centered on it in the input. If the difference between input pixel and local minimum is more then threshold of the corresponding plane, output pixel will be set to input pixel - threshold of corresponding plane.
@example
-i INPUT -vf "hwupload, erosion_opencl=30:40:50:coordinates=231, hwdownload" OUTPUT
@end example
@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 dilation_opencl

Apply dilation effect to the video.

This filter replaces the pixel by the local(3x3) maximum.

It accepts the following options:

@table @option
@item threshold0
@item threshold1
@item threshold2
@item threshold3
Limit the maximum change for each plane. Range is @code{[0, 65535]} and default value is @code{65535}.
If @code{0}, plane will remain unchanged.

@item coordinates
Flag which specifies the pixel to refer to.
Range is @code{[0, 255]} and default value is @code{255}, i.e. all eight pixels are used.

Flags to local 3x3 coordinates region centered on @code{x}:

    1 2 3

    4 x 5

    6 7 8
@end table

@subsection Example

@itemize
@item
Apply dilation filter with threshold0 set to 30, threshold1 set 40, threshold2 set to 50 and coordinates set to 231, setting each pixel of the output to the local maximum between pixels: 1, 2, 3, 6, 7, 8 of the 3x3 region centered on it in the input. If the difference between input pixel and local maximum is more then threshold of the corresponding plane, output pixel will be set to input pixel + threshold of corresponding plane.
@example
-i INPUT -vf "hwupload, dilation_opencl=30:40:50:coordinates=231, hwdownload" OUTPUT
@end example
@end itemize

@section nlmeans_opencl

Non-local Means denoise filter through OpenCL, this filter accepts same options as @ref{nlmeans}.

@section overlay_opencl

Overlay one video on top of another.

It takes two inputs and has one output. The first input is the "main" video on which the second input is overlaid.
This filter requires same memory layout for all the inputs. So, format conversion may be needed.

The filter accepts the following options:

@table @option

@item x
Set the x coordinate of the overlaid video on the main video.
Default value is @code{0}.

@item y
Set the y coordinate of the overlaid video on the main video.
Default value is @code{0}.

@end table

@subsection Examples

@itemize
@item
Overlay an image LOGO at the top-left corner of the INPUT video. Both inputs are yuv420p format.
@example
-i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuv420p, hwupload[b], [a][b]overlay_opencl, hwdownload" OUTPUT
@end example
@item
The inputs have same memory layout for color channels , the overlay has additional alpha plane, like INPUT is yuv420p, and the LOGO is yuva420p.
@example
-i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuva420p, hwupload[b], [a][b]overlay_opencl, hwdownload" OUTPUT
@end example

@end itemize

@section pad_opencl

Add paddings to the input image, and place the original input at the
provided @var{x}, @var{y} coordinates.

It accepts the following options:

@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.

@item x
@item y
Specify the offsets to place the input image at within the padded area,
with respect to the top/left border of the output image.

The @var{x} expression can reference the value set by the @var{y}
expression, and vice versa.

The default value of @var{x} and @var{y} is 0.

If @var{x} or @var{y} evaluate to a negative number, they'll be changed
so the input image is centered on the padded area.

@item color
Specify the color of the padded area. For the syntax of this option,
check the @ref{color syntax,,"Color" section in the ffmpeg-utils
manual,ffmpeg-utils}.

@item aspect
Pad to an aspect instead to a resolution.
@end table

The value for the @var{width}, @var{height}, @var{x}, and @var{y}
options are expressions containing the following constants:

@table @option
@item in_w
@item in_h
The input video 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 width and height (the size of the padded area), as
specified by the @var{width} and @var{height} expressions.

@item ow
@item oh
These are the same as @var{out_w} and @var{out_h}.

@item x
@item y
The x and y offsets as specified by the @var{x} and @var{y}
expressions, or NAN if not yet specified.

@item a
same as @var{iw} / @var{ih}

@item sar
input sample aspect ratio

@item dar
input display aspect ratio, it is the same as (@var{iw} / @var{ih}) * @var{sar}
@end table

@section prewitt_opencl

Apply the Prewitt operator (@url{https://en.wikipedia.org/wiki/Prewitt_operator}) to input video stream.

The filter accepts the following option:

@table @option
@item planes
Set which planes to filter. Default value is @code{0xf}, by which all planes are processed.

@item scale
Set value which will be multiplied with filtered result.
Range is @code{[0.0, 65535]} and default value is @code{1.0}.

@item delta
Set value which will be added to filtered result.
Range is @code{[-65535, 65535]} and default value is @code{0.0}.
@end table

@subsection Example

@itemize
@item
Apply the Prewitt operator with scale set to 2 and delta set to 10.
@example
-i INPUT -vf "hwupload, prewitt_opencl=scale=2:delta=10, hwdownload" OUTPUT
@end example
@end itemize

@anchor{program_opencl}
@section program_opencl

Filter video using an OpenCL program.

@table @option

@item source
OpenCL program source file.

@item kernel
Kernel name in program.

@item inputs
Number of inputs to the filter.  Defaults to 1.

@item size, s
Size of output frames.  Defaults to the same as the first input.

@end table

The @code{program_opencl} filter also supports the @ref{framesync} options.

The program source file must contain a kernel function with the given name,
which will be run once for each plane of the output.  Each run on a plane
gets enqueued as a separate 2D global NDRange with one work-item for each
pixel to be generated.  The global ID offset for each work-item is therefore
the coordinates of a pixel in the destination image.

The kernel function needs to take the following arguments:
@itemize
@item
Destination image, @var{__write_only image2d_t}.

This image will become the output; the kernel should write all of it.
@item
Frame index, @var{unsigned int}.

This is a counter starting from zero and increasing by one for each frame.
@item
Source images, @var{__read_only image2d_t}.

These are the most recent images on each input.  The kernel may read from
them to generate the output, but they can't be written to.
@end itemize

Example programs:

@itemize
@item
Copy the input to the output (output must be the same size as the input).
@verbatim
__kernel void copy(__write_only image2d_t destination,
                   unsigned int index,
                   __read_only  image2d_t source)
{
    const sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE;

    int2 location = (int2)(get_global_id(0), get_global_id(1));

    float4 value = read_imagef(source, sampler, location);

    write_imagef(destination, location, value);
}
@end verbatim

@item
Apply a simple transformation, rotating the input by an amount increasing
with the index counter.  Pixel values are linearly interpolated by the
sampler, and the output need not have the same dimensions as the input.
@verbatim
__kernel void rotate_image(__write_only image2d_t dst,
                           unsigned int index,
                           __read_only  image2d_t src)
{
    const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
                               CLK_FILTER_LINEAR);

    float angle = (float)index / 100.0f;

    float2 dst_dim = convert_float2(get_image_dim(dst));
    float2 src_dim = convert_float2(get_image_dim(src));

    float2 dst_cen = dst_dim / 2.0f;
    float2 src_cen = src_dim / 2.0f;

    int2   dst_loc = (int2)(get_global_id(0), get_global_id(1));

    float2 dst_pos = convert_float2(dst_loc) - dst_cen;
    float2 src_pos = {
        cos(angle) * dst_pos.x - sin(angle) * dst_pos.y,
        sin(angle) * dst_pos.x + cos(angle) * dst_pos.y
    };
    src_pos = src_pos * src_dim / dst_dim;

    float2 src_loc = src_pos + src_cen;

    if (src_loc.x < 0.0f      || src_loc.y < 0.0f ||
        src_loc.x > src_dim.x || src_loc.y > src_dim.y)
        write_imagef(dst, dst_loc, 0.5f);
    else
        write_imagef(dst, dst_loc, read_imagef(src, sampler, src_loc));
}
@end verbatim

@item
Blend two inputs together, with the amount of each input used varying
with the index counter.
@verbatim
__kernel void blend_images(__write_only image2d_t dst,
                           unsigned int index,
                           __read_only  image2d_t src1,
                           __read_only  image2d_t src2)
{
    const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
                               CLK_FILTER_LINEAR);

    float blend = (cos((float)index / 50.0f) + 1.0f) / 2.0f;

    int2  dst_loc = (int2)(get_global_id(0), get_global_id(1));
    int2 src1_loc = dst_loc * get_image_dim(src1) / get_image_dim(dst);
    int2 src2_loc = dst_loc * get_image_dim(src2) / get_image_dim(dst);

    float4 val1 = read_imagef(src1, sampler, src1_loc);
    float4 val2 = read_imagef(src2, sampler, src2_loc);

    write_imagef(dst, dst_loc, val1 * blend + val2 * (1.0f - blend));
}
@end verbatim

@end itemize

@section roberts_opencl
Apply the Roberts cross operator (@url{https://en.wikipedia.org/wiki/Roberts_cross}) to input video stream.

The filter accepts the following option:

@table @option
@item planes
Set which planes to filter. Default value is @code{0xf}, by which all planes are processed.

@item scale
Set value which will be multiplied with filtered result.
Range is @code{[0.0, 65535]} and default value is @code{1.0}.

@item delta
Set value which will be added to filtered result.
Range is @code{[-65535, 65535]} and default value is @code{0.0}.
@end table

@subsection Example

@itemize
@item
Apply the Roberts cross operator with scale set to 2 and delta set to 10
@example
-i INPUT -vf "hwupload, roberts_opencl=scale=2:delta=10, hwdownload" OUTPUT
@end example
@end itemize

@section sobel_opencl

Apply the Sobel operator (@url{https://en.wikipedia.org/wiki/Sobel_operator}) to input video stream.

The filter accepts the following option:

@table @option
@item planes
Set which planes to filter. Default value is @code{0xf}, by which all planes are processed.

@item scale
Set value which will be multiplied with filtered result.
Range is @code{[0.0, 65535]} and default value is @code{1.0}.

@item delta
Set value which will be added to filtered result.
Range is @code{[-65535, 65535]} and default value is @code{0.0}.
@end table

@subsection Example

@itemize
@item
Apply sobel operator with scale set to 2 and delta set to 10
@example
-i INPUT -vf "hwupload, sobel_opencl=scale=2:delta=10, hwdownload" OUTPUT
@end example
@end itemize

@section tonemap_opencl

Perform HDR(PQ/HLG) to SDR conversion with tone-mapping.

It accepts the following parameters:

@table @option
@item tonemap
Specify the tone-mapping operator to be used. Same as tonemap option in @ref{tonemap}.

@item param
Tune the tone mapping algorithm. same as param option in @ref{tonemap}.

@item desat
Apply desaturation for highlights that exceed this level of brightness. The
higher the parameter, the more color information will be preserved. This
setting helps prevent unnaturally blown-out colors for super-highlights, by
(smoothly) turning into white instead. This makes images feel more natural,
at the cost of reducing information about out-of-range colors.

The default value is 0.5, and the algorithm here is a little different from
the cpu version tonemap currently. A setting of 0.0 disables this option.

@item threshold
The tonemapping algorithm parameters is fine-tuned per each scene. And a threshold
is used to detect whether the scene has changed or not. If the distance between
the current frame average brightness and the current running average exceeds
a threshold value, we would re-calculate scene average and peak brightness.
The default value is 0.2.

@item format
Specify the output pixel format.

Currently supported formats are:
@table @var
@item p010
@item nv12
@end table

@item range, r
Set the output color range.

Possible values are:
@table @var
@item tv/mpeg
@item pc/jpeg
@end table

Default is same as input.

@item primaries, p
Set the output color primaries.

Possible values are:
@table @var
@item bt709
@item bt2020
@end table

Default is same as input.

@item transfer, t
Set the output transfer characteristics.

Possible values are:
@table @var
@item bt709
@item bt2020
@end table

Default is bt709.

@item matrix, m
Set the output colorspace matrix.

Possible value are:
@table @var
@item bt709
@item bt2020
@end table

Default is same as input.

@end table

@subsection Example

@itemize
@item
Convert HDR(PQ/HLG) video to bt2020-transfer-characteristic p010 format using linear operator.
@example
-i INPUT -vf "format=p010,hwupload,tonemap_opencl=t=bt2020:tonemap=linear:format=p010,hwdownload,format=p010" OUTPUT
@end example
@end itemize

@section unsharp_opencl

Sharpen or blur the input video.

It accepts the following parameters:

@table @option
@item luma_msize_x, lx
Set the luma matrix horizontal size.
Range is @code{[1, 23]} and default value is @code{5}.

@item luma_msize_y, ly
Set the luma matrix vertical size.
Range is @code{[1, 23]} and default value is @code{5}.

@item luma_amount, la
Set the luma effect strength.
Range is @code{[-10, 10]} and default value is @code{1.0}.

Negative values will blur the input video, while positive values will
sharpen it, a value of zero will disable the effect.

@item chroma_msize_x, cx
Set the chroma matrix horizontal size.
Range is @code{[1, 23]} and default value is @code{5}.

@item chroma_msize_y, cy
Set the chroma matrix vertical size.
Range is @code{[1, 23]} and default value is @code{5}.

@item chroma_amount, ca
Set the chroma effect strength.
Range is @code{[-10, 10]} and default value is @code{0.0}.

Negative values will blur the input video, while positive values will
sharpen it, a value of zero will disable the effect.

@end table

All parameters are optional and default to the equivalent of the
string '5:5:1.0:5:5:0.0'.

@subsection Examples

@itemize
@item
Apply strong luma sharpen effect:
@example
-i INPUT -vf "hwupload, unsharp_opencl=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5, hwdownload" OUTPUT
@end example

@item
Apply a strong blur of both luma and chroma parameters:
@example
-i INPUT -vf "hwupload, unsharp_opencl=7:7:-2:7:7:-2, hwdownload" OUTPUT
@end example
@end itemize

@section xfade_opencl

Cross fade two videos with custom transition effect by using OpenCL.

It accepts the following options:

@table @option
@item transition
Set one of possible transition effects.

@table @option
@item custom
Select custom transition effect, the actual transition description
will be picked from source and kernel options.

@item fade
@item wipeleft
@item wiperight
@item wipeup
@item wipedown
@item slideleft
@item slideright
@item slideup
@item slidedown

Default transition is fade.
@end table

@item source
OpenCL program source file for custom transition.

@item kernel
Set name of kernel to use for custom transition from program source file.

@item duration
Set duration of video transition.

@item offset
Set time of start of transition relative to first video.
@end table

The program source file must contain a kernel function with the given name,
which will be run once for each plane of the output.  Each run on a plane
gets enqueued as a separate 2D global NDRange with one work-item for each
pixel to be generated.  The global ID offset for each work-item is therefore
the coordinates of a pixel in the destination image.

The kernel function needs to take the following arguments:
@itemize
@item
Destination image, @var{__write_only image2d_t}.

This image will become the output; the kernel should write all of it.

@item
First Source image, @var{__read_only image2d_t}.
Second Source image, @var{__read_only image2d_t}.

These are the most recent images on each input.  The kernel may read from
them to generate the output, but they can't be written to.

@item
Transition progress, @var{float}. This value is always between 0 and 1 inclusive.
@end itemize

Example programs:

@itemize
@item
Apply dots curtain transition effect:
@verbatim
__kernel void blend_images(__write_only image2d_t dst,
                           __read_only  image2d_t src1,
                           __read_only  image2d_t src2,
                           float progress)
{
    const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
                               CLK_FILTER_LINEAR);
    int2  p = (int2)(get_global_id(0), get_global_id(1));
    float2 rp = (float2)(get_global_id(0), get_global_id(1));
    float2 dim = (float2)(get_image_dim(src1).x, get_image_dim(src1).y);
    rp = rp / dim;

    float2 dots = (float2)(20.0, 20.0);
    float2 center = (float2)(0,0);
    float2 unused;

    float4 val1 = read_imagef(src1, sampler, p);
    float4 val2 = read_imagef(src2, sampler, p);
    bool next = distance(fract(rp * dots, &unused), (float2)(0.5, 0.5)) < (progress / distance(rp, center));

    write_imagef(dst, p, next ? val1 : val2);
}
@end verbatim

@end itemize

@c man end OPENCL VIDEO FILTERS

@chapter VAAPI Video Filters
@c man begin VAAPI VIDEO FILTERS

VAAPI Video filters are usually used with VAAPI decoder and VAAPI encoder. Below is a description of VAAPI video filters.

To enable compilation of these filters you need to configure FFmpeg with
@code{--enable-vaapi}.

To use vaapi filters, you need to setup the vaapi device correctly. For more information, please read @url{https://trac.ffmpeg.org/wiki/Hardware/VAAPI}

@section tonemap_vaapi

Perform HDR(High Dynamic Range) to SDR(Standard Dynamic Range) conversion with tone-mapping.
It maps the dynamic range of HDR10 content to the SDR content.
It currently only accepts HDR10 as input.

It accepts the following parameters:

@table @option
@item format
Specify the output pixel format.

Currently supported formats are:
@table @var
@item p010
@item nv12
@end table

Default is nv12.

@item primaries, p
Set the output color primaries.

Default is same as input.

@item transfer, t
Set the output transfer characteristics.

Default is bt709.

@item matrix, m
Set the output colorspace matrix.

Default is same as input.

@end table

@subsection Example

@itemize
@item
Convert HDR(HDR10) video to bt2020-transfer-characteristic p010 format
@example
tonemap_vaapi=format=p010:t=bt2020-10
@end example
@end itemize

@c man end VAAPI VIDEO FILTERS

@chapter Video Sources
@c man begin VIDEO SOURCES

Below is a description of the currently available video sources.

@section buffer

Buffer video frames, and make them available to the filter chain.

This source is mainly intended for a programmatic use, in particular
through the interface defined in @file{libavfilter/buffersrc.h}.

It accepts the following parameters:

@table @option

@item video_size
Specify the size (width and height) of the buffered video frames. For the
syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.

@item width
The input video width.

@item height
The input video height.

@item pix_fmt
A string representing the pixel format of the buffered video frames.
It may be a number corresponding to a pixel format, or a pixel format
name.

@item time_base
Specify the timebase assumed by the timestamps of the buffered frames.

@item frame_rate
Specify the frame rate expected for the video stream.

@item pixel_aspect, sar
The sample (pixel) aspect ratio of the input video.

@item sws_param
This option is deprecated and ignored. Prepend @code{sws_flags=@var{flags};}
to the filtergraph description to specify swscale flags for automatically
inserted scalers. See @ref{Filtergraph syntax}.

@item hw_frames_ctx
When using a hardware pixel format, this should be a reference to an
AVHWFramesContext describing input frames.
@end table

For example:
@example
buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1
@end example

will instruct the source to accept video frames with size 320x240 and
with format "yuv410p", assuming 1/24 as the timestamps timebase and
square pixels (1:1 sample aspect ratio).
Since the pixel format with name "yuv410p" corresponds to the number 6
(check the enum AVPixelFormat definition in @file{libavutil/pixfmt.h}),
this example corresponds to:
@example
buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1
@end example

Alternatively, the options can be specified as a flat string, but this
syntax is deprecated:

@var{width}:@var{height}:@var{pix_fmt}:@var{time_base.num}:@var{time_base.den}:@var{pixel_aspect.num}:@var{pixel_aspect.den}

@section cellauto

Create a pattern generated by an elementary cellular automaton.

The initial state of the cellular automaton can be defined through the
@option{filename} and @option{pattern} options. If such options are
not specified an initial state is created randomly.

At each new frame a new row in the video is filled with the result of
the cellular automaton next generation. The behavior when the whole
frame is filled is defined by the @option{scroll} option.

This source accepts the following options:

@table @option
@item filename, f
Read the initial cellular automaton state, i.e. the starting row, from
the specified file.
In the file, each non-whitespace character is considered an alive
cell, a newline will terminate the row, and further characters in the
file will be ignored.

@item pattern, p
Read the initial cellular automaton state, i.e. the starting row, from
the specified string.

Each non-whitespace character in the string is considered an alive
cell, a newline will terminate the row, and further characters in the
string will be ignored.

@item rate, r
Set the video rate, that is the number of frames generated per second.
Default is 25.

@item random_fill_ratio, ratio
Set the random fill ratio for the initial cellular automaton row. It
is a floating point number value ranging from 0 to 1, defaults to
1/PHI.

This option is ignored when a file or a pattern is specified.

@item random_seed, seed
Set the seed for filling randomly the initial row, must be an integer
included between 0 and UINT32_MAX. If not specified, or if explicitly
set to -1, the filter will try to use a good random seed on a best
effort basis.

@item rule
Set the cellular automaton rule, it is a number ranging from 0 to 255.
Default value is 110.

@item size, s
Set the size of the output video. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.

If @option{filename} or @option{pattern} is specified, the size is set
by default to the width of the specified initial state row, and the
height is set to @var{width} * PHI.

If @option{size} is set, it must contain the width of the specified
pattern string, and the specified pattern will be centered in the
larger row.

If a filename or a pattern string is not specified, the size value
defaults to "320x518" (used for a randomly generated initial state).

@item scroll
If set to 1, scroll the output upward when all the rows in the output
have been already filled. If set to 0, the new generated row will be
written over the top row just after the bottom row is filled.
Defaults to 1.

@item start_full, full
If set to 1, completely fill the output with generated rows before
outputting the first frame.
This is the default behavior, for disabling set the value to 0.

@item stitch
If set to 1, stitch the left and right row edges together.
This is the default behavior, for disabling set the value to 0.
@end table

@subsection Examples

@itemize
@item
Read the initial state from @file{pattern}, and specify an output of
size 200x400.
@example
cellauto=f=pattern:s=200x400
@end example

@item
Generate a random initial row with a width of 200 cells, with a fill
ratio of 2/3:
@example
cellauto=ratio=2/3:s=200x200
@end example

@item
Create a pattern generated by rule 18 starting by a single alive cell
centered on an initial row with width 100:
@example
cellauto=p=@@:s=100x400:full=0:rule=18
@end example

@item
Specify a more elaborated initial pattern:
@example
cellauto=p='@@@@ @@ @@@@':s=100x400:full=0:rule=18
@end example

@end itemize

@anchor{coreimagesrc}
@section coreimagesrc
Video source generated on GPU using Apple's CoreImage API on OSX.

This video source is a specialized version of the @ref{coreimage} video filter.
Use a core image generator at the beginning of the applied filterchain to
generate the content.

The coreimagesrc video source accepts the following options:
@table @option
@item list_generators
List all available generators along with all their respective options as well as
possible minimum and maximum values along with the default values.
@example
list_generators=true
@end example

@item size, s
Specify the size of the sourced video. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
The default value is @code{320x240}.

@item rate, r
Specify the frame rate of the sourced video, as the number of frames
generated per second. It has to be a string in the format
@var{frame_rate_num}/@var{frame_rate_den}, an integer number, a floating point
number or a valid video frame rate abbreviation. The default value is
"25".

@item sar
Set the sample aspect ratio of the sourced video.

@item duration, d
Set the duration of the sourced video. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.

If not specified, or the expressed duration is negative, the video is
supposed to be generated forever.
@end table

Additionally, all options of the @ref{coreimage} video filter are accepted.
A complete filterchain can be used for further processing of the
generated input without CPU-HOST transfer. See @ref{coreimage} documentation
and examples for details.

@subsection Examples

@itemize

@item
Use CIQRCodeGenerator to create a QR code for the FFmpeg homepage,
given as complete and escaped command-line for Apple's standard bash shell:
@example
ffmpeg -f lavfi -i coreimagesrc=s=100x100:filter=CIQRCodeGenerator@@inputMessage=https\\\\\://FFmpeg.org/@@inputCorrectionLevel=H -frames:v 1 QRCode.png
@end example
This example is equivalent to the QRCode example of @ref{coreimage} without the
need for a nullsrc video source.
@end itemize


@section gradients
Generate several gradients.

@table @option
@item size, s
Set frame size. For the syntax of this option, check the @ref{video size syntax,,"Video
size" section in the ffmpeg-utils manual,ffmpeg-utils}. Default value is "640x480".

@item rate, r
Set frame rate, expressed as number of frames per second. Default
value is "25".

@item c0, c1, c2, c3, c4, c5, c6, c7
Set 8 colors. Default values for colors is to pick random one.

@item x0, y0, y0, y1
Set gradient line source and destination points. If negative or out of range, random ones
are picked.

@item nb_colors, n
Set number of colors to use at once. Allowed range is from 2 to 8. Default value is 2.

@item seed
Set seed for picking gradient line points.

@item duration, d
Set the duration of the sourced video. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.

If not specified, or the expressed duration is negative, the video is
supposed to be generated forever.

@item speed
Set speed of gradients rotation.
@end table


@section mandelbrot

Generate a Mandelbrot set fractal, and progressively zoom towards the
point specified with @var{start_x} and @var{start_y}.

This source accepts the following options:

@table @option

@item end_pts
Set the terminal pts value. Default value is 400.

@item end_scale
Set the terminal scale value.
Must be a floating point value. Default value is 0.3.

@item inner
Set the inner coloring mode, that is the algorithm used to draw the
Mandelbrot fractal internal region.

It shall assume one of the following values:
@table @option
@item black
Set black mode.
@item convergence
Show time until convergence.
@item mincol
Set color based on point closest to the origin of the iterations.
@item period
Set period mode.
@end table

Default value is @var{mincol}.

@item bailout
Set the bailout value. Default value is 10.0.

@item maxiter
Set the maximum of iterations performed by the rendering
algorithm. Default value is 7189.

@item outer
Set outer coloring mode.
It shall assume one of following values:
@table @option
@item iteration_count
Set iteration count mode.
@item normalized_iteration_count
set normalized iteration count mode.
@end table
Default value is @var{normalized_iteration_count}.

@item rate, r
Set frame rate, expressed as number of frames per second. Default
value is "25".

@item size, s
Set frame size. For the syntax of this option, check the @ref{video size syntax,,"Video
size" section in the ffmpeg-utils manual,ffmpeg-utils}. Default value is "640x480".

@item start_scale
Set the initial scale value. Default value is 3.0.

@item start_x
Set the initial x position. Must be a floating point value between
-100 and 100. Default value is -0.743643887037158704752191506114774.

@item start_y
Set the initial y position. Must be a floating point value between
-100 and 100. Default value is -0.131825904205311970493132056385139.
@end table

@section mptestsrc

Generate various test patterns, as generated by the MPlayer test filter.

The size of the generated video is fixed, and is 256x256.
This source is useful in particular for testing encoding features.

This source accepts the following options:

@table @option

@item rate, r
Specify the frame rate of the sourced video, as the number of frames
generated per second. It has to be a string in the format
@var{frame_rate_num}/@var{frame_rate_den}, an integer number, a floating point
number or a valid video frame rate abbreviation. The default value is
"25".

@item duration, d
Set the duration of the sourced video. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.

If not specified, or the expressed duration is negative, the video is
supposed to be generated forever.

@item test, t

Set the number or the name of the test to perform. Supported tests are:
@table @option
@item dc_luma
@item dc_chroma
@item freq_luma
@item freq_chroma
@item amp_luma
@item amp_chroma
@item cbp
@item mv
@item ring1
@item ring2
@item all

@item max_frames, m
Set the maximum number of frames generated for each test, default value is 30.

@end table

Default value is "all", which will cycle through the list of all tests.
@end table

Some examples:
@example
mptestsrc=t=dc_luma
@end example

will generate a "dc_luma" test pattern.

@section frei0r_src

Provide a frei0r source.

To enable compilation of this filter you need to install the frei0r
header and configure FFmpeg with @code{--enable-frei0r}.

This source accepts the following parameters:

@table @option

@item size
The size of the video to generate. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.

@item framerate
The framerate of the generated video. It may be a string of the form
@var{num}/@var{den} or a frame rate abbreviation.

@item filter_name
The name to the frei0r source to load. For more information regarding frei0r and
how to set the parameters, read the @ref{frei0r} section in the video filters
documentation.

@item filter_params
A '|'-separated list of parameters to pass to the frei0r source.

@end table

For example, to generate a frei0r partik0l source with size 200x200
and frame rate 10 which is overlaid on the overlay filter main input:
@example
frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay
@end example

@section life

Generate a life pattern.

This source is based on a generalization of John Conway's life game.

The sourced input represents a life grid, each pixel represents a cell
which can be in one of two possible states, alive or dead. Every cell
interacts with its eight neighbours, which are the cells that are
horizontally, vertically, or diagonally adjacent.

At each interaction the grid evolves according to the adopted rule,
which specifies the number of neighbor alive cells which will make a
cell stay alive or born. The @option{rule} option allows one to specify
the rule to adopt.

This source accepts the following options:

@table @option
@item filename, f
Set the file from which to read the initial grid state. In the file,
each non-whitespace character is considered an alive cell, and newline
is used to delimit the end of each row.

If this option is not specified, the initial grid is generated
randomly.

@item rate, r
Set the video rate, that is the number of frames generated per second.
Default is 25.

@item random_fill_ratio, ratio
Set the random fill ratio for the initial random grid. It is a
floating point number value ranging from 0 to 1, defaults to 1/PHI.
It is ignored when a file is specified.

@item random_seed, seed
Set the seed for filling the initial random grid, must be an integer
included between 0 and UINT32_MAX. If not specified, or if explicitly
set to -1, the filter will try to use a good random seed on a best
effort basis.

@item rule
Set the life rule.

A rule can be specified with a code of the kind "S@var{NS}/B@var{NB}",
where @var{NS} and @var{NB} are sequences of numbers in the range 0-8,
@var{NS} specifies the number of alive neighbor cells which make a
live cell stay alive, and @var{NB} the number of alive neighbor cells
which make a dead cell to become alive (i.e. to "born").
"s" and "b" can be used in place of "S" and "B", respectively.

Alternatively a rule can be specified by an 18-bits integer. The 9
high order bits are used to encode the next cell state if it is alive
for each number of neighbor alive cells, the low order bits specify
the rule for "borning" new cells. Higher order bits encode for an
higher number of neighbor cells.
For example the number 6153 = @code{(12<<9)+9} specifies a stay alive
rule of 12 and a born rule of 9, which corresponds to "S23/B03".

Default value is "S23/B3", which is the original Conway's game of life
rule, and will keep a cell alive if it has 2 or 3 neighbor alive
cells, and will born a new cell if there are three alive cells around
a dead cell.

@item size, s
Set the size of the output video. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.

If @option{filename} is specified, the size is set by default to the
same size of the input file. If @option{size} is set, it must contain
the size specified in the input file, and the initial grid defined in
that file is centered in the larger resulting area.

If a filename is not specified, the size value defaults to "320x240"
(used for a randomly generated initial grid).

@item stitch
If set to 1, stitch the left and right grid edges together, and the
top and bottom edges also. Defaults to 1.

@item mold
Set cell mold speed. If set, a dead cell will go from @option{death_color} to
@option{mold_color} with a step of @option{mold}. @option{mold} can have a
value from 0 to 255.

@item life_color
Set the color of living (or new born) cells.

@item death_color
Set the color of dead cells. If @option{mold} is set, this is the first color
used to represent a dead cell.

@item mold_color
Set mold color, for definitely dead and moldy cells.

For the syntax of these 3 color options, check the @ref{color syntax,,"Color" section in the
ffmpeg-utils manual,ffmpeg-utils}.
@end table

@subsection Examples

@itemize
@item
Read a grid from @file{pattern}, and center it on a grid of size
300x300 pixels:
@example
life=f=pattern:s=300x300
@end example

@item
Generate a random grid of size 200x200, with a fill ratio of 2/3:
@example
life=ratio=2/3:s=200x200
@end example

@item
Specify a custom rule for evolving a randomly generated grid:
@example
life=rule=S14/B34
@end example

@item
Full example with slow death effect (mold) using @command{ffplay}:
@example
ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
@end example
@end itemize

@anchor{allrgb}
@anchor{allyuv}
@anchor{color}
@anchor{haldclutsrc}
@anchor{nullsrc}
@anchor{pal75bars}
@anchor{pal100bars}
@anchor{rgbtestsrc}
@anchor{smptebars}
@anchor{smptehdbars}
@anchor{testsrc}
@anchor{testsrc2}
@anchor{yuvtestsrc}
@section allrgb, allyuv, color, haldclutsrc, nullsrc, pal75bars, pal100bars, rgbtestsrc, smptebars, smptehdbars, testsrc, testsrc2, yuvtestsrc

The @code{allrgb} source returns frames of size 4096x4096 of all rgb colors.

The @code{allyuv} source returns frames of size 4096x4096 of all yuv colors.

The @code{color} source provides an uniformly colored input.

The @code{haldclutsrc} source provides an identity Hald CLUT. See also
@ref{haldclut} filter.

The @code{nullsrc} source returns unprocessed video frames. It is
mainly useful to be employed in analysis / debugging tools, or as the
source for filters which ignore the input data.

The @code{pal75bars} source generates a color bars pattern, based on
EBU PAL recommendations with 75% color levels.

The @code{pal100bars} source generates a color bars pattern, based on
EBU PAL recommendations with 100% color levels.

The @code{rgbtestsrc} source generates an RGB test pattern useful for
detecting RGB vs BGR issues. You should see a red, green and blue
stripe from top to bottom.

The @code{smptebars} source generates a color bars pattern, based on
the SMPTE Engineering Guideline EG 1-1990.

The @code{smptehdbars} source generates a color bars pattern, based on
the SMPTE RP 219-2002.

The @code{testsrc} source generates a test video pattern, showing a
color pattern, a scrolling gradient and a timestamp. This is mainly
intended for testing purposes.

The @code{testsrc2} source is similar to testsrc, but supports more
pixel formats instead of just @code{rgb24}. This allows using it as an
input for other tests without requiring a format conversion.

The @code{yuvtestsrc} source generates an YUV test pattern. You should
see a y, cb and cr stripe from top to bottom.

The sources accept the following parameters:

@table @option

@item level
Specify the level of the Hald CLUT, only available in the @code{haldclutsrc}
source. A level of @code{N} generates a picture of @code{N*N*N} by @code{N*N*N}
pixels to be used as identity matrix for 3D lookup tables. Each component is
coded on a @code{1/(N*N)} scale.

@item color, c
Specify the color of the source, only available in the @code{color}
source. For the syntax of this option, check the
@ref{color syntax,,"Color" section in the ffmpeg-utils manual,ffmpeg-utils}.

@item size, s
Specify the size of the sourced video. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
The default value is @code{320x240}.

This option is not available with the @code{allrgb}, @code{allyuv}, and
@code{haldclutsrc} filters.

@item rate, r
Specify the frame rate of the sourced video, as the number of frames
generated per second. It has to be a string in the format
@var{frame_rate_num}/@var{frame_rate_den}, an integer number, a floating point
number or a valid video frame rate abbreviation. The default value is
"25".

@item duration, d
Set the duration of the sourced video. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.

If not specified, or the expressed duration is negative, the video is
supposed to be generated forever.

Since the frame rate is used as time base, all frames including the last one
will have their full duration. If the specified duration is not a multiple
of the frame duration, it will be rounded up.

@item sar
Set the sample aspect ratio of the sourced video.

@item alpha
Specify the alpha (opacity) of the background, only available in the
@code{testsrc2} source. The value must be between 0 (fully transparent) and
255 (fully opaque, the default).

@item decimals, n
Set the number of decimals to show in the timestamp, only available in the
@code{testsrc} source.

The displayed timestamp value will correspond to the original
timestamp value multiplied by the power of 10 of the specified
value. Default value is 0.
@end table

@subsection Examples

@itemize
@item
Generate a video with a duration of 5.3 seconds, with size
176x144 and a frame rate of 10 frames per second:
@example
testsrc=duration=5.3:size=qcif:rate=10
@end example

@item
The following graph description will generate a red source
with an opacity of 0.2, with size "qcif" and a frame rate of 10
frames per second:
@example
color=c=red@@0.2:s=qcif:r=10
@end example

@item
If the input content is to be ignored, @code{nullsrc} can be used. The
following command generates noise in the luminance plane by employing
the @code{geq} filter:
@example
nullsrc=s=256x256, geq=random(1)*255:128:128
@end example
@end itemize

@subsection Commands

The @code{color} source supports the following commands:

@table @option
@item c, color
Set the color of the created image. Accepts the same syntax of the
corresponding @option{color} option.
@end table

@section openclsrc

Generate video using an OpenCL program.

@table @option

@item source
OpenCL program source file.

@item kernel
Kernel name in program.

@item size, s
Size of frames to generate.  This must be set.

@item format
Pixel format to use for the generated frames.  This must be set.

@item rate, r
Number of frames generated every second.  Default value is '25'.

@end table

For details of how the program loading works, see the @ref{program_opencl}
filter.

Example programs:

@itemize
@item
Generate a colour ramp by setting pixel values from the position of the pixel
in the output image.  (Note that this will work with all pixel formats, but
the generated output will not be the same.)
@verbatim
__kernel void ramp(__write_only image2d_t dst,
                   unsigned int index)
{
    int2 loc = (int2)(get_global_id(0), get_global_id(1));

    float4 val;
    val.xy = val.zw = convert_float2(loc) / convert_float2(get_image_dim(dst));

    write_imagef(dst, loc, val);
}
@end verbatim

@item
Generate a Sierpinski carpet pattern, panning by a single pixel each frame.
@verbatim
__kernel void sierpinski_carpet(__write_only image2d_t dst,
                                unsigned int index)
{
    int2 loc = (int2)(get_global_id(0), get_global_id(1));

    float4 value = 0.0f;
    int x = loc.x + index;
    int y = loc.y + index;
    while (x > 0 || y > 0) {
        if (x % 3 == 1 && y % 3 == 1) {
            value = 1.0f;
            break;
        }
        x /= 3;
        y /= 3;
    }

    write_imagef(dst, loc, value);
}
@end verbatim

@end itemize

@section sierpinski

Generate a Sierpinski carpet/triangle fractal, and randomly pan around.

This source accepts the following options:

@table @option
@item size, s
Set frame size. For the syntax of this option, check the @ref{video size syntax,,"Video
size" section in the ffmpeg-utils manual,ffmpeg-utils}. Default value is "640x480".

@item rate, r
Set frame rate, expressed as number of frames per second. Default
value is "25".

@item seed
Set seed which is used for random panning.

@item jump
Set max jump for single pan destination. Allowed range is from 1 to 10000.

@item type
Set fractal type, can be default @code{carpet} or @code{triangle}.
@end table

@c man end VIDEO SOURCES

@chapter Video Sinks
@c man begin VIDEO SINKS

Below is a description of the currently available video sinks.

@section buffersink

Buffer video frames, and make them available to the end of the filter
graph.

This sink is mainly intended for programmatic use, in particular
through the interface defined in @file{libavfilter/buffersink.h}
or the options system.

It accepts a pointer to an AVBufferSinkContext structure, which
defines the incoming buffers' formats, to be passed as the opaque
parameter to @code{avfilter_init_filter} for initialization.

@section nullsink

Null video sink: do absolutely nothing with the input video. It is
mainly useful as a template and for use in analysis / debugging
tools.

@c man end VIDEO SINKS

@chapter Multimedia Filters
@c man begin MULTIMEDIA FILTERS

Below is a description of the currently available multimedia filters.

@section abitscope

Convert input audio to a video output, displaying the audio bit scope.

The filter accepts the following options:

@table @option
@item rate, r
Set frame rate, expressed as number of frames per second. Default
value is "25".

@item size, s
Specify the video size for the output. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
Default value is @code{1024x256}.

@item colors
Specify list of colors separated by space or by '|' which will be used to
draw channels. Unrecognized or missing colors will be replaced
by white color.
@end table

@section adrawgraph
Draw a graph using input audio metadata.

See @ref{drawgraph}

@section agraphmonitor

See @ref{graphmonitor}.

@section ahistogram

Convert input audio to a video output, displaying the volume histogram.

The filter accepts the following options:

@table @option
@item dmode
Specify how histogram is calculated.

It accepts the following values:
@table @samp
@item single
Use single histogram for all channels.
@item separate
Use separate histogram for each channel.
@end table
Default is @code{single}.

@item rate, r
Set frame rate, expressed as number of frames per second. Default
value is "25".

@item size, s
Specify the video size for the output. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
Default value is @code{hd720}.

@item scale
Set display scale.

It accepts the following values:
@table @samp
@item log
logarithmic
@item sqrt
square root
@item cbrt
cubic root
@item lin
linear
@item rlog
reverse logarithmic
@end table
Default is @code{log}.

@item ascale
Set amplitude scale.

It accepts the following values:
@table @samp
@item log
logarithmic
@item lin
linear
@end table
Default is @code{log}.

@item acount
Set how much frames to accumulate in histogram.
Default is 1. Setting this to -1 accumulates all frames.

@item rheight
Set histogram ratio of window height.

@item slide
Set sonogram sliding.

It accepts the following values:
@table @samp
@item replace
replace old rows with new ones.
@item scroll
scroll from top to bottom.
@end table
Default is @code{replace}.
@end table

@section aphasemeter

Measures phase of input audio, which is exported as metadata @code{lavfi.aphasemeter.phase},
representing mean phase of current audio frame. A video output can also be produced and is
enabled by default. The audio is passed through as first output.

Audio will be rematrixed to stereo if it has a different channel layout. Phase value is in
range @code{[-1, 1]} where @code{-1} means left and right channels are completely out of phase
and @code{1} means channels are in phase.

The filter accepts the following options, all related to its video output:

@table @option
@item rate, r
Set the output frame rate. Default value is @code{25}.

@item size, s
Set the video size for the output. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
Default value is @code{800x400}.

@item rc
@item gc
@item bc
Specify the red, green, blue contrast. Default values are @code{2},
@code{7} and @code{1}.
Allowed range is @code{[0, 255]}.

@item mpc
Set color which will be used for drawing median phase. If color is
@code{none} which is default, no median phase value will be drawn.

@item video
Enable video output. Default is enabled.
@end table

@subsection phasing detection

The filter also detects out of phase and mono sequences in stereo streams.
It logs the sequence start, end and duration when it lasts longer or as long as the minimum set.

The filter accepts the following options for this detection:

@table @option
@item phasing
Enable mono and out of phase detection. Default is disabled.

@item tolerance, t
Set phase tolerance for mono detection, in amplitude ratio. Default is @code{0}.
Allowed range is @code{[0, 1]}.

@item angle, a
Set angle threshold for out of phase detection, in degree. Default is @code{170}.
Allowed range is @code{[90, 180]}.

@item duration, d
Set mono or out of phase duration until notification, expressed in seconds. Default is @code{2}.
@end table

@subsection Examples

@itemize
@item
Complete example with @command{ffmpeg} to detect 1 second of mono with 0.001 phase tolerance:
@example
ffmpeg -i stereo.wav -af aphasemeter=video=0:phasing=1:duration=1:tolerance=0.001 -f null -
@end example
@end itemize

@section avectorscope

Convert input audio to a video output, representing the audio vector
scope.

The filter is used to measure the difference between channels of stereo
audio stream. A monaural signal, consisting of identical left and right
signal, results in straight vertical line. Any stereo separation is visible
as a deviation from this line, creating a Lissajous figure.
If the straight (or deviation from it) but horizontal line appears this
indicates that the left and right channels are out of phase.

The filter accepts the following options:

@table @option
@item mode, m
Set the vectorscope mode.

Available values are:
@table @samp
@item lissajous
Lissajous rotated by 45 degrees.

@item lissajous_xy
Same as above but not rotated.

@item polar
Shape resembling half of circle.
@end table

Default value is @samp{lissajous}.

@item size, s
Set the video size for the output. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
Default value is @code{400x400}.

@item rate, r
Set the output frame rate. Default value is @code{25}.

@item rc
@item gc
@item bc
@item ac
Specify the red, green, blue and alpha contrast. Default values are @code{40},
@code{160}, @code{80} and @code{255}.
Allowed range is @code{[0, 255]}.

@item rf
@item gf
@item bf
@item af
Specify the red, green, blue and alpha fade. Default values are @code{15},
@code{10}, @code{5} and @code{5}.
Allowed range is @code{[0, 255]}.

@item zoom
Set the zoom factor. Default value is @code{1}. Allowed range is @code{[0, 10]}.
Values lower than @var{1} will auto adjust zoom factor to maximal possible value.

@item draw
Set the vectorscope drawing mode.

Available values are:
@table @samp
@item dot
Draw dot for each sample.

@item line
Draw line between previous and current sample.
@end table

Default value is @samp{dot}.

@item scale
Specify amplitude scale of audio samples.

Available values are:
@table @samp
@item lin
Linear.

@item sqrt
Square root.

@item cbrt
Cubic root.

@item log
Logarithmic.
@end table

@item swap
Swap left channel axis with right channel axis.

@item mirror
Mirror axis.

@table @samp
@item none
No mirror.

@item x
Mirror only x axis.

@item y
Mirror only y axis.

@item xy
Mirror both axis.
@end table

@end table

@subsection Examples

@itemize
@item
Complete example using @command{ffplay}:
@example
ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
             [a] avectorscope=zoom=1.3:rc=2:gc=200:bc=10:rf=1:gf=8:bf=7 [out0]'
@end example
@end itemize

@section bench, abench

Benchmark part of a filtergraph.

The filter accepts the following options:

@table @option
@item action
Start or stop a timer.

Available values are:
@table @samp
@item start
Get the current time, set it as frame metadata (using the key
@code{lavfi.bench.start_time}), and forward the frame to the next filter.

@item stop
Get the current time and fetch the @code{lavfi.bench.start_time} metadata from
the input frame metadata to get the time difference. Time difference, average,
maximum and minimum time (respectively @code{t}, @code{avg}, @code{max} and
@code{min}) are then printed. The timestamps are expressed in seconds.
@end table
@end table

@subsection Examples

@itemize
@item
Benchmark @ref{selectivecolor} filter:
@example
bench=start,selectivecolor=reds=-.2 .12 -.49,bench=stop
@end example
@end itemize

@section concat

Concatenate audio and video streams, joining them together one after the
other.

The filter works on segments of synchronized video and audio streams. All
segments must have the same number of streams of each type, and that will
also be the number of streams at output.

The filter accepts the following options:

@table @option

@item n
Set the number of segments. Default is 2.

@item v
Set the number of output video streams, that is also the number of video
streams in each segment. Default is 1.

@item a
Set the number of output audio streams, that is also the number of audio
streams in each segment. Default is 0.

@item unsafe
Activate unsafe mode: do not fail if segments have a different format.

@end table

The filter has @var{v}+@var{a} outputs: first @var{v} video outputs, then
@var{a} audio outputs.

There are @var{n}x(@var{v}+@var{a}) inputs: first the inputs for the first
segment, in the same order as the outputs, then the inputs for the second
segment, etc.

Related streams do not always have exactly the same duration, for various
reasons including codec frame size or sloppy authoring. For that reason,
related synchronized streams (e.g. a video and its audio track) should be
concatenated at once. The concat filter will use the duration of the longest
stream in each segment (except the last one), and if necessary pad shorter
audio streams with silence.

For this filter to work correctly, all segments must start at timestamp 0.

All corresponding streams must have the same parameters in all segments; the
filtering system will automatically select a common pixel format for video
streams, and a common sample format, sample rate and channel layout for
audio streams, but other settings, such as resolution, must be converted
explicitly by the user.

Different frame rates are acceptable but will result in variable frame rate
at output; be sure to configure the output file to handle it.

@subsection Examples

@itemize
@item
Concatenate an opening, an episode and an ending, all in bilingual version
(video in stream 0, audio in streams 1 and 2):
@example
ffmpeg -i opening.mkv -i episode.mkv -i ending.mkv -filter_complex \
  '[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2]
   concat=n=3:v=1:a=2 [v] [a1] [a2]' \
  -map '[v]' -map '[a1]' -map '[a2]' output.mkv
@end example

@item
Concatenate two parts, handling audio and video separately, using the
(a)movie sources, and adjusting the resolution:
@example
movie=part1.mp4, scale=512:288 [v1] ; amovie=part1.mp4 [a1] ;
movie=part2.mp4, scale=512:288 [v2] ; amovie=part2.mp4 [a2] ;
[v1] [v2] concat [outv] ; [a1] [a2] concat=v=0:a=1 [outa]
@end example
Note that a desync will happen at the stitch if the audio and video streams
do not have exactly the same duration in the first file.

@end itemize

@subsection Commands

This filter supports the following commands:
@table @option
@item next
Close the current segment and step to the next one
@end table

@anchor{ebur128}
@section ebur128

EBU R128 scanner filter. This filter takes an audio stream and analyzes its loudness
level. By default, it logs a message at a frequency of 10Hz with the
Momentary loudness (identified by @code{M}), Short-term loudness (@code{S}),
Integrated loudness (@code{I}) and Loudness Range (@code{LRA}).

The filter can only analyze streams which have a sampling rate of 48000 Hz and whose
sample format is double-precision floating point. The input stream will be converted to
this specification, if needed. Users may need to insert aformat and/or aresample filters
after this filter to obtain the original parameters.

The filter also has a video output (see the @var{video} option) with a real
time graph to observe the loudness evolution. The graphic contains the logged
message mentioned above, so it is not printed anymore when this option is set,
unless the verbose logging is set. The main graphing area contains the
short-term loudness (3 seconds of analysis), and the gauge on the right is for
the momentary loudness (400 milliseconds), but can optionally be configured
to instead display short-term loudness (see @var{gauge}).

The green area marks a  +/- 1LU target range around the target loudness
(-23LUFS by default, unless modified through @var{target}).

More information about the Loudness Recommendation EBU R128 on
@url{http://tech.ebu.ch/loudness}.

The filter accepts the following options:

@table @option

@item video
Activate the video output. The audio stream is passed unchanged whether this
option is set or no. The video stream will be the first output stream if
activated. Default is @code{0}.

@item size
Set the video size. This option is for video only. For the syntax of this
option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
Default and minimum resolution is @code{640x480}.

@item meter
Set the EBU scale meter. Default is @code{9}. Common values are @code{9} and
@code{18}, respectively for EBU scale meter +9 and EBU scale meter +18. Any
other integer value between this range is allowed.

@item metadata
Set metadata injection. If set to @code{1}, the audio input will be segmented
into 100ms output frames, each of them containing various loudness information
in metadata.  All the metadata keys are prefixed with @code{lavfi.r128.}.

Default is @code{0}.

@item framelog
Force the frame logging level.

Available values are:
@table @samp
@item info
information logging level
@item verbose
verbose logging level
@end table

By default, the logging level is set to @var{info}. If the @option{video} or
the @option{metadata} options are set, it switches to @var{verbose}.

@item peak
Set peak mode(s).

Available modes can be cumulated (the option is a @code{flag} type). Possible
values are:
@table @samp
@item none
Disable any peak mode (default).
@item sample
Enable sample-peak mode.

Simple peak mode looking for the higher sample value. It logs a message
for sample-peak (identified by @code{SPK}).
@item true
Enable true-peak mode.

If enabled, the peak lookup is done on an over-sampled version of the input
stream for better peak accuracy. It logs a message for true-peak.
(identified by @code{TPK}) and true-peak per frame (identified by @code{FTPK}).
This mode requires a build with @code{libswresample}.
@end table

@item dualmono
Treat mono input files as "dual mono". If a mono file is intended for playback
on a stereo system, its EBU R128 measurement will be perceptually incorrect.
If set to @code{true}, this option will compensate for this effect.
Multi-channel input files are not affected by this option.

@item panlaw
Set a specific pan law to be used for the measurement of dual mono files.
This parameter is optional, and has a default value of -3.01dB.

@item target
Set a specific target level (in LUFS) used as relative zero in the visualization.
This parameter is optional and has a default value of -23LUFS as specified
by EBU R128. However, material published online may prefer a level of -16LUFS
(e.g. for use with podcasts or video platforms).

@item gauge
Set the value displayed by the gauge. Valid values are @code{momentary} and s
@code{shortterm}. By default the momentary value will be used, but in certain
scenarios it may be more useful to observe the short term value instead (e.g.
live mixing).

@item scale
Sets the display scale for the loudness. Valid parameters are @code{absolute}
(in LUFS) or @code{relative} (LU) relative to the target. This only affects the
video output, not the summary or continuous log output.
@end table

@subsection Examples

@itemize
@item
Real-time graph using @command{ffplay}, with a EBU scale meter +18:
@example
ffplay -f lavfi -i "amovie=input.mp3,ebur128=video=1:meter=18 [out0][out1]"
@end example

@item
Run an analysis with @command{ffmpeg}:
@example
ffmpeg -nostats -i input.mp3 -filter_complex ebur128 -f null -
@end example
@end itemize

@section interleave, ainterleave

Temporally interleave frames from several inputs.

@code{interleave} works with video inputs, @code{ainterleave} with audio.

These filters read frames from several inputs and send the oldest
queued frame to the output.

Input streams must have well defined, monotonically increasing frame
timestamp values.

In order to submit one frame to output, these filters need to enqueue
at least one frame for each input, so they cannot work in case one
input is not yet terminated and will not receive incoming frames.

For example consider the case when one input is a @code{select} filter
which always drops input frames. The @code{interleave} filter will keep
reading from that input, but it will never be able to send new frames
to output until the input sends an end-of-stream signal.

Also, depending on inputs synchronization, the filters will drop
frames in case one input receives more frames than the other ones, and
the queue is already filled.

These filters accept the following options:

@table @option
@item nb_inputs, n
Set the number of different inputs, it is 2 by default.

@item duration
How to determine the end-of-stream.

@table @option
@item longest
The duration of the longest input. (default)

@item shortest
The duration of the shortest input.

@item first
The duration of the first input.
@end table

@end table

@subsection Examples

@itemize
@item
Interleave frames belonging to different streams using @command{ffmpeg}:
@example
ffmpeg -i bambi.avi -i pr0n.mkv -filter_complex "[0:v][1:v] interleave" out.avi
@end example

@item
Add flickering blur effect:
@example
select='if(gt(random(0), 0.2), 1, 2)':n=2 [tmp], boxblur=2:2, [tmp] interleave
@end example
@end itemize

@section metadata, ametadata

Manipulate frame metadata.

This filter accepts the following options:

@table @option
@item mode
Set mode of operation of the filter.

Can be one of the following:

@table @samp
@item select
If both @code{value} and @code{key} is set, select frames
which have such metadata. If only @code{key} is set, select
every frame that has such key in metadata.

@item add
Add new metadata @code{key} and @code{value}. If key is already available
do nothing.

@item modify
Modify value of already present key.

@item delete
If @code{value} is set, delete only keys that have such value.
Otherwise, delete key. If @code{key} is not set, delete all metadata values in
the frame.

@item print
Print key and its value if metadata was found. If @code{key} is not set print all
metadata values available in frame.
@end table

@item key
Set key used with all modes. Must be set for all modes except @code{print} and @code{delete}.

@item value
Set metadata value which will be used. This option is mandatory for
@code{modify} and @code{add} mode.

@item function
Which function to use when comparing metadata value and @code{value}.

Can be one of following:

@table @samp
@item same_str
Values are interpreted as strings, returns true if metadata value is same as @code{value}.

@item starts_with
Values are interpreted as strings, returns true if metadata value starts with
the @code{value} option string.

@item less
Values are interpreted as floats, returns true if metadata value is less than @code{value}.

@item equal
Values are interpreted as floats, returns true if @code{value} is equal with metadata value.

@item greater
Values are interpreted as floats, returns true if metadata value is greater than @code{value}.

@item expr
Values are interpreted as floats, returns true if expression from option @code{expr}
evaluates to true.

@item ends_with
Values are interpreted as strings, returns true if metadata value ends with
the @code{value} option string.
@end table

@item expr
Set expression which is used when @code{function} is set to @code{expr}.
The expression is evaluated through the eval API and can contain the following
constants:

@table @option
@item VALUE1
Float representation of @code{value} from metadata key.

@item VALUE2
Float representation of @code{value} as supplied by user in @code{value} option.
@end table

@item file
If specified in @code{print} mode, output is written to the named file. Instead of
plain filename any writable url can be specified. Filename ``-'' is a shorthand
for standard output. If @code{file} option is not set, output is written to the log
with AV_LOG_INFO loglevel.

@item direct
Reduces buffering in print mode when output is written to a URL set using @var{file}.

@end table

@subsection Examples

@itemize
@item
Print all metadata values for frames with key @code{lavfi.signalstats.YDIF} with values
between 0 and 1.
@example
signalstats,metadata=print:key=lavfi.signalstats.YDIF:value=0:function=expr:expr='between(VALUE1,0,1)'
@end example
@item
Print silencedetect output to file @file{metadata.txt}.
@example
silencedetect,ametadata=mode=print:file=metadata.txt
@end example
@item
Direct all metadata to a pipe with file descriptor 4.
@example
metadata=mode=print:file='pipe\:4'
@end example
@end itemize

@section perms, aperms

Set read/write permissions for the output frames.

These filters are mainly aimed at developers to test direct path in the
following filter in the filtergraph.

The filters accept the following options:

@table @option
@item mode
Select the permissions mode.

It accepts the following values:
@table @samp
@item none
Do nothing. This is the default.
@item ro
Set all the output frames read-only.
@item rw
Set all the output frames directly writable.
@item toggle
Make the frame read-only if writable, and writable if read-only.
@item random
Set each output frame read-only or writable randomly.
@end table

@item seed
Set the seed for the @var{random} mode, must be an integer included between
@code{0} and @code{UINT32_MAX}. If not specified, or if explicitly set to
@code{-1}, the filter will try to use a good random seed on a best effort
basis.
@end table

Note: in case of auto-inserted filter between the permission filter and the
following one, the permission might not be received as expected in that
following filter. Inserting a @ref{format} or @ref{aformat} filter before the
perms/aperms filter can avoid this problem.

@section realtime, arealtime

Slow down filtering to match real time approximately.

These filters will pause the filtering for a variable amount of time to
match the output rate with the input timestamps.
They are similar to the @option{re} option to @code{ffmpeg}.

They accept the following options:

@table @option
@item limit
Time limit for the pauses. Any pause longer than that will be considered
a timestamp discontinuity and reset the timer. Default is 2 seconds.
@item speed
Speed factor for processing. The value must be a float larger than zero.
Values larger than 1.0 will result in faster than realtime processing,
smaller will slow processing down. The @var{limit} is automatically adapted
accordingly. Default is 1.0.

A processing speed faster than what is possible without these filters cannot
be achieved.
@end table

@anchor{select}
@section select, aselect

Select frames to pass in output.

This filter accepts the following options:

@table @option

@item expr, e
Set expression, which is evaluated for each input frame.

If the expression is evaluated to zero, the frame is discarded.

If the evaluation result is negative or NaN, the frame is sent to the
first output; otherwise it is sent to the output with index
@code{ceil(val)-1}, assuming that the input index starts from 0.

For example a value of @code{1.2} corresponds to the output with index
@code{ceil(1.2)-1 = 2-1 = 1}, that is the second output.

@item outputs, n
Set the number of outputs. The output to which to send the selected
frame is based on the result of the evaluation. Default value is 1.
@end table

The expression can contain the following constants:

@table @option
@item n
The (sequential) number of the filtered frame, starting from 0.

@item selected_n
The (sequential) number of the selected frame, starting from 0.

@item prev_selected_n
The sequential number of the last selected frame. It's NAN if undefined.

@item TB
The timebase of the input timestamps.

@item pts
The PTS (Presentation TimeStamp) of the filtered video frame,
expressed in @var{TB} units. It's NAN if undefined.

@item t
The PTS of the filtered video frame,
expressed in seconds. It's NAN if undefined.

@item prev_pts
The PTS of the previously filtered video frame. It's NAN if undefined.

@item prev_selected_pts
The PTS of the last previously filtered video frame. It's NAN if undefined.

@item prev_selected_t
The PTS of the last previously selected video frame, expressed in seconds. It's NAN if undefined.

@item start_pts
The PTS of the first video frame in the video. It's NAN if undefined.

@item start_t
The time of the first video frame in the video. It's NAN if undefined.

@item pict_type @emph{(video only)}
The type of the filtered frame. It can assume one of the following
values:
@table @option
@item I
@item P
@item B
@item S
@item SI
@item SP
@item BI
@end table

@item interlace_type @emph{(video only)}
The frame interlace type. It can assume one of the following values:
@table @option
@item PROGRESSIVE
The frame is progressive (not interlaced).
@item TOPFIRST
The frame is top-field-first.
@item BOTTOMFIRST
The frame is bottom-field-first.
@end table

@item consumed_sample_n @emph{(audio only)}
the number of selected samples before the current frame

@item samples_n @emph{(audio only)}
the number of samples in the current frame

@item sample_rate @emph{(audio only)}
the input sample rate

@item key
This is 1 if the filtered frame is a key-frame, 0 otherwise.

@item pos
the position in the file of the filtered frame, -1 if the information
is not available (e.g. for synthetic video)

@item scene @emph{(video only)}
value between 0 and 1 to indicate a new scene; a low value reflects a low
probability for the current frame to introduce a new scene, while a higher
value means the current frame is more likely to be one (see the example below)

@item concatdec_select
The concat demuxer can select only part of a concat input file by setting an
inpoint and an outpoint, but the output packets may not be entirely contained
in the selected interval. By using this variable, it is possible to skip frames
generated by the concat demuxer which are not exactly contained in the selected
interval.

This works by comparing the frame pts against the @var{lavf.concat.start_time}
and the @var{lavf.concat.duration} packet metadata values which are also
present in the decoded frames.

The @var{concatdec_select} variable is -1 if the frame pts is at least
start_time and either the duration metadata is missing or the frame pts is less
than start_time + duration, 0 otherwise, and NaN if the start_time metadata is
missing.

That basically means that an input frame is selected if its pts is within the
interval set by the concat demuxer.

@end table

The default value of the select expression is "1".

@subsection Examples

@itemize
@item
Select all frames in input:
@example
select
@end example

The example above is the same as:
@example
select=1
@end example

@item
Skip all frames:
@example
select=0
@end example

@item
Select only I-frames:
@example
select='eq(pict_type\,I)'
@end example

@item
Select one frame every 100:
@example
select='not(mod(n\,100))'
@end example

@item
Select only frames contained in the 10-20 time interval:
@example
select=between(t\,10\,20)
@end example

@item
Select only I-frames contained in the 10-20 time interval:
@example
select=between(t\,10\,20)*eq(pict_type\,I)
@end example

@item
Select frames with a minimum distance of 10 seconds:
@example
select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
@end example

@item
Use aselect to select only audio frames with samples number > 100:
@example
aselect='gt(samples_n\,100)'
@end example

@item
Create a mosaic of the first scenes:
@example
ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png
@end example

Comparing @var{scene} against a value between 0.3 and 0.5 is generally a sane
choice.

@item
Send even and odd frames to separate outputs, and compose them:
@example
select=n=2:e='mod(n, 2)+1' [odd][even]; [odd] pad=h=2*ih [tmp]; [tmp][even] overlay=y=h
@end example

@item
Select useful frames from an ffconcat file which is using inpoints and
outpoints but where the source files are not intra frame only.
@example
ffmpeg -copyts -vsync 0 -segment_time_metadata 1 -i input.ffconcat -vf select=concatdec_select -af aselect=concatdec_select output.avi
@end example
@end itemize

@section sendcmd, asendcmd

Send commands to filters in the filtergraph.

These filters read commands to be sent to other filters in the
filtergraph.

@code{sendcmd} must be inserted between two video filters,
@code{asendcmd} must be inserted between two audio filters, but apart
from that they act the same way.

The specification of commands can be provided in the filter arguments
with the @var{commands} option, or in a file specified by the
@var{filename} option.

These filters accept the following options:
@table @option
@item commands, c
Set the commands to be read and sent to the other filters.
@item filename, f
Set the filename of the commands to be read and sent to the other
filters.
@end table

@subsection Commands syntax

A commands description consists of a sequence of interval
specifications, comprising a list of commands to be executed when a
particular event related to that interval occurs. The occurring event
is typically the current frame time entering or leaving a given time
interval.

An interval is specified by the following syntax:
@example
@var{START}[-@var{END}] @var{COMMANDS};
@end example

The time interval is specified by the @var{START} and @var{END} times.
@var{END} is optional and defaults to the maximum time.

The current frame time is considered within the specified interval if
it is included in the interval [@var{START}, @var{END}), that is when
the time is greater or equal to @var{START} and is lesser than
@var{END}.

@var{COMMANDS} consists of a sequence of one or more command
specifications, separated by ",", relating to that interval.  The
syntax of a command specification is given by:
@example
[@var{FLAGS}] @var{TARGET} @var{COMMAND} @var{ARG}
@end example

@var{FLAGS} is optional and specifies the type of events relating to
the time interval which enable sending the specified command, and must
be a non-null sequence of identifier flags separated by "+" or "|" and
enclosed between "[" and "]".

The following flags are recognized:
@table @option
@item enter
The command is sent when the current frame timestamp enters the
specified interval. In other words, the command is sent when the
previous frame timestamp was not in the given interval, and the
current is.

@item leave
The command is sent when the current frame timestamp leaves the
specified interval. In other words, the command is sent when the
previous frame timestamp was in the given interval, and the
current is not.

@item expr
The command @var{ARG} is interpreted as expression and result of
expression is passed as @var{ARG}.

The expression is evaluated through the eval API and can contain the following
constants:

@table @option
@item POS
Original position in the file of the frame, or undefined if undefined
for the current frame.

@item PTS
The presentation timestamp in input.

@item N
The count of the input frame for video or audio, starting from 0.

@item T
The time in seconds of the current frame.

@item TS
The start time in seconds of the current command interval.

@item TE
The end time in seconds of the current command interval.

@item TI
The interpolated time of the current command interval, TI = (T - TS) / (TE - TS).
@end table

@end table

If @var{FLAGS} is not specified, a default value of @code{[enter]} is
assumed.

@var{TARGET} specifies the target of the command, usually the name of
the filter class or a specific filter instance name.

@var{COMMAND} specifies the name of the command for the target filter.

@var{ARG} is optional and specifies the optional list of argument for
the given @var{COMMAND}.

Between one interval specification and another, whitespaces, or
sequences of characters starting with @code{#} until the end of line,
are ignored and can be used to annotate comments.

A simplified BNF description of the commands specification syntax
follows:
@example
@var{COMMAND_FLAG}  ::= "enter" | "leave"
@var{COMMAND_FLAGS} ::= @var{COMMAND_FLAG} [(+|"|")@var{COMMAND_FLAG}]
@var{COMMAND}       ::= ["[" @var{COMMAND_FLAGS} "]"] @var{TARGET} @var{COMMAND} [@var{ARG}]
@var{COMMANDS}      ::= @var{COMMAND} [,@var{COMMANDS}]
@var{INTERVAL}      ::= @var{START}[-@var{END}] @var{COMMANDS}
@var{INTERVALS}     ::= @var{INTERVAL}[;@var{INTERVALS}]
@end example

@subsection Examples

@itemize
@item
Specify audio tempo change at second 4:
@example
asendcmd=c='4.0 atempo tempo 1.5',atempo
@end example

@item
Target a specific filter instance:
@example
asendcmd=c='4.0 atempo@@my tempo 1.5',atempo@@my
@end example

@item
Specify a list of drawtext and hue commands in a file.
@example
# show text in the interval 5-10
5.0-10.0 [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=hello world',
         [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=';

# desaturate the image in the interval 15-20
15.0-20.0 [enter] hue s 0,
          [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=nocolor',
          [leave] hue s 1,
          [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=color';

# apply an exponential saturation fade-out effect, starting from time 25
25 [enter] hue s exp(25-t)
@end example

A filtergraph allowing to read and process the above command list
stored in a file @file{test.cmd}, can be specified with:
@example
sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue
@end example
@end itemize

@anchor{setpts}
@section setpts, asetpts

Change the PTS (presentation timestamp) of the input frames.

@code{setpts} works on video frames, @code{asetpts} on audio frames.

This filter accepts the following options:

@table @option

@item expr
The expression which is evaluated for each frame to construct its timestamp.

@end table

The expression is evaluated through the eval API and can contain the following
constants:

@table @option
@item FRAME_RATE, FR
frame rate, only defined for constant frame-rate video

@item PTS
The presentation timestamp in input

@item N
The count of the input frame for video or the number of consumed samples,
not including the current frame for audio, starting from 0.

@item NB_CONSUMED_SAMPLES
The number of consumed samples, not including the current frame (only
audio)

@item NB_SAMPLES, S
The number of samples in the current frame (only audio)

@item SAMPLE_RATE, SR
The audio sample rate.

@item STARTPTS
The PTS of the first frame.

@item STARTT
the time in seconds of the first frame

@item INTERLACED
State whether the current frame is interlaced.

@item T
the time in seconds of the current frame

@item POS
original position in the file of the frame, or undefined if undefined
for the current frame

@item PREV_INPTS
The previous input PTS.

@item PREV_INT
previous input time in seconds

@item PREV_OUTPTS
The previous output PTS.

@item PREV_OUTT
previous output time in seconds

@item RTCTIME
The wallclock (RTC) time in microseconds. This is deprecated, use time(0)
instead.

@item RTCSTART
The wallclock (RTC) time at the start of the movie in microseconds.

@item TB
The timebase of the input timestamps.

@end table

@subsection Examples

@itemize
@item
Start counting PTS from zero
@example
setpts=PTS-STARTPTS
@end example

@item
Apply fast motion effect:
@example
setpts=0.5*PTS
@end example

@item
Apply slow motion effect:
@example
setpts=2.0*PTS
@end example

@item
Set fixed rate of 25 frames per second:
@example
setpts=N/(25*TB)
@end example

@item
Set fixed rate 25 fps with some jitter:
@example
setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))'
@end example

@item
Apply an offset of 10 seconds to the input PTS:
@example
setpts=PTS+10/TB
@end example

@item
Generate timestamps from a "live source" and rebase onto the current timebase:
@example
setpts='(RTCTIME - RTCSTART) / (TB * 1000000)'
@end example

@item
Generate timestamps by counting samples:
@example
asetpts=N/SR/TB
@end example

@end itemize

@section setrange

Force color range for the output video frame.

The @code{setrange} filter marks the color range property for the
output frames. It does not change the input frame, but only sets the
corresponding property, which affects how the frame is treated by
following filters.

The filter accepts the following options:

@table @option

@item range
Available values are:

@table @samp
@item auto
Keep the same color range property.

@item unspecified, unknown
Set the color range as unspecified.

@item limited, tv, mpeg
Set the color range as limited.

@item full, pc, jpeg
Set the color range as full.
@end table
@end table

@section settb, asettb

Set the timebase to use for the output frames timestamps.
It is mainly useful for testing timebase configuration.

It accepts the following parameters:

@table @option

@item expr, tb
The expression which is evaluated into the output timebase.

@end table

The value for @option{tb} is an arithmetic expression representing a
rational. The expression can contain the constants "AVTB" (the default
timebase), "intb" (the input timebase) and "sr" (the sample rate,
audio only). Default value is "intb".

@subsection Examples

@itemize
@item
Set the timebase to 1/25:
@example
settb=expr=1/25
@end example

@item
Set the timebase to 1/10:
@example
settb=expr=0.1
@end example

@item
Set the timebase to 1001/1000:
@example
settb=1+0.001
@end example

@item
Set the timebase to 2*intb:
@example
settb=2*intb
@end example

@item
Set the default timebase value:
@example
settb=AVTB
@end example
@end itemize

@section showcqt
Convert input audio to a video output representing frequency spectrum
logarithmically using Brown-Puckette constant Q transform algorithm with
direct frequency domain coefficient calculation (but the transform itself
is not really constant Q, instead the Q factor is actually variable/clamped),
with musical tone scale, from E0 to D#10.

The filter accepts the following options:

@table @option
@item size, s
Specify the video size for the output. It must be even. For the syntax of this option,
check the @ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
Default value is @code{1920x1080}.

@item fps, rate, r
Set the output frame rate. Default value is @code{25}.

@item bar_h
Set the bargraph height. It must be even. Default value is @code{-1} which
computes the bargraph height automatically.

@item axis_h
Set the axis height. It must be even. Default value is @code{-1} which computes
the axis height automatically.

@item sono_h
Set the sonogram height. It must be even. Default value is @code{-1} which
computes the sonogram height automatically.

@item fullhd
Set the fullhd resolution. This option is deprecated, use @var{size}, @var{s}
instead. Default value is @code{1}.

@item sono_v, volume
Specify the sonogram volume expression. It can contain variables:
@table @option
@item bar_v
the @var{bar_v} evaluated expression
@item frequency, freq, f
the frequency where it is evaluated
@item timeclamp, tc
the value of @var{timeclamp} option
@end table
and functions:
@table @option
@item a_weighting(f)
A-weighting of equal loudness
@item b_weighting(f)
B-weighting of equal loudness
@item c_weighting(f)
C-weighting of equal loudness.
@end table
Default value is @code{16}.

@item bar_v, volume2
Specify the bargraph volume expression. It can contain variables:
@table @option
@item sono_v
the @var{sono_v} evaluated expression
@item frequency, freq, f
the frequency where it is evaluated
@item timeclamp, tc
the value of @var{timeclamp} option
@end table
and functions:
@table @option
@item a_weighting(f)
A-weighting of equal loudness
@item b_weighting(f)
B-weighting of equal loudness
@item c_weighting(f)
C-weighting of equal loudness.
@end table
Default value is @code{sono_v}.

@item sono_g, gamma
Specify the sonogram gamma. Lower gamma makes the spectrum more contrast,
higher gamma makes the spectrum having more range. Default value is @code{3}.
Acceptable range is @code{[1, 7]}.

@item bar_g, gamma2
Specify the bargraph gamma. Default value is @code{1}. Acceptable range is
@code{[1, 7]}.

@item bar_t
Specify the bargraph transparency level. Lower value makes the bargraph sharper.
Default value is @code{1}. Acceptable range is @code{[0, 1]}.

@item timeclamp, tc
Specify the transform timeclamp. At low frequency, there is trade-off between
accuracy in time domain and frequency domain. If timeclamp is lower,
event in time domain is represented more accurately (such as fast bass drum),
otherwise event in frequency domain is represented more accurately
(such as bass guitar). Acceptable range is @code{[0.002, 1]}. Default value is @code{0.17}.

@item attack
Set attack time in seconds. The default is @code{0} (disabled). Otherwise, it
limits future samples by applying asymmetric windowing in time domain, useful
when low latency is required. Accepted range is @code{[0, 1]}.

@item basefreq
Specify the transform base frequency. Default value is @code{20.01523126408007475},
which is frequency 50 cents below E0. Acceptable range is @code{[10, 100000]}.

@item endfreq
Specify the transform end frequency. Default value is @code{20495.59681441799654},
which is frequency 50 cents above D#10. Acceptable range is @code{[10, 100000]}.

@item coeffclamp
This option is deprecated and ignored.

@item tlength
Specify the transform length in time domain. Use this option to control accuracy
trade-off between time domain and frequency domain at every frequency sample.
It can contain variables:
@table @option
@item frequency, freq, f
the frequency where it is evaluated
@item timeclamp, tc
the value of @var{timeclamp} option.
@end table
Default value is @code{384*tc/(384+tc*f)}.

@item count
Specify the transform count for every video frame. Default value is @code{6}.
Acceptable range is @code{[1, 30]}.

@item fcount
Specify the transform count for every single pixel. Default value is @code{0},
which makes it computed automatically. Acceptable range is @code{[0, 10]}.

@item fontfile
Specify font file for use with freetype to draw the axis. If not specified,
use embedded font. Note that drawing with font file or embedded font is not
implemented with custom @var{basefreq} and @var{endfreq}, use @var{axisfile}
option instead.

@item font
Specify fontconfig pattern. This has lower priority than @var{fontfile}. The
@code{:} in the pattern may be replaced by @code{|} to avoid unnecessary
escaping.

@item fontcolor
Specify font color expression. This is arithmetic expression that should return
integer value 0xRRGGBB. It can contain variables:
@table @option
@item frequency, freq, f
the frequency where it is evaluated
@item timeclamp, tc
the value of @var{timeclamp} option
@end table
and functions:
@table @option
@item midi(f)
midi number of frequency f, some midi numbers: E0(16), C1(24), C2(36), A4(69)
@item r(x), g(x), b(x)
red, green, and blue value of intensity x.
@end table
Default value is @code{st(0, (midi(f)-59.5)/12);
st(1, if(between(ld(0),0,1), 0.5-0.5*cos(2*PI*ld(0)), 0));
r(1-ld(1)) + b(ld(1))}.

@item axisfile
Specify image file to draw the axis. This option override @var{fontfile} and
@var{fontcolor} option.

@item axis, text
Enable/disable drawing text to the axis. If it is set to @code{0}, drawing to
the axis is disabled, ignoring @var{fontfile} and @var{axisfile} option.
Default value is @code{1}.

@item csp
Set colorspace. The accepted values are:
@table @samp
@item unspecified
Unspecified (default)

@item bt709
BT.709

@item fcc
FCC

@item bt470bg
BT.470BG or BT.601-6 625

@item smpte170m
SMPTE-170M or BT.601-6 525

@item smpte240m
SMPTE-240M

@item bt2020ncl
BT.2020 with non-constant luminance

@end table

@item cscheme
Set spectrogram color scheme. This is list of floating point values with format
@code{left_r|left_g|left_b|right_r|right_g|right_b}.
The default is @code{1|0.5|0|0|0.5|1}.

@end table

@subsection Examples

@itemize
@item
Playing audio while showing the spectrum:
@example
ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt [out0]'
@end example

@item
Same as above, but with frame rate 30 fps:
@example
ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt=fps=30:count=5 [out0]'
@end example

@item
Playing at 1280x720:
@example
ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt=s=1280x720:count=4 [out0]'
@end example

@item
Disable sonogram display:
@example
sono_h=0
@end example

@item
A1 and its harmonics: A1, A2, (near)E3, A3:
@example
ffplay -f lavfi 'aevalsrc=0.1*sin(2*PI*55*t)+0.1*sin(4*PI*55*t)+0.1*sin(6*PI*55*t)+0.1*sin(8*PI*55*t),
                 asplit[a][out1]; [a] showcqt [out0]'
@end example

@item
Same as above, but with more accuracy in frequency domain:
@example
ffplay -f lavfi 'aevalsrc=0.1*sin(2*PI*55*t)+0.1*sin(4*PI*55*t)+0.1*sin(6*PI*55*t)+0.1*sin(8*PI*55*t),
                 asplit[a][out1]; [a] showcqt=timeclamp=0.5 [out0]'
@end example

@item
Custom volume:
@example
bar_v=10:sono_v=bar_v*a_weighting(f)
@end example

@item
Custom gamma, now spectrum is linear to the amplitude.
@example
bar_g=2:sono_g=2
@end example

@item
Custom tlength equation:
@example
tc=0.33:tlength='st(0,0.17); 384*tc / (384 / ld(0) + tc*f /(1-ld(0))) + 384*tc / (tc*f / ld(0) + 384 /(1-ld(0)))'
@end example

@item
Custom fontcolor and fontfile, C-note is colored green, others are colored blue:
@example
fontcolor='if(mod(floor(midi(f)+0.5),12), 0x0000FF, g(1))':fontfile=myfont.ttf
@end example

@item
Custom font using fontconfig:
@example
font='Courier New,Monospace,mono|bold'
@end example

@item
Custom frequency range with custom axis using image file:
@example
axisfile=myaxis.png:basefreq=40:endfreq=10000
@end example
@end itemize

@section showfreqs

Convert input audio to video output representing the audio power spectrum.
Audio amplitude is on Y-axis while frequency is on X-axis.

The filter accepts the following options:

@table @option
@item size, s
Specify size of video. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
Default is @code{1024x512}.

@item mode
Set display mode.
This set how each frequency bin will be represented.

It accepts the following values:
@table @samp
@item line
@item bar
@item dot
@end table
Default is @code{bar}.

@item ascale
Set amplitude scale.

It accepts the following values:
@table @samp
@item lin
Linear scale.

@item sqrt
Square root scale.

@item cbrt
Cubic root scale.

@item log
Logarithmic scale.
@end table
Default is @code{log}.

@item fscale
Set frequency scale.

It accepts the following values:
@table @samp
@item lin
Linear scale.

@item log
Logarithmic scale.

@item rlog
Reverse logarithmic scale.
@end table
Default is @code{lin}.

@item win_size
Set window size. Allowed range is from 16 to 65536.

Default is @code{2048}

@item win_func
Set windowing function.

It accepts the following values:
@table @samp
@item rect
@item bartlett
@item hanning
@item hamming
@item blackman
@item welch
@item flattop
@item bharris
@item bnuttall
@item bhann
@item sine
@item nuttall
@item lanczos
@item gauss
@item tukey
@item dolph
@item cauchy
@item parzen
@item poisson
@item bohman
@end table
Default is @code{hanning}.

@item overlap
Set window overlap. In range @code{[0, 1]}. Default is @code{1},
which means optimal overlap for selected window function will be picked.

@item averaging
Set time averaging. Setting this to 0 will display current maximal peaks.
Default is @code{1}, which means time averaging is disabled.

@item colors
Specify list of colors separated by space or by '|' which will be used to
draw channel frequencies. Unrecognized or missing colors will be replaced
by white color.

@item cmode
Set channel display mode.

It accepts the following values:
@table @samp
@item combined
@item separate
@end table
Default is @code{combined}.

@item minamp
Set minimum amplitude used in @code{log} amplitude scaler.

@item data
Set data display mode.

It accepts the following values:
@table @samp
@item magnitude
@item phase
@item delay
@end table
Default is @code{magnitude}.
@end table

@section showspatial

Convert stereo input audio to a video output, representing the spatial relationship
between two channels.

The filter accepts the following options:

@table @option
@item size, s
Specify the video size for the output. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
Default value is @code{512x512}.

@item win_size
Set window size. Allowed range is from @var{1024} to @var{65536}. Default size is @var{4096}.

@item win_func
Set window function.

It accepts the following values:
@table @samp
@item rect
@item bartlett
@item hann
@item hanning
@item hamming
@item blackman
@item welch
@item flattop
@item bharris
@item bnuttall
@item bhann
@item sine
@item nuttall
@item lanczos
@item gauss
@item tukey
@item dolph
@item cauchy
@item parzen
@item poisson
@item bohman
@end table

Default value is @code{hann}.

@item overlap
Set ratio of overlap window. Default value is @code{0.5}.
When value is @code{1} overlap is set to recommended size for specific
window function currently used.
@end table

@anchor{showspectrum}
@section showspectrum

Convert input audio to a video output, representing the audio frequency
spectrum.

The filter accepts the following options:

@table @option
@item size, s
Specify the video size for the output. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
Default value is @code{640x512}.

@item slide
Specify how the spectrum should slide along the window.

It accepts the following values:
@table @samp
@item replace
the samples start again on the left when they reach the right
@item scroll
the samples scroll from right to left
@item fullframe
frames are only produced when the samples reach the right
@item rscroll
the samples scroll from left to right
@end table

Default value is @code{replace}.

@item mode
Specify display mode.

It accepts the following values:
@table @samp
@item combined
all channels are displayed in the same row
@item separate
all channels are displayed in separate rows
@end table

Default value is @samp{combined}.

@item color
Specify display color mode.

It accepts the following values:
@table @samp
@item channel
each channel is displayed in a separate color
@item intensity
each channel is displayed using the same color scheme
@item rainbow
each channel is displayed using the rainbow color scheme
@item moreland
each channel is displayed using the moreland color scheme
@item nebulae
each channel is displayed using the nebulae color scheme
@item fire
each channel is displayed using the fire color scheme
@item fiery
each channel is displayed using the fiery color scheme
@item fruit
each channel is displayed using the fruit color scheme
@item cool
each channel is displayed using the cool color scheme
@item magma
each channel is displayed using the magma color scheme
@item green
each channel is displayed using the green color scheme
@item viridis
each channel is displayed using the viridis color scheme
@item plasma
each channel is displayed using the plasma color scheme
@item cividis
each channel is displayed using the cividis color scheme
@item terrain
each channel is displayed using the terrain color scheme
@end table

Default value is @samp{channel}.

@item scale
Specify scale used for calculating intensity color values.

It accepts the following values:
@table @samp
@item lin
linear
@item sqrt
square root, default
@item cbrt
cubic root
@item log
logarithmic
@item 4thrt
4th root
@item 5thrt
5th root
@end table

Default value is @samp{sqrt}.

@item fscale
Specify frequency scale.

It accepts the following values:
@table @samp
@item lin
linear
@item log
logarithmic
@end table

Default value is @samp{lin}.

@item saturation
Set saturation modifier for displayed colors. Negative values provide
alternative color scheme. @code{0} is no saturation at all.
Saturation must be in [-10.0, 10.0] range.
Default value is @code{1}.

@item win_func
Set window function.

It accepts the following values:
@table @samp
@item rect
@item bartlett
@item hann
@item hanning
@item hamming
@item blackman
@item welch
@item flattop
@item bharris
@item bnuttall
@item bhann
@item sine
@item nuttall
@item lanczos
@item gauss
@item tukey
@item dolph
@item cauchy
@item parzen
@item poisson
@item bohman
@end table

Default value is @code{hann}.

@item orientation
Set orientation of time vs frequency axis. Can be @code{vertical} or
@code{horizontal}. Default is @code{vertical}.

@item overlap
Set ratio of overlap window. Default value is @code{0}.
When value is @code{1} overlap is set to recommended size for specific
window function currently used.

@item gain
Set scale gain for calculating intensity color values.
Default value is @code{1}.

@item data
Set which data to display. Can be @code{magnitude}, default or @code{phase}.

@item rotation
Set color rotation, must be in [-1.0, 1.0] range.
Default value is @code{0}.

@item start
Set start frequency from which to display spectrogram. Default is @code{0}.

@item stop
Set stop frequency to which to display spectrogram. Default is @code{0}.

@item fps
Set upper frame rate limit. Default is @code{auto}, unlimited.

@item legend
Draw time and frequency axes and legends. Default is disabled.
@end table

The usage is very similar to the showwaves filter; see the examples in that
section.

@subsection Examples

@itemize
@item
Large window with logarithmic color scaling:
@example
showspectrum=s=1280x480:scale=log
@end example

@item
Complete example for a colored and sliding spectrum per channel using @command{ffplay}:
@example
ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
             [a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]'
@end example
@end itemize

@section showspectrumpic

Convert input audio to a single video frame, representing the audio frequency
spectrum.

The filter accepts the following options:

@table @option
@item size, s
Specify the video size for the output. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
Default value is @code{4096x2048}.

@item mode
Specify display mode.

It accepts the following values:
@table @samp
@item combined
all channels are displayed in the same row
@item separate
all channels are displayed in separate rows
@end table
Default value is @samp{combined}.

@item color
Specify display color mode.

It accepts the following values:
@table @samp
@item channel
each channel is displayed in a separate color
@item intensity
each channel is displayed using the same color scheme
@item rainbow
each channel is displayed using the rainbow color scheme
@item moreland
each channel is displayed using the moreland color scheme
@item nebulae
each channel is displayed using the nebulae color scheme
@item fire
each channel is displayed using the fire color scheme
@item fiery
each channel is displayed using the fiery color scheme
@item fruit
each channel is displayed using the fruit color scheme
@item cool
each channel is displayed using the cool color scheme
@item magma
each channel is displayed using the magma color scheme
@item green
each channel is displayed using the green color scheme
@item viridis
each channel is displayed using the viridis color scheme
@item plasma
each channel is displayed using the plasma color scheme
@item cividis
each channel is displayed using the cividis color scheme
@item terrain
each channel is displayed using the terrain color scheme
@end table
Default value is @samp{intensity}.

@item scale
Specify scale used for calculating intensity color values.

It accepts the following values:
@table @samp
@item lin
linear
@item sqrt
square root, default
@item cbrt
cubic root
@item log
logarithmic
@item 4thrt
4th root
@item 5thrt
5th root
@end table
Default value is @samp{log}.

@item fscale
Specify frequency scale.

It accepts the following values:
@table @samp
@item lin
linear
@item log
logarithmic
@end table

Default value is @samp{lin}.

@item saturation
Set saturation modifier for displayed colors. Negative values provide
alternative color scheme. @code{0} is no saturation at all.
Saturation must be in [-10.0, 10.0] range.
Default value is @code{1}.

@item win_func
Set window function.

It accepts the following values:
@table @samp
@item rect
@item bartlett
@item hann
@item hanning
@item hamming
@item blackman
@item welch
@item flattop
@item bharris
@item bnuttall
@item bhann
@item sine
@item nuttall
@item lanczos
@item gauss
@item tukey
@item dolph
@item cauchy
@item parzen
@item poisson
@item bohman
@end table
Default value is @code{hann}.

@item orientation
Set orientation of time vs frequency axis. Can be @code{vertical} or
@code{horizontal}. Default is @code{vertical}.

@item gain
Set scale gain for calculating intensity color values.
Default value is @code{1}.

@item legend
Draw time and frequency axes and legends. Default is enabled.

@item rotation
Set color rotation, must be in [-1.0, 1.0] range.
Default value is @code{0}.

@item start
Set start frequency from which to display spectrogram. Default is @code{0}.

@item stop
Set stop frequency to which to display spectrogram. Default is @code{0}.
@end table

@subsection Examples

@itemize
@item
Extract an audio spectrogram of a whole audio track
in a 1024x1024 picture using @command{ffmpeg}:
@example
ffmpeg -i audio.flac -lavfi showspectrumpic=s=1024x1024 spectrogram.png
@end example
@end itemize

@section showvolume

Convert input audio volume to a video output.

The filter accepts the following options:

@table @option
@item rate, r
Set video rate.

@item b
Set border width, allowed range is [0, 5]. Default is 1.

@item w
Set channel width, allowed range is [80, 8192]. Default is 400.

@item h
Set channel height, allowed range is [1, 900]. Default is 20.

@item f
Set fade, allowed range is [0, 1]. Default is 0.95.

@item c
Set volume color expression.

The expression can use the following variables:

@table @option
@item VOLUME
Current max volume of channel in dB.

@item PEAK
Current peak.

@item CHANNEL
Current channel number, starting from 0.
@end table

@item t
If set, displays channel names. Default is enabled.

@item v
If set, displays volume values. Default is enabled.

@item o
Set orientation, can be horizontal: @code{h} or vertical: @code{v},
default is @code{h}.

@item s
Set step size, allowed range is [0, 5]. Default is 0, which means
step is disabled.

@item p
Set background opacity, allowed range is [0, 1]. Default is 0.

@item m
Set metering mode, can be peak: @code{p} or rms: @code{r},
default is @code{p}.

@item ds
Set display scale, can be linear: @code{lin} or log: @code{log},
default is @code{lin}.

@item dm
In second.
If set to > 0., display a line for the max level
in the previous seconds.
default is disabled: @code{0.}

@item dmc
The color of the max line. Use when @code{dm} option is set to > 0.
default is: @code{orange}
@end table

@section showwaves

Convert input audio to a video output, representing the samples waves.

The filter accepts the following options:

@table @option
@item size, s
Specify the video size for the output. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
Default value is @code{600x240}.

@item mode
Set display mode.

Available values are:
@table @samp
@item point
Draw a point for each sample.

@item line
Draw a vertical line for each sample.

@item p2p
Draw a point for each sample and a line between them.

@item cline
Draw a centered vertical line for each sample.
@end table

Default value is @code{point}.

@item n
Set the number of samples which are printed on the same column. A
larger value will decrease the frame rate. Must be a positive
integer. This option can be set only if the value for @var{rate}
is not explicitly specified.

@item rate, r
Set the (approximate) output frame rate. This is done by setting the
option @var{n}. Default value is "25".

@item split_channels
Set if channels should be drawn separately or overlap. Default value is 0.

@item colors
Set colors separated by '|' which are going to be used for drawing of each channel.

@item scale
Set amplitude scale.

Available values are:
@table @samp
@item lin
Linear.

@item log
Logarithmic.

@item sqrt
Square root.

@item cbrt
Cubic root.
@end table

Default is linear.

@item draw
Set the draw mode. This is mostly useful to set for high @var{n}.

Available values are:
@table @samp
@item scale
Scale pixel values for each drawn sample.

@item full
Draw every sample directly.
@end table

Default value is @code{scale}.
@end table

@subsection Examples

@itemize
@item
Output the input file audio and the corresponding video representation
at the same time:
@example
amovie=a.mp3,asplit[out0],showwaves[out1]
@end example

@item
Create a synthetic signal and show it with showwaves, forcing a
frame rate of 30 frames per second:
@example
aevalsrc=sin(1*2*PI*t)*sin(880*2*PI*t):cos(2*PI*200*t),asplit[out0],showwaves=r=30[out1]
@end example
@end itemize

@section showwavespic

Convert input audio to a single video frame, representing the samples waves.

The filter accepts the following options:

@table @option
@item size, s
Specify the video size for the output. For the syntax of this option, check the
@ref{video size syntax,,"Video size" section in the ffmpeg-utils manual,ffmpeg-utils}.
Default value is @code{600x240}.

@item split_channels
Set if channels should be drawn separately or overlap. Default value is 0.

@item colors
Set colors separated by '|' which are going to be used for drawing of each channel.

@item scale
Set amplitude scale.

Available values are:
@table @samp
@item lin
Linear.

@item log
Logarithmic.

@item sqrt
Square root.

@item cbrt
Cubic root.
@end table

Default is linear.

@item draw
Set the draw mode.

Available values are:
@table @samp
@item scale
Scale pixel values for each drawn sample.

@item full
Draw every sample directly.
@end table

Default value is @code{scale}.

@item filter
Set the filter mode.

Available values are:
@table @samp
@item average
Use average samples values for each drawn sample.

@item peak
Use peak samples values for each drawn sample.
@end table

Default value is @code{average}.
@end table

@subsection Examples

@itemize
@item
Extract a channel split representation of the wave form of a whole audio track
in a 1024x800 picture using @command{ffmpeg}:
@example
ffmpeg -i audio.flac -lavfi showwavespic=split_channels=1:s=1024x800 waveform.png
@end example
@end itemize

@section sidedata, asidedata

Delete frame side data, or select frames based on it.

This filter accepts the following options:

@table @option
@item mode
Set mode of operation of the filter.

Can be one of the following:

@table @samp
@item select
Select every frame with side data of @code{type}.

@item delete
Delete side data of @code{type}. If @code{type} is not set, delete all side
data in the frame.

@end table

@item type
Set side data type used with all modes. Must be set for @code{select} mode. For
the list of frame side data types, refer to the @code{AVFrameSideDataType} enum
in @file{libavutil/frame.h}. For example, to choose
@code{AV_FRAME_DATA_PANSCAN} side data, you must specify @code{PANSCAN}.

@end table

@section spectrumsynth

Synthesize audio from 2 input video spectrums, first input stream represents
magnitude across time and second represents phase across time.
The filter will transform from frequency domain as displayed in videos back
to time domain as presented in audio output.

This filter is primarily created for reversing processed @ref{showspectrum}
filter outputs, but can synthesize sound from other spectrograms too.
But in such case results are going to be poor if the phase data is not
available, because in such cases phase data need to be recreated, usually
it's just recreated from random noise.
For best results use gray only output (@code{channel} color mode in
@ref{showspectrum} filter) and @code{log} scale for magnitude video and
@code{lin} scale for phase video. To produce phase, for 2nd video, use
@code{data} option. Inputs videos should generally use @code{fullframe}
slide mode as that saves resources needed for decoding video.

The filter accepts the following options:

@table @option
@item sample_rate
Specify sample rate of output audio, the sample rate of audio from which
spectrum was generated may differ.

@item channels
Set number of channels represented in input video spectrums.

@item scale
Set scale which was used when generating magnitude input spectrum.
Can be @code{lin} or @code{log}. Default is @code{log}.

@item slide
Set slide which was used when generating inputs spectrums.
Can be @code{replace}, @code{scroll}, @code{fullframe} or @code{rscroll}.
Default is @code{fullframe}.

@item win_func
Set window function used for resynthesis.

@item overlap
Set window overlap. In range @code{[0, 1]}. Default is @code{1},
which means optimal overlap for selected window function will be picked.

@item orientation
Set orientation of input videos. Can be @code{vertical} or @code{horizontal}.
Default is @code{vertical}.
@end table

@subsection Examples

@itemize
@item
First create magnitude and phase videos from audio, assuming audio is stereo with 44100 sample rate,
then resynthesize videos back to audio with spectrumsynth:
@example
ffmpeg -i input.flac -lavfi showspectrum=mode=separate:scale=log:overlap=0.875:color=channel:slide=fullframe:data=magnitude -an -c:v rawvideo magnitude.nut
ffmpeg -i input.flac -lavfi showspectrum=mode=separate:scale=lin:overlap=0.875:color=channel:slide=fullframe:data=phase -an -c:v rawvideo phase.nut
ffmpeg -i magnitude.nut -i phase.nut -lavfi spectrumsynth=channels=2:sample_rate=44100:win_func=hann:overlap=0.875:slide=fullframe output.flac
@end example
@end itemize

@section split, asplit

Split input into several identical outputs.

@code{asplit} works with audio input, @code{split} with video.

The filter accepts a single parameter which specifies the number of outputs. If
unspecified, it defaults to 2.

@subsection Examples

@itemize
@item
Create two separate outputs from the same input:
@example
[in] split [out0][out1]
@end example

@item
To create 3 or more outputs, you need to specify the number of
outputs, like in:
@example
[in] asplit=3 [out0][out1][out2]
@end example

@item
Create two separate outputs from the same input, one cropped and
one padded:
@example
[in] split [splitout1][splitout2];
[splitout1] crop=100:100:0:0    [cropout];
[splitout2] pad=200:200:100:100 [padout];
@end example

@item
Create 5 copies of the input audio with @command{ffmpeg}:
@example
ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT
@end example
@end itemize

@section zmq, azmq

Receive commands sent through a libzmq client, and forward them to
filters in the filtergraph.

@code{zmq} and @code{azmq} work as a pass-through filters. @code{zmq}
must be inserted between two video filters, @code{azmq} between two
audio filters. Both are capable to send messages to any filter type.

To enable these filters you need to install the libzmq library and
headers and configure FFmpeg with @code{--enable-libzmq}.

For more information about libzmq see:
@url{http://www.zeromq.org/}

The @code{zmq} and @code{azmq} filters work as a libzmq server, which
receives messages sent through a network interface defined by the
@option{bind_address} (or the abbreviation "@option{b}") option.
Default value of this option is @file{tcp://localhost:5555}. You may
want to alter this value to your needs, but do not forget to escape any
':' signs (see @ref{filtergraph escaping}).

The received message must be in the form:
@example
@var{TARGET} @var{COMMAND} [@var{ARG}]
@end example

@var{TARGET} specifies the target of the command, usually the name of
the filter class or a specific filter instance name. The default
filter instance name uses the pattern @samp{Parsed_<filter_name>_<index>},
but you can override this by using the @samp{filter_name@@id} syntax
(see @ref{Filtergraph syntax}).

@var{COMMAND} specifies the name of the command for the target filter.

@var{ARG} is optional and specifies the optional argument list for the
given @var{COMMAND}.

Upon reception, the message is processed and the corresponding command
is injected into the filtergraph. Depending on the result, the filter
will send a reply to the client, adopting the format:
@example
@var{ERROR_CODE} @var{ERROR_REASON}
@var{MESSAGE}
@end example

@var{MESSAGE} is optional.

@subsection Examples

Look at @file{tools/zmqsend} for an example of a zmq client which can
be used to send commands processed by these filters.

Consider the following filtergraph generated by @command{ffplay}.
In this example the last overlay filter has an instance name. All other
filters will have default instance names.

@example
ffplay -dumpgraph 1 -f lavfi "
color=s=100x100:c=red  [l];
color=s=100x100:c=blue [r];
nullsrc=s=200x100, zmq [bg];
[bg][l]   overlay     [bg+l];
[bg+l][r] overlay@@my=x=100 "
@end example

To change the color of the left side of the video, the following
command can be used:
@example
echo Parsed_color_0 c yellow | tools/zmqsend
@end example

To change the right side:
@example
echo Parsed_color_1 c pink | tools/zmqsend
@end example

To change the position of the right side:
@example
echo overlay@@my x 150 | tools/zmqsend
@end example


@c man end MULTIMEDIA FILTERS

@chapter Multimedia Sources
@c man begin MULTIMEDIA SOURCES

Below is a description of the currently available multimedia sources.

@section amovie

This is the same as @ref{movie} source, except it selects an audio
stream by default.

@anchor{movie}
@section movie

Read audio and/or video stream(s) from a movie container.

It accepts the following parameters:

@table @option
@item filename
The name of the resource to read (not necessarily a file; it can also be a
device or a stream accessed through some protocol).

@item format_name, f
Specifies the format assumed for the movie to read, and can be either
the name of a container or an input device. If not specified, the
format is guessed from @var{movie_name} or by probing.

@item seek_point, sp
Specifies the seek point in seconds. The frames will be output
starting from this seek point. The parameter is evaluated with
@code{av_strtod}, so the numerical value may be suffixed by an IS
postfix. The default value is "0".

@item streams, s
Specifies the streams to read. Several streams can be specified,
separated by "+". The source will then have as many outputs, in the
same order. The syntax is explained in the @ref{Stream specifiers,,"Stream specifiers"
section in the ffmpeg manual,ffmpeg}. Two special names, "dv" and "da" specify
respectively the default (best suited) video and audio stream. Default
is "dv", or "da" if the filter is called as "amovie".

@item stream_index, si
Specifies the index of the video stream to read. If the value is -1,
the most suitable video stream will be automatically selected. The default
value is "-1". Deprecated. If the filter is called "amovie", it will select
audio instead of video.

@item loop
Specifies how many times to read the stream in sequence.
If the value is 0, the stream will be looped infinitely.
Default value is "1".

Note that when the movie is looped the source timestamps are not
changed, so it will generate non monotonically increasing timestamps.

@item discontinuity
Specifies the time difference between frames above which the point is
considered a timestamp discontinuity which is removed by adjusting the later
timestamps.
@end table

It allows overlaying a second video on top of the main input of
a filtergraph, as shown in this graph:
@example
input -----------> deltapts0 --> overlay --> output
                                    ^
                                    |
movie --> scale--> deltapts1 -------+
@end example
@subsection Examples

@itemize
@item
Skip 3.2 seconds from the start of the AVI file in.avi, and overlay it
on top of the input labelled "in":
@example
movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over];
[in] setpts=PTS-STARTPTS [main];
[main][over] overlay=16:16 [out]
@end example

@item
Read from a video4linux2 device, and overlay it on top of the input
labelled "in":
@example
movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [over];
[in] setpts=PTS-STARTPTS [main];
[main][over] overlay=16:16 [out]
@end example

@item
Read the first video stream and the audio stream with id 0x81 from
dvd.vob; the video is connected to the pad named "video" and the audio is
connected to the pad named "audio":
@example
movie=dvd.vob:s=v:0+#0x81 [video] [audio]
@end example
@end itemize

@subsection Commands

Both movie and amovie support the following commands:
@table @option
@item seek
Perform seek using "av_seek_frame".
The syntax is: seek @var{stream_index}|@var{timestamp}|@var{flags}
@itemize
@item
@var{stream_index}: If stream_index is -1, a default
stream is selected, and @var{timestamp} is automatically converted
from AV_TIME_BASE units to the stream specific time_base.
@item
@var{timestamp}: Timestamp in AVStream.time_base units
or, if no stream is specified, in AV_TIME_BASE units.
@item
@var{flags}: Flags which select direction and seeking mode.
@end itemize

@item get_duration
Get movie duration in AV_TIME_BASE units.

@end table

@c man end MULTIMEDIA SOURCES
