@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 band, t
Specify the thickness of the fuzzy edge of the rectangle (added to
@var{w} and @var{h}). The default value is 1. This option is
deprecated, setting higher values should no longer be necessary and
is not recommended.

@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, and a band of size 10:
@example
delogo=x=0:y=0:w=100:h=77:band=10
@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.

@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
