@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

@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{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 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

@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 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, too
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

@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.
@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
@end itemize

@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 sound 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

@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

@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
@end table
@end table

@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 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 "1".
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 '|'. If not set, @var{real} option is used.

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

@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
@end table

@item win_size
Set window size.

It accepts the following values:
@table @samp
@item w16
@item w32
@item w64
@item w128
@item w256
@item w512
@item w1024
@item w2048
@item w4096
@item w8192
@item w16384
@item w32768
@item w65536
@end table
Default is @code{w4096}

@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="1-clip((b/nb)*b,0,1)"
@end example
@end itemize

@section afir

Apply an arbitrary Frequency Impulse Response filter.

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

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

This filter uses second stream as FIR coefficients.
If second stream holds single channel, it will be used
for all input channels in first stream, otherwise
number of channels in second stream must be same as
number of channels in 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 again
Enable applying gain measured from power of IR.
@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
A '|'-separated list of requested sample formats.

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

@item channel_layouts
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 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 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.

@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

@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
@end table

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

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

@section aloop

Loop audio samples.

The filter accepts the following options:

@table @option
@item loop
Set the number of loops.

@item size
Set maximal number of samples.

@item start
Set first sample of loop.
@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.

@end table

@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 herz.
@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 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}.
@end table

If neither the @option{pad_len} nor the @option{whole_len} 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 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,,the "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 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

@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.1 - 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
Bit_depth
Dynamic_range

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
Bit_depth
Number_of_samples

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.
@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 Bit depth
Overall bit depth of audio. Number of bits used for each sample.

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

@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, 2.0] range.

@subsection Examples

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

@item
To speed up audio to 125% tempo:
@example
atempo=1.25
@end example
@end itemize

@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 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
@end table

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

@item channels, c
Specify which channels to filter, by default all available are filtered.
@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
@end table

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

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

@section bass

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
@end table

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

@item channels, c
Specify which channels to filter, by default all available are filtered.
@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.

@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.

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.

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

@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".
@end table

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.

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

@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 location. 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 distance of
~30 cm between microphones makes one microphone to capture signal in
antiphase to another microphone. That makes the final mix sounding 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.

It 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 degree in 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 level_in
Set input gain. Default is 0.9.

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

@section crystalizer
Simple algorithm to expand audio dynamic range.

The filter accepts the following options:

@table @option
@item i
Sets the intensity of effect (default: 2.0). Must be in range between 0.0
(unchanged sound) to 10.0 (maximum effect).

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

@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 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 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 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 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 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 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 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 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 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 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.
@end table

@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
@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 channels, c
Specify which channels to filter, by default all available are filtered.
@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

@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

@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.
@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 -lavfi-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],[a:0][fl][fr][fc][lfe][bl][br][sl][sr]headphone=FL|FR|FC|LFE|BL|BR|SL|SR"
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
@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 channels, c
Specify which channels to filter, by default all available are filtered.
@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.

@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. To accurately detect true peaks,
the audio stream will be upsampled to 192 kHz unless the normalization mode is linear.
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 linearly if possible.
measured_I, measured_LRA, measured_TP, and measured_thresh must also
to be specified in order to use this mode.
Options are true or false. Default is 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
@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 channels, c
Specify which channels to filter, by default all available are filtered.
@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

@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.

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

@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 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 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 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.

@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

@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 filter accepts the following options:

@table @option
@item duration, d
Set silence duration until notification (default is 2 seconds).

@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.
@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 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 leave_silence
This indicates that @var{stop_duration} length of audio should be left intact
at the beginning of each period of silence.
For example, if you want to remove long pauses between words but do not want
to remove the pauses completely. Default value is @code{0}.

@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 ratio used to calculate size of window 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=1:5: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=0:0:0:-1:1:-90dB
@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.
@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 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.
@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 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

@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 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 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}.
@end table

@section treble

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
@end table

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

@item channels, c
Specify which channels to filter, by default all available are filtered.
@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 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.
@item replaygain_noclip
Prevent clipping by limiting the gain applied.

Default value for @var{replaygain_noclip} is 1.

@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/asrc_abuffer.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 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.

@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 the flite library is 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.speech.cs.cmu.edu/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 and violet. 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 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 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

Since this filter is designed for reconstruction, it operates on frame
sequences without considering timestamps, and terminates when either
input reaches end of stream. This will cause problems if your encoding
pipeline drops frames. If you're trying to apply an image as an
overlay to a video stream, consider the @var{overlay} filter instead.

@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 33. Must be odd
number in range [5, 129].

@item p
Set what planes of frame filter will use for averaging. Default is all.
@end table

@section avgblur

Apply average blur filter.

The filter accepts the following options:

@table @option
@item sizeX
Set horizontal kernel size.

@item planes
Set which planes to filter. By default all planes are filtered.

@item sizeY
Set vertical kernel size, if zero it will be same as @code{sizeX}.
Default is @code{0}.
@end table

@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

@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. Output lines contains the time for the start, end and
duration of the detected black interval expressed in seconds.

In order to display the output lines, you need to set the loglevel at
least to the AV_LOG_INFO value.

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

@section blend, tblend

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 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 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

@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. Accept 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 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 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 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
@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}.
@end table

@subsection Examples

@itemize
@item
Add red color cast to shadows:
@example
colorbalance=rs=.3
@end example
@end itemize

@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

@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

@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]}.
@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

@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 convolution

Apply convolution 3x3 or 5x5 filter.

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 or 25 signed integers.

@item 0rdiv
@item 1rdiv
@item 2rdiv
@item 3rdiv
Set multiplier for calculated value for each plane.

@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.
@end table

@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 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 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{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 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.
@end table

@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

@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 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

@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

@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.

@item opencl
If set to 1, specify using OpenCL capabilities, only available if
FFmpeg was configured with @code{--enable-opencl}. Default value is 0.

@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

@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

@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

@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 "Color" section in the ffmpeg-utils manual. 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. Default value is @code{3}.

See below for the list of accepted constants.
@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=max
@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

@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 "Color" section in the ffmpeg-utils manual. 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.
@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

@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 "Color" section in the ffmpeg-utils manual.

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 "Color" section in the ffmpeg-utils manual.

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 "Color" section in the ffmpeg-utils manual.

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 "Color" section in the ffmpeg-utils manual.

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).

@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
each other, so you can for example specify @code{y=x/dar}.
@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.

@item n, frame_num
The frame number, starting from 0.

@item pict_type
A 1 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{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 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
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

@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.
@end table

Default value is @var{wires}.
@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 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{-2.0} to @code{2.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

@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 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 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 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 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 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
Generate a representative palette 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 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
Generate a representative palette 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{7}.

@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

@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 by a color description specified in the "Color"
section in the ffmpeg-utils manual), 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}

@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. Defauls 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

@section geq

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.
@end table

For functions, if @var{x} and @var{y} are outside the area, the value will be
automatically clipped to the closer edge.

@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{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).

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 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

@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

@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

@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.

@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 accept 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

@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

@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

@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 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.
@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.
@item k1
Coefficient of the quadratic correction term. 0.5 means no correction.
@item k2
Coefficient of the double quadratic correction term. 0.5 means no correction.
@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.

@section libvmaf

Obtain the average VMAF (Video Multi-Method Assessment Fusion)
score between two input videos.

This filter takes two input videos.

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 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}.

On the below examples the input file @file{main.mpg} being processed is
compared with the reference file @file{ref.mpg}.

The filter has following options:

@table @option
@item model_path
Set the model path which is to be used for SVM.
Default value: @code{"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 (xml or json).

@item enable_transform
Enables transform for computing vmaf.

@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.

@item psnr
Enables computing psnr along with vmaf.

@item ssim
Enables computing ssim along with vmaf.

@item ms_ssim
Enables computing ms_ssim along with vmaf.

@item pool
Set the pool method to be used for computing vmaf.
@end table

This filter also supports the @ref{framesync} options.

For example:
@example
ffmpeg -i main.mpg -i ref.mpg -lavfi libvmaf -f null -
@end example

Example with options:
@example
ffmpeg -i main.mpg -i ref.mpg -lavfi libvmaf="psnr=1:enable-transform=1" -f null -
@end example

@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

@section loop

Loop video frames.

The filter accepts the following options:

@table @option
@item loop
Set the number of loops.

@item size
Set maximal size in number of frames.

@item start
Set first frame of loop.
@end table

@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
@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.
@end table
@end table

This filter also supports the @ref{framesync} options.

@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}.

@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

@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 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
@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 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 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

@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

@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 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{5.0}.
@end table

@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 negate

Negate input video.

It accepts an integer in input; if non-zero it negates the
alpha component (if available). The default value in input is 0.

@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.

@item p
Set patch size.

@item pc
Same as @option{p} but for chroma planes.

The default value is @var{0} and means automatic.

@item r
Set research size.

@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
weights trained to minimize absolute error
@item s
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
@end table

Default is @code{new}.

@item fapprox
Set various debugging flags.
@end table

@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 null

Pass the video source unchanged to the output.

@section ocr
Optical Character Recognition

This filter uses Tesseract for optical character recognition.

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}.

@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}
depend 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 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 yuv422
force YUV422 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}.
@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

@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 "Color" section in the ffmpeg-utils manual.

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 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.
@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

@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

@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

@section pseudocolor

Alter frame colors in video with pseudocolors.

This filter accept 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 i
set component to use as base for altering colors
@end table

Each of them 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 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_g, 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

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}.

@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 mac
Set minimal acceptable amplitude change for sync codes detection.
Default is @code{0.2}. Allowed range is @code{[0.001 - 1]}.

@item spw
Set the ratio of width reserved for sync code detection.
Default is @code{0.27}. Allowed range is @code{[0.01 - 0.7]}.

@item mhd
Set the max peaks height difference for sync code detection.
Default is @code{0.1}. Allowed range is @code{[0.0 - 0.5]}.

@item mpd
Set max peaks period difference for sync code detection.
Default is @code{0.1}. Allowed range is @code{[0.0 - 0.5]}.

@item msd
Set the first two max start code bits differences.
Default is @code{0.02}. Allowed range is @code{[0.0 - 0.5]}.

@item bhd
Set the minimum ratio of bits height compared to 3rd start code bit.
Default is @code{0.75}. Allowed range is @code{[0.01 - 1]}.

@item th_w
Set the white color threshold. Default is @code{0.35}. Allowed range is @code{[0.1 - 1]}.

@item th_b
Set the black color threshold. Default is @code{0.15}. Allowed range is @code{[0.0 - 0.5]}.

@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.
@end table

@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.

@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 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

@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 "Color" section in the
ffmpeg-utils manual. 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
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.
@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
Choose automatically.

@item jpeg/full/pc
Set full range (0-255 in case of 8-bit luma).

@item mpeg/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.

@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 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
@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

@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.
@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
@end itemize

@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

@section showinfo

Show a line containing various information for each input video frame.
The input video 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, 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}]".
@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 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 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.

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}.

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

@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
above-below (left eye above, right eye below)

@item abr
above-below (right eye above, left eye below)

@item ab2l
above-below with half height resolution
(left eye above, right eye below)

@item ab2r
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
above-below (left eye above, right eye below)

@item abr
above-below (right eye above, left eye below)

@item ab2l
above-below with half height resolution
(left eye above, right eye below)

@item ab2r
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

@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

@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

@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 transparent green
@code{DejaVu Serif}, use:
@example
subtitles=sub.srt:force_style='FontName=DejaVu Serif,PrimaryColour=&HAA00FF00'
@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

@section swapuv
Swap U & V plane.

@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 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

@section tile

Tile several successive frames together.

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
"Color" section in the ffmpeg-utils manual. The default value of @var{color}
is "black".
@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, vlfp
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, cvlfp
Enable complex vertical low-pass filtering.
This will slightly less reduce interlace 'twitter' and Moire
patterning but better retain detail and subjective sharpness impression.

@end table

Vertical low-pass filtering can only be enabled for @option{mode}
@var{interleave_top} and @var{interleave_bottom}.

@end table

@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 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 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.

@item opencl
If set to 1, specify using OpenCL capabilities, only available if
FFmpeg was configured with @code{--enable-opencl}. Default value is 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

@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 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.
@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
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
@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.
@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

@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 filters of VMAF.

The obtained average motion score is printed through the logging system.

In the below example the input file @file{ref.mpg} is being processed and score
is computed.

@example
ffmpeg -i ref.mpg -lavfi 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 accept 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 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.

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 deint
Specify which frames to deinterlace. Accept 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

@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 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.
@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.
@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{http://www.libretro.com/forums/viewtopic.php?f=6&t=134}.

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

@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. Accept 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 zoompan

Apply Zoom & Pan effect.

This filter accepts the following options:

@table @option
@item zoom, z
Set the zoom expression. 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 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.5 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.5 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
@end itemize

@anchor{zscale}
@section zscale
Scale (resize) the input video, using the z.lib library:
https://github.com/sekrit-twc/zimg.

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.
@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

@table @option
@end table

@c man end 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/vsrc_buffer.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
Specify the optional parameters to be used for the scale filter which
is automatically inserted when an input change is detected in the
input size or format.

@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}[:@var{sws_param}]

@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 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 cound 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 "Video
size" section in the ffmpeg-utils manual. 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

@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 "Color" section in the
ffmpeg-utils manual.
@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{rgbtestsrc}
@anchor{smptebars}
@anchor{smptehdbars}
@anchor{testsrc}
@anchor{testsrc2}
@anchor{yuvtestsrc}
@section allrgb, allyuv, color, haldclutsrc, nullsrc, 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{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 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 color, c
Specify the color of the source, only available in the @code{color}
source. For the syntax of this option, check the "Color" section in the
ffmpeg-utils manual.

@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 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{haldclutsrc} filter.

@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.

@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

For example the following:
@example
testsrc=duration=5.3:size=qcif:rate=10
@end example

will generate a video with a duration of 5.3 seconds, with size
176x144 and a frame rate of 10 frames per second.

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

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

@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

@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 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.
Defauls 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

Convert input audio to a video output, displaying the audio phase.

The filter accepts the following options:

@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

The filter also exports the frame metadata @code{lavfi.aphasemeter.phase} which
represents mean phase of current audio frame. Value is in range @code{[-1, 1]}.
The @code{-1} means left and right channels are completely out of phase and
@code{1} means channels are in phase.

@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 monoaural 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

@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

@section drawgraph, adrawgraph

Draw a graph using input video or audio 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}.

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

@anchor{ebur128}
@section ebur128

EBU R128 scanner filter. This filter takes an audio stream as input and outputs
it unchanged. 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 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).

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.
@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.
@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.
@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.

@end table

@subsection Examples

@itemize
@item
Print all metadata values for frames with key @code{lavfi.singnalstats.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.
@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. 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.
@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
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 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 : in the pattern may be replaced by | 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.

It accepts the following values:
@table @samp
@item w16
@item w32
@item w64
@item w128
@item w256
@item w512
@item w1024
@item w2048
@item w4096
@item w8192
@item w16384
@item w32768
@item w65536
@end table
Default is @code{w2048}

@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
@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.

@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
@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 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
@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}.
@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
@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 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
@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}.
@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.001, 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 @code{horizontal} or @code{vertical},
default is @code{horizontal}.

@item s
Set step size, allowed range s [0, 5]. Default is 0, which means
step is disabled.
@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.
@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.
@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

Sythesize 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
its 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.

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} option.

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.

@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}
@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=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

@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 ``Stream specifiers''
section in the ffmpeg manual. 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
