yading@10: @chapter Filtering Introduction yading@10: @c man begin FILTERING INTRODUCTION yading@10: yading@10: Filtering in FFmpeg is enabled through the libavfilter library. yading@10: yading@10: In libavfilter, a filter can have multiple inputs and multiple yading@10: outputs. yading@10: To illustrate the sorts of things that are possible, we consider the yading@10: following filtergraph. yading@10: yading@10: @example yading@10: input --> split ---------------------> overlay --> output yading@10: | ^ yading@10: | | yading@10: +-----> crop --> vflip -------+ yading@10: @end example yading@10: yading@10: This filtergraph splits the input stream in two streams, sends one yading@10: stream through the crop filter and the vflip filter before merging it yading@10: back with the other stream by overlaying it on top. You can use the yading@10: following command to achieve this: yading@10: yading@10: @example yading@10: ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT yading@10: @end example yading@10: yading@10: The result will be that in output the top half of the video is mirrored yading@10: onto the bottom half. yading@10: yading@10: Filters in the same linear chain are separated by commas, and distinct yading@10: linear chains of filters are separated by semicolons. In our example, yading@10: @var{crop,vflip} are in one linear chain, @var{split} and yading@10: @var{overlay} are separately in another. The points where the linear yading@10: chains join are labelled by names enclosed in square brackets. In the yading@10: example, the split filter generates two outputs that are associated to yading@10: the labels @var{[main]} and @var{[tmp]}. yading@10: yading@10: The stream sent to the second output of @var{split}, labelled as yading@10: @var{[tmp]}, is processed through the @var{crop} filter, which crops yading@10: away the lower half part of the video, and then vertically flipped. The yading@10: @var{overlay} filter takes in input the first unchanged output of the yading@10: split filter (which was labelled as @var{[main]}), and overlay on its yading@10: lower half the output generated by the @var{crop,vflip} filterchain. yading@10: yading@10: Some filters take in input a list of parameters: they are specified yading@10: after the filter name and an equal sign, and are separated from each other yading@10: by a colon. yading@10: yading@10: There exist so-called @var{source filters} that do not have an yading@10: audio/video input, and @var{sink filters} that will not have audio/video yading@10: output. yading@10: yading@10: @c man end FILTERING INTRODUCTION yading@10: yading@10: @chapter graph2dot yading@10: @c man begin GRAPH2DOT yading@10: yading@10: The @file{graph2dot} program included in the FFmpeg @file{tools} yading@10: directory can be used to parse a filtergraph description and issue a yading@10: corresponding textual representation in the dot language. yading@10: yading@10: Invoke the command: yading@10: @example yading@10: graph2dot -h yading@10: @end example yading@10: yading@10: to see how to use @file{graph2dot}. yading@10: yading@10: You can then pass the dot description to the @file{dot} program (from yading@10: the graphviz suite of programs) and obtain a graphical representation yading@10: of the filtergraph. yading@10: yading@10: For example the sequence of commands: yading@10: @example yading@10: echo @var{GRAPH_DESCRIPTION} | \ yading@10: tools/graph2dot -o graph.tmp && \ yading@10: dot -Tpng graph.tmp -o graph.png && \ yading@10: display graph.png yading@10: @end example yading@10: yading@10: can be used to create and display an image representing the graph yading@10: described by the @var{GRAPH_DESCRIPTION} string. Note that this string must be yading@10: a complete self-contained graph, with its inputs and outputs explicitly defined. yading@10: For example if your command line is of the form: yading@10: @example yading@10: ffmpeg -i infile -vf scale=640:360 outfile yading@10: @end example yading@10: your @var{GRAPH_DESCRIPTION} string will need to be of the form: yading@10: @example yading@10: nullsrc,scale=640:360,nullsink yading@10: @end example yading@10: you may also need to set the @var{nullsrc} parameters and add a @var{format} yading@10: filter in order to simulate a specific input file. yading@10: yading@10: @c man end GRAPH2DOT yading@10: yading@10: @chapter Filtergraph description yading@10: @c man begin FILTERGRAPH DESCRIPTION yading@10: yading@10: A filtergraph is a directed graph of connected filters. It can contain yading@10: cycles, and there can be multiple links between a pair of yading@10: filters. Each link has one input pad on one side connecting it to one yading@10: filter from which it takes its input, and one output pad on the other yading@10: side connecting it to the one filter accepting its output. yading@10: yading@10: Each filter in a filtergraph is an instance of a filter class yading@10: registered in the application, which defines the features and the yading@10: number of input and output pads of the filter. yading@10: yading@10: A filter with no input pads is called a "source", a filter with no yading@10: output pads is called a "sink". yading@10: yading@10: @anchor{Filtergraph syntax} yading@10: @section Filtergraph syntax yading@10: yading@10: A filtergraph can be represented using a textual representation, which is yading@10: recognized by the @option{-filter}/@option{-vf} and @option{-filter_complex} yading@10: options in @command{ffmpeg} and @option{-vf} in @command{ffplay}, and by the yading@10: @code{avfilter_graph_parse()}/@code{avfilter_graph_parse2()} function defined in yading@10: @file{libavfilter/avfilter.h}. yading@10: yading@10: A filterchain consists of a sequence of connected filters, each one yading@10: connected to the previous one in the sequence. A filterchain is yading@10: represented by a list of ","-separated filter descriptions. yading@10: yading@10: A filtergraph consists of a sequence of filterchains. A sequence of yading@10: filterchains is represented by a list of ";"-separated filterchain yading@10: descriptions. yading@10: yading@10: A filter is represented by a string of the form: yading@10: [@var{in_link_1}]...[@var{in_link_N}]@var{filter_name}=@var{arguments}[@var{out_link_1}]...[@var{out_link_M}] yading@10: yading@10: @var{filter_name} is the name of the filter class of which the yading@10: described filter is an instance of, and has to be the name of one of yading@10: the filter classes registered in the program. yading@10: The name of the filter class is optionally followed by a string yading@10: "=@var{arguments}". yading@10: yading@10: @var{arguments} is a string which contains the parameters used to yading@10: initialize the filter instance. It may have one of the following forms: yading@10: @itemize yading@10: yading@10: @item yading@10: A ':'-separated list of @var{key=value} pairs. yading@10: yading@10: @item yading@10: A ':'-separated list of @var{value}. In this case, the keys are assumed to be yading@10: the option names in the order they are declared. E.g. the @code{fade} filter yading@10: declares three options in this order -- @option{type}, @option{start_frame} and yading@10: @option{nb_frames}. Then the parameter list @var{in:0:30} means that the value yading@10: @var{in} is assigned to the option @option{type}, @var{0} to yading@10: @option{start_frame} and @var{30} to @option{nb_frames}. yading@10: yading@10: @item yading@10: A ':'-separated list of mixed direct @var{value} and long @var{key=value} yading@10: pairs. The direct @var{value} must precede the @var{key=value} pairs, and yading@10: follow the same constraints order of the previous point. The following yading@10: @var{key=value} pairs can be set in any preferred order. yading@10: yading@10: @end itemize yading@10: yading@10: If the option value itself is a list of items (e.g. the @code{format} filter yading@10: takes a list of pixel formats), the items in the list are usually separated by yading@10: '|'. yading@10: yading@10: The list of arguments can be quoted using the character "'" as initial yading@10: and ending mark, and the character '\' for escaping the characters yading@10: within the quoted text; otherwise the argument string is considered yading@10: terminated when the next special character (belonging to the set yading@10: "[]=;,") is encountered. yading@10: yading@10: The name and arguments of the filter are optionally preceded and yading@10: followed by a list of link labels. yading@10: A link label allows to name a link and associate it to a filter output yading@10: or input pad. The preceding labels @var{in_link_1} yading@10: ... @var{in_link_N}, are associated to the filter input pads, yading@10: the following labels @var{out_link_1} ... @var{out_link_M}, are yading@10: associated to the output pads. yading@10: yading@10: When two link labels with the same name are found in the yading@10: filtergraph, a link between the corresponding input and output pad is yading@10: created. yading@10: yading@10: If an output pad is not labelled, it is linked by default to the first yading@10: unlabelled input pad of the next filter in the filterchain. yading@10: For example in the filterchain: yading@10: @example yading@10: nullsrc, split[L1], [L2]overlay, nullsink yading@10: @end example yading@10: the split filter instance has two output pads, and the overlay filter yading@10: instance two input pads. The first output pad of split is labelled yading@10: "L1", the first input pad of overlay is labelled "L2", and the second yading@10: output pad of split is linked to the second input pad of overlay, yading@10: which are both unlabelled. yading@10: yading@10: In a complete filterchain all the unlabelled filter input and output yading@10: pads must be connected. A filtergraph is considered valid if all the yading@10: filter input and output pads of all the filterchains are connected. yading@10: yading@10: Libavfilter will automatically insert scale filters where format yading@10: conversion is required. It is possible to specify swscale flags yading@10: for those automatically inserted scalers by prepending yading@10: @code{sws_flags=@var{flags};} yading@10: to the filtergraph description. yading@10: yading@10: Follows a BNF description for the filtergraph syntax: yading@10: @example yading@10: @var{NAME} ::= sequence of alphanumeric characters and '_' yading@10: @var{LINKLABEL} ::= "[" @var{NAME} "]" yading@10: @var{LINKLABELS} ::= @var{LINKLABEL} [@var{LINKLABELS}] yading@10: @var{FILTER_ARGUMENTS} ::= sequence of chars (eventually quoted) yading@10: @var{FILTER} ::= [@var{LINKLABELS}] @var{NAME} ["=" @var{FILTER_ARGUMENTS}] [@var{LINKLABELS}] yading@10: @var{FILTERCHAIN} ::= @var{FILTER} [,@var{FILTERCHAIN}] yading@10: @var{FILTERGRAPH} ::= [sws_flags=@var{flags};] @var{FILTERCHAIN} [;@var{FILTERGRAPH}] yading@10: @end example yading@10: yading@10: @section Notes on filtergraph escaping yading@10: yading@10: Some filter arguments require the use of special characters, typically yading@10: @code{:} to separate key=value pairs in a named options list. In this yading@10: case the user should perform a first level escaping when specifying yading@10: the filter arguments. For example, consider the following literal yading@10: string to be embedded in the @ref{drawtext} filter arguments: yading@10: @example yading@10: this is a 'string': may contain one, or more, special characters yading@10: @end example yading@10: yading@10: Since @code{:} is special for the filter arguments syntax, it needs to yading@10: be escaped, so you get: yading@10: @example yading@10: text=this is a \'string\'\: may contain one, or more, special characters yading@10: @end example yading@10: yading@10: A second level of escaping is required when embedding the filter yading@10: arguments in a filtergraph description, in order to escape all the yading@10: filtergraph special characters. Thus the example above becomes: yading@10: @example yading@10: drawtext=text=this is a \\\'string\\\'\\: may contain one\, or more\, special characters yading@10: @end example yading@10: yading@10: Finally an additional level of escaping may be needed when writing the yading@10: filtergraph description in a shell command, which depends on the yading@10: escaping rules of the adopted shell. For example, assuming that yading@10: @code{\} is special and needs to be escaped with another @code{\}, the yading@10: previous string will finally result in: yading@10: @example yading@10: -vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters" yading@10: @end example yading@10: yading@10: Sometimes, it might be more convenient to employ quoting in place of yading@10: escaping. For example the string: yading@10: @example yading@10: Caesar: tu quoque, Brute, fili mi yading@10: @end example yading@10: yading@10: Can be quoted in the filter arguments as: yading@10: @example yading@10: text='Caesar: tu quoque, Brute, fili mi' yading@10: @end example yading@10: yading@10: And finally inserted in a filtergraph like: yading@10: @example yading@10: drawtext=text=\'Caesar: tu quoque\, Brute\, fili mi\' yading@10: @end example yading@10: yading@10: See the ``Quoting and escaping'' section in the ffmpeg-utils manual yading@10: for more information about the escaping and quoting rules adopted by yading@10: FFmpeg. yading@10: yading@10: @c man end FILTERGRAPH DESCRIPTION yading@10: yading@10: @chapter Audio Filters yading@10: @c man begin AUDIO FILTERS yading@10: yading@10: When you configure your FFmpeg build, you can disable any of the yading@10: existing filters using @code{--disable-filters}. yading@10: The configure output will show the audio filters included in your yading@10: build. yading@10: yading@10: Below is a description of the currently available audio filters. yading@10: yading@10: @section aconvert yading@10: yading@10: Convert the input audio format to the specified formats. yading@10: yading@10: @emph{This filter is deprecated. Use @ref{aformat} instead.} yading@10: yading@10: The filter accepts a string of the form: yading@10: "@var{sample_format}:@var{channel_layout}". yading@10: yading@10: @var{sample_format} specifies the sample format, and can be a string or the yading@10: corresponding numeric value defined in @file{libavutil/samplefmt.h}. Use 'p' yading@10: suffix for a planar sample format. yading@10: yading@10: @var{channel_layout} specifies the channel layout, and can be a string yading@10: or the corresponding number value defined in @file{libavutil/channel_layout.h}. yading@10: yading@10: The special parameter "auto", signifies that the filter will yading@10: automatically select the output format depending on the output filter. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Convert input to float, planar, stereo: yading@10: @example yading@10: aconvert=fltp:stereo yading@10: @end example yading@10: yading@10: @item yading@10: Convert input to unsigned 8-bit, automatically select out channel layout: yading@10: @example yading@10: aconvert=u8:auto yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section allpass yading@10: yading@10: Apply a two-pole all-pass filter with central frequency (in Hz) yading@10: @var{frequency}, and filter-width @var{width}. yading@10: An all-pass filter changes the audio's frequency to phase relationship yading@10: without changing its frequency to amplitude relationship. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item frequency, f yading@10: Set frequency in Hz. yading@10: yading@10: @item width_type yading@10: Set method to specify band-width of filter. yading@10: @table @option yading@10: @item h yading@10: Hz yading@10: @item q yading@10: Q-Factor yading@10: @item o yading@10: octave yading@10: @item s yading@10: slope yading@10: @end table yading@10: yading@10: @item width, w yading@10: Specify the band-width of a filter in width_type units. yading@10: @end table yading@10: yading@10: @section highpass yading@10: yading@10: Apply a high-pass filter with 3dB point frequency. yading@10: The filter can be either single-pole, or double-pole (the default). yading@10: The filter roll off at 6dB per pole per octave (20dB per pole per decade). yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item frequency, f yading@10: Set frequency in Hz. Default is 3000. yading@10: yading@10: @item poles, p yading@10: Set number of poles. Default is 2. yading@10: yading@10: @item width_type yading@10: Set method to specify band-width of filter. yading@10: @table @option yading@10: @item h yading@10: Hz yading@10: @item q yading@10: Q-Factor yading@10: @item o yading@10: octave yading@10: @item s yading@10: slope yading@10: @end table yading@10: yading@10: @item width, w yading@10: Specify the band-width of a filter in width_type units. yading@10: Applies only to double-pole filter. yading@10: The default is 0.707q and gives a Butterworth response. yading@10: @end table yading@10: yading@10: @section lowpass yading@10: yading@10: Apply a low-pass filter with 3dB point frequency. yading@10: The filter can be either single-pole or double-pole (the default). yading@10: The filter roll off at 6dB per pole per octave (20dB per pole per decade). yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item frequency, f yading@10: Set frequency in Hz. Default is 500. yading@10: yading@10: @item poles, p yading@10: Set number of poles. Default is 2. yading@10: yading@10: @item width_type yading@10: Set method to specify band-width of filter. yading@10: @table @option yading@10: @item h yading@10: Hz yading@10: @item q yading@10: Q-Factor yading@10: @item o yading@10: octave yading@10: @item s yading@10: slope yading@10: @end table yading@10: yading@10: @item width, w yading@10: Specify the band-width of a filter in width_type units. yading@10: Applies only to double-pole filter. yading@10: The default is 0.707q and gives a Butterworth response. yading@10: @end table yading@10: yading@10: @section bass yading@10: yading@10: Boost or cut the bass (lower) frequencies of the audio using a two-pole yading@10: shelving filter with a response similar to that of a standard yading@10: hi-fi's tone-controls. This is also known as shelving equalisation (EQ). yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item gain, g yading@10: Give the gain at 0 Hz. Its useful range is about -20 yading@10: (for a large cut) to +20 (for a large boost). yading@10: Beware of clipping when using a positive gain. yading@10: yading@10: @item frequency, f yading@10: Set the filter's central frequency and so can be used yading@10: to extend or reduce the frequency range to be boosted or cut. yading@10: The default value is @code{100} Hz. yading@10: yading@10: @item width_type yading@10: Set method to specify band-width of filter. yading@10: @table @option yading@10: @item h yading@10: Hz yading@10: @item q yading@10: Q-Factor yading@10: @item o yading@10: octave yading@10: @item s yading@10: slope yading@10: @end table yading@10: yading@10: @item width, w yading@10: Determine how steep is the filter's shelf transition. yading@10: @end table yading@10: yading@10: @section treble yading@10: yading@10: Boost or cut treble (upper) frequencies of the audio using a two-pole yading@10: shelving filter with a response similar to that of a standard yading@10: hi-fi's tone-controls. This is also known as shelving equalisation (EQ). yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item gain, g yading@10: Give the gain at whichever is the lower of ~22 kHz and the yading@10: Nyquist frequency. Its useful range is about -20 (for a large cut) yading@10: to +20 (for a large boost). Beware of clipping when using a positive gain. yading@10: yading@10: @item frequency, f yading@10: Set the filter's central frequency and so can be used yading@10: to extend or reduce the frequency range to be boosted or cut. yading@10: The default value is @code{3000} Hz. yading@10: yading@10: @item width_type yading@10: Set method to specify band-width of filter. yading@10: @table @option yading@10: @item h yading@10: Hz yading@10: @item q yading@10: Q-Factor yading@10: @item o yading@10: octave yading@10: @item s yading@10: slope yading@10: @end table yading@10: yading@10: @item width, w yading@10: Determine how steep is the filter's shelf transition. yading@10: @end table yading@10: yading@10: @section bandpass yading@10: yading@10: Apply a two-pole Butterworth band-pass filter with central yading@10: frequency @var{frequency}, and (3dB-point) band-width width. yading@10: The @var{csg} option selects a constant skirt gain (peak gain = Q) yading@10: instead of the default: constant 0dB peak gain. yading@10: The filter roll off at 6dB per octave (20dB per decade). yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item frequency, f yading@10: Set the filter's central frequency. Default is @code{3000}. yading@10: yading@10: @item csg yading@10: Constant skirt gain if set to 1. Defaults to 0. yading@10: yading@10: @item width_type yading@10: Set method to specify band-width of filter. yading@10: @table @option yading@10: @item h yading@10: Hz yading@10: @item q yading@10: Q-Factor yading@10: @item o yading@10: octave yading@10: @item s yading@10: slope yading@10: @end table yading@10: yading@10: @item width, w yading@10: Specify the band-width of a filter in width_type units. yading@10: @end table yading@10: yading@10: @section bandreject yading@10: yading@10: Apply a two-pole Butterworth band-reject filter with central yading@10: frequency @var{frequency}, and (3dB-point) band-width @var{width}. yading@10: The filter roll off at 6dB per octave (20dB per decade). yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item frequency, f yading@10: Set the filter's central frequency. Default is @code{3000}. yading@10: yading@10: @item width_type yading@10: Set method to specify band-width of filter. yading@10: @table @option yading@10: @item h yading@10: Hz yading@10: @item q yading@10: Q-Factor yading@10: @item o yading@10: octave yading@10: @item s yading@10: slope yading@10: @end table yading@10: yading@10: @item width, w yading@10: Specify the band-width of a filter in width_type units. yading@10: @end table yading@10: yading@10: @section biquad yading@10: yading@10: Apply a biquad IIR filter with the given coefficients. yading@10: Where @var{b0}, @var{b1}, @var{b2} and @var{a0}, @var{a1}, @var{a2} yading@10: are the numerator and denominator coefficients respectively. yading@10: yading@10: @section equalizer yading@10: yading@10: Apply a two-pole peaking equalisation (EQ) filter. With this yading@10: filter, the signal-level at and around a selected frequency can yading@10: be increased or decreased, whilst (unlike bandpass and bandreject yading@10: filters) that at all other frequencies is unchanged. yading@10: yading@10: In order to produce complex equalisation curves, this filter can yading@10: be given several times, each with a different central frequency. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item frequency, f yading@10: Set the filter's central frequency in Hz. yading@10: yading@10: @item width_type yading@10: Set method to specify band-width of filter. yading@10: @table @option yading@10: @item h yading@10: Hz yading@10: @item q yading@10: Q-Factor yading@10: @item o yading@10: octave yading@10: @item s yading@10: slope yading@10: @end table yading@10: yading@10: @item width, w yading@10: Specify the band-width of a filter in width_type units. yading@10: yading@10: @item gain, g yading@10: Set the required gain or attenuation in dB. yading@10: Beware of clipping when using a positive gain. yading@10: @end table yading@10: yading@10: @section afade yading@10: yading@10: Apply fade-in/out effect to input audio. yading@10: yading@10: A description of the accepted parameters follows. yading@10: yading@10: @table @option yading@10: @item type, t yading@10: Specify the effect type, can be either @code{in} for fade-in, or yading@10: @code{out} for a fade-out effect. Default is @code{in}. yading@10: yading@10: @item start_sample, ss yading@10: Specify the number of the start sample for starting to apply the fade yading@10: effect. Default is 0. yading@10: yading@10: @item nb_samples, ns yading@10: Specify the number of samples for which the fade effect has to last. At yading@10: the end of the fade-in effect the output audio will have the same yading@10: volume as the input audio, at the end of the fade-out transition yading@10: the output audio will be silence. Default is 44100. yading@10: yading@10: @item start_time, st yading@10: Specify time for starting to apply the fade effect. Default is 0. yading@10: The accepted syntax is: yading@10: @example yading@10: [-]HH[:MM[:SS[.m...]]] yading@10: [-]S+[.m...] yading@10: @end example yading@10: See also the function @code{av_parse_time()}. yading@10: If set this option is used instead of @var{start_sample} one. yading@10: yading@10: @item duration, d yading@10: Specify the duration for which the fade effect has to last. Default is 0. yading@10: The accepted syntax is: yading@10: @example yading@10: [-]HH[:MM[:SS[.m...]]] yading@10: [-]S+[.m...] yading@10: @end example yading@10: See also the function @code{av_parse_time()}. yading@10: At the end of the fade-in effect the output audio will have the same yading@10: volume as the input audio, at the end of the fade-out transition yading@10: the output audio will be silence. yading@10: If set this option is used instead of @var{nb_samples} one. yading@10: yading@10: @item curve yading@10: Set curve for fade transition. yading@10: yading@10: It accepts the following values: yading@10: @table @option yading@10: @item tri yading@10: select triangular, linear slope (default) yading@10: @item qsin yading@10: select quarter of sine wave yading@10: @item hsin yading@10: select half of sine wave yading@10: @item esin yading@10: select exponential sine wave yading@10: @item log yading@10: select logarithmic yading@10: @item par yading@10: select inverted parabola yading@10: @item qua yading@10: select quadratic yading@10: @item cub yading@10: select cubic yading@10: @item squ yading@10: select square root yading@10: @item cbr yading@10: select cubic root yading@10: @end table yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Fade in first 15 seconds of audio: yading@10: @example yading@10: afade=t=in:ss=0:d=15 yading@10: @end example yading@10: yading@10: @item yading@10: Fade out last 25 seconds of a 900 seconds audio: yading@10: @example yading@10: afade=t=out:ss=875:d=25 yading@10: @end example yading@10: @end itemize yading@10: yading@10: @anchor{aformat} yading@10: @section aformat yading@10: yading@10: Set output format constraints for the input audio. The framework will yading@10: negotiate the most appropriate format to minimize conversions. yading@10: yading@10: The filter accepts the following named parameters: yading@10: @table @option yading@10: yading@10: @item sample_fmts yading@10: A '|'-separated list of requested sample formats. yading@10: yading@10: @item sample_rates yading@10: A '|'-separated list of requested sample rates. yading@10: yading@10: @item channel_layouts yading@10: A '|'-separated list of requested channel layouts. yading@10: yading@10: @end table yading@10: yading@10: If a parameter is omitted, all values are allowed. yading@10: yading@10: For example to force the output to either unsigned 8-bit or signed 16-bit stereo: yading@10: @example yading@10: aformat=sample_fmts=u8|s16:channel_layouts=stereo yading@10: @end example yading@10: yading@10: @section amerge yading@10: yading@10: Merge two or more audio streams into a single multi-channel stream. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item inputs yading@10: Set the number of inputs. Default is 2. yading@10: yading@10: @end table yading@10: yading@10: If the channel layouts of the inputs are disjoint, and therefore compatible, yading@10: the channel layout of the output will be set accordingly and the channels yading@10: will be reordered as necessary. If the channel layouts of the inputs are not yading@10: disjoint, the output will have all the channels of the first input then all yading@10: the channels of the second input, in that order, and the channel layout of yading@10: the output will be the default value corresponding to the total number of yading@10: channels. yading@10: yading@10: For example, if the first input is in 2.1 (FL+FR+LF) and the second input yading@10: is FC+BL+BR, then the output will be in 5.1, with the channels in the yading@10: following order: a1, a2, b1, a3, b2, b3 (a1 is the first channel of the yading@10: first input, b1 is the first channel of the second input). yading@10: yading@10: On the other hand, if both input are in stereo, the output channels will be yading@10: in the default order: a1, a2, b1, b2, and the channel layout will be yading@10: arbitrarily set to 4.0, which may or may not be the expected value. yading@10: yading@10: All inputs must have the same sample rate, and format. yading@10: yading@10: If inputs do not have the same duration, the output will stop with the yading@10: shortest. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Merge two mono files into a stereo stream: yading@10: @example yading@10: amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge yading@10: @end example yading@10: yading@10: @item yading@10: Multiple merges assuming 1 video stream and 6 audio streams in @file{input.mkv}: yading@10: @example yading@10: 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 yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section amix yading@10: yading@10: Mixes multiple audio inputs into a single output. yading@10: yading@10: For example yading@10: @example yading@10: ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT yading@10: @end example yading@10: will mix 3 input audio streams to a single output with the same duration as the yading@10: first input and a dropout transition time of 3 seconds. yading@10: yading@10: The filter accepts the following named parameters: yading@10: @table @option yading@10: yading@10: @item inputs yading@10: Number of inputs. If unspecified, it defaults to 2. yading@10: yading@10: @item duration yading@10: How to determine the end-of-stream. yading@10: @table @option yading@10: yading@10: @item longest yading@10: Duration of longest input. (default) yading@10: yading@10: @item shortest yading@10: Duration of shortest input. yading@10: yading@10: @item first yading@10: Duration of first input. yading@10: yading@10: @end table yading@10: yading@10: @item dropout_transition yading@10: Transition time, in seconds, for volume renormalization when an input yading@10: stream ends. The default value is 2 seconds. yading@10: yading@10: @end table yading@10: yading@10: @section anull yading@10: yading@10: Pass the audio source unchanged to the output. yading@10: yading@10: @section apad yading@10: yading@10: Pad the end of a audio stream with silence, this can be used together with yading@10: -shortest to extend audio streams to the same length as the video stream. yading@10: yading@10: @section aphaser yading@10: Add a phasing effect to the input audio. yading@10: yading@10: A phaser filter creates series of peaks and troughs in the frequency spectrum. yading@10: The position of the peaks and troughs are modulated so that they vary over time, creating a sweeping effect. yading@10: yading@10: A description of the accepted parameters follows. yading@10: yading@10: @table @option yading@10: @item in_gain yading@10: Set input gain. Default is 0.4. yading@10: yading@10: @item out_gain yading@10: Set output gain. Default is 0.74 yading@10: yading@10: @item delay yading@10: Set delay in milliseconds. Default is 3.0. yading@10: yading@10: @item decay yading@10: Set decay. Default is 0.4. yading@10: yading@10: @item speed yading@10: Set modulation speed in Hz. Default is 0.5. yading@10: yading@10: @item type yading@10: Set modulation type. Default is triangular. yading@10: yading@10: It accepts the following values: yading@10: @table @samp yading@10: @item triangular, t yading@10: @item sinusoidal, s yading@10: @end table yading@10: @end table yading@10: yading@10: @anchor{aresample} yading@10: @section aresample yading@10: yading@10: Resample the input audio to the specified parameters, using the yading@10: libswresample library. If none are specified then the filter will yading@10: automatically convert between its input and output. yading@10: yading@10: This filter is also able to stretch/squeeze the audio data to make it match yading@10: the timestamps or to inject silence / cut out audio to make it match the yading@10: timestamps, do a combination of both or do neither. yading@10: yading@10: The filter accepts the syntax yading@10: [@var{sample_rate}:]@var{resampler_options}, where @var{sample_rate} yading@10: expresses a sample rate and @var{resampler_options} is a list of yading@10: @var{key}=@var{value} pairs, separated by ":". See the yading@10: ffmpeg-resampler manual for the complete list of supported options. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Resample the input audio to 44100Hz: yading@10: @example yading@10: aresample=44100 yading@10: @end example yading@10: yading@10: @item yading@10: Stretch/squeeze samples to the given timestamps, with a maximum of 1000 yading@10: samples per second compensation: yading@10: @example yading@10: aresample=async=1000 yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section asetnsamples yading@10: yading@10: Set the number of samples per each output audio frame. yading@10: yading@10: The last output packet may contain a different number of samples, as yading@10: the filter will flush all the remaining samples when the input audio yading@10: signal its end. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item nb_out_samples, n yading@10: Set the number of frames per each output audio frame. The number is yading@10: intended as the number of samples @emph{per each channel}. yading@10: Default value is 1024. yading@10: yading@10: @item pad, p yading@10: If set to 1, the filter will pad the last audio frame with zeroes, so yading@10: that the last frame will contain the same number of samples as the yading@10: previous ones. Default value is 1. yading@10: @end table yading@10: yading@10: For example, to set the number of per-frame samples to 1234 and yading@10: disable padding for the last frame, use: yading@10: @example yading@10: asetnsamples=n=1234:p=0 yading@10: @end example yading@10: yading@10: @section ashowinfo yading@10: yading@10: Show a line containing various information for each input audio frame. yading@10: The input audio is not modified. yading@10: yading@10: The shown line contains a sequence of key/value pairs of the form yading@10: @var{key}:@var{value}. yading@10: yading@10: A description of each shown parameter follows: yading@10: yading@10: @table @option yading@10: @item n yading@10: sequential number of the input frame, starting from 0 yading@10: yading@10: @item pts yading@10: Presentation timestamp of the input frame, in time base units; the time base yading@10: depends on the filter input pad, and is usually 1/@var{sample_rate}. yading@10: yading@10: @item pts_time yading@10: presentation timestamp of the input frame in seconds yading@10: yading@10: @item pos yading@10: position of the frame in the input stream, -1 if this information in yading@10: unavailable and/or meaningless (for example in case of synthetic audio) yading@10: yading@10: @item fmt yading@10: sample format yading@10: yading@10: @item chlayout yading@10: channel layout yading@10: yading@10: @item rate yading@10: sample rate for the audio frame yading@10: yading@10: @item nb_samples yading@10: number of samples (per channel) in the frame yading@10: yading@10: @item checksum yading@10: Adler-32 checksum (printed in hexadecimal) of the audio data. For planar audio yading@10: the data is treated as if all the planes were concatenated. yading@10: yading@10: @item plane_checksums yading@10: A list of Adler-32 checksums for each data plane. yading@10: @end table yading@10: yading@10: @section astreamsync yading@10: yading@10: Forward two audio streams and control the order the buffers are forwarded. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item expr, e yading@10: Set the expression deciding which stream should be yading@10: forwarded next: if the result is negative, the first stream is forwarded; if yading@10: the result is positive or zero, the second stream is forwarded. It can use yading@10: the following variables: yading@10: yading@10: @table @var yading@10: @item b1 b2 yading@10: number of buffers forwarded so far on each stream yading@10: @item s1 s2 yading@10: number of samples forwarded so far on each stream yading@10: @item t1 t2 yading@10: current timestamp of each stream yading@10: @end table yading@10: yading@10: The default value is @code{t1-t2}, which means to always forward the stream yading@10: that has a smaller timestamp. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: Stress-test @code{amerge} by randomly sending buffers on the wrong yading@10: input, while avoiding too much of a desynchronization: yading@10: @example yading@10: amovie=file.ogg [a] ; amovie=file.mp3 [b] ; yading@10: [a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ; yading@10: [a2] [b2] amerge yading@10: @end example yading@10: yading@10: @section atempo yading@10: yading@10: Adjust audio tempo. yading@10: yading@10: The filter accepts exactly one parameter, the audio tempo. If not yading@10: specified then the filter will assume nominal 1.0 tempo. Tempo must yading@10: be in the [0.5, 2.0] range. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Slow down audio to 80% tempo: yading@10: @example yading@10: atempo=0.8 yading@10: @end example yading@10: yading@10: @item yading@10: To speed up audio to 125% tempo: yading@10: @example yading@10: atempo=1.25 yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section earwax yading@10: yading@10: Make audio easier to listen to on headphones. yading@10: yading@10: This filter adds `cues' to 44.1kHz stereo (i.e. audio CD format) audio yading@10: so that when listened to on headphones the stereo image is moved from yading@10: inside your head (standard for headphones) to outside and in front of yading@10: the listener (standard for speakers). yading@10: yading@10: Ported from SoX. yading@10: yading@10: @section pan yading@10: yading@10: Mix channels with specific gain levels. The filter accepts the output yading@10: channel layout followed by a set of channels definitions. yading@10: yading@10: This filter is also designed to remap efficiently the channels of an audio yading@10: stream. yading@10: yading@10: The filter accepts parameters of the form: yading@10: "@var{l}:@var{outdef}:@var{outdef}:..." yading@10: yading@10: @table @option yading@10: @item l yading@10: output channel layout or number of channels yading@10: yading@10: @item outdef yading@10: output channel specification, of the form: yading@10: "@var{out_name}=[@var{gain}*]@var{in_name}[+[@var{gain}*]@var{in_name}...]" yading@10: yading@10: @item out_name yading@10: output channel to define, either a channel name (FL, FR, etc.) or a channel yading@10: number (c0, c1, etc.) yading@10: yading@10: @item gain yading@10: multiplicative coefficient for the channel, 1 leaving the volume unchanged yading@10: yading@10: @item in_name yading@10: input channel to use, see out_name for details; it is not possible to mix yading@10: named and numbered input channels yading@10: @end table yading@10: yading@10: If the `=' in a channel specification is replaced by `<', then the gains for yading@10: that specification will be renormalized so that the total is 1, thus yading@10: avoiding clipping noise. yading@10: yading@10: @subsection Mixing examples yading@10: yading@10: For example, if you want to down-mix from stereo to mono, but with a bigger yading@10: factor for the left channel: yading@10: @example yading@10: pan=1:c0=0.9*c0+0.1*c1 yading@10: @end example yading@10: yading@10: A customized down-mix to stereo that works automatically for 3-, 4-, 5- and yading@10: 7-channels surround: yading@10: @example yading@10: pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR yading@10: @end example yading@10: yading@10: Note that @command{ffmpeg} integrates a default down-mix (and up-mix) system yading@10: that should be preferred (see "-ac" option) unless you have very specific yading@10: needs. yading@10: yading@10: @subsection Remapping examples yading@10: yading@10: The channel remapping will be effective if, and only if: yading@10: yading@10: @itemize yading@10: @item gain coefficients are zeroes or ones, yading@10: @item only one input per channel output, yading@10: @end itemize yading@10: yading@10: If all these conditions are satisfied, the filter will notify the user ("Pure yading@10: channel mapping detected"), and use an optimized and lossless method to do the yading@10: remapping. yading@10: yading@10: For example, if you have a 5.1 source and want a stereo audio stream by yading@10: dropping the extra channels: yading@10: @example yading@10: pan="stereo: c0=FL : c1=FR" yading@10: @end example yading@10: yading@10: Given the same source, you can also switch front left and front right channels yading@10: and keep the input channel layout: yading@10: @example yading@10: pan="5.1: c0=c1 : c1=c0 : c2=c2 : c3=c3 : c4=c4 : c5=c5" yading@10: @end example yading@10: yading@10: If the input is a stereo audio stream, you can mute the front left channel (and yading@10: still keep the stereo channel layout) with: yading@10: @example yading@10: pan="stereo:c1=c1" yading@10: @end example yading@10: yading@10: Still with a stereo audio stream input, you can copy the right channel in both yading@10: front left and right: yading@10: @example yading@10: pan="stereo: c0=FR : c1=FR" yading@10: @end example yading@10: yading@10: @section silencedetect yading@10: yading@10: Detect silence in an audio stream. yading@10: yading@10: This filter logs a message when it detects that the input audio volume is less yading@10: or equal to a noise tolerance value for a duration greater or equal to the yading@10: minimum detected noise duration. yading@10: yading@10: The printed times and duration are expressed in seconds. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item duration, d yading@10: Set silence duration until notification (default is 2 seconds). yading@10: yading@10: @item noise, n yading@10: Set noise tolerance. Can be specified in dB (in case "dB" is appended to the yading@10: specified value) or amplitude ratio. Default is -60dB, or 0.001. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Detect 5 seconds of silence with -50dB noise tolerance: yading@10: @example yading@10: silencedetect=n=-50dB:d=5 yading@10: @end example yading@10: yading@10: @item yading@10: Complete example with @command{ffmpeg} to detect silence with 0.0001 noise yading@10: tolerance in @file{silence.mp3}: yading@10: @example yading@10: ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null - yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section asyncts yading@10: Synchronize audio data with timestamps by squeezing/stretching it and/or yading@10: dropping samples/adding silence when needed. yading@10: yading@10: This filter is not built by default, please use @ref{aresample} to do squeezing/stretching. yading@10: yading@10: The filter accepts the following named parameters: yading@10: @table @option yading@10: yading@10: @item compensate yading@10: Enable stretching/squeezing the data to make it match the timestamps. Disabled yading@10: by default. When disabled, time gaps are covered with silence. yading@10: yading@10: @item min_delta yading@10: Minimum difference between timestamps and audio data (in seconds) to trigger yading@10: adding/dropping samples. Default value is 0.1. If you get non-perfect sync with yading@10: this filter, try setting this parameter to 0. yading@10: yading@10: @item max_comp yading@10: Maximum compensation in samples per second. Relevant only with compensate=1. yading@10: Default value 500. yading@10: yading@10: @item first_pts yading@10: Assume the first pts should be this value. The time base is 1 / sample rate. yading@10: This allows for padding/trimming at the start of stream. By default, no yading@10: assumption is made about the first frame's expected pts, so no padding or yading@10: trimming is done. For example, this could be set to 0 to pad the beginning with yading@10: silence if an audio stream starts after the video stream or to trim any samples yading@10: with a negative pts due to encoder delay. yading@10: yading@10: @end table yading@10: yading@10: @section channelsplit yading@10: Split each channel in input audio stream into a separate output stream. yading@10: yading@10: This filter accepts the following named parameters: yading@10: @table @option yading@10: @item channel_layout yading@10: Channel layout of the input stream. Default is "stereo". yading@10: @end table yading@10: yading@10: For example, assuming a stereo input MP3 file yading@10: @example yading@10: ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv yading@10: @end example yading@10: will create an output Matroska file with two audio streams, one containing only yading@10: the left channel and the other the right channel. yading@10: yading@10: To split a 5.1 WAV file into per-channel files yading@10: @example yading@10: ffmpeg -i in.wav -filter_complex yading@10: 'channelsplit=channel_layout=5.1[FL][FR][FC][LFE][SL][SR]' yading@10: -map '[FL]' front_left.wav -map '[FR]' front_right.wav -map '[FC]' yading@10: front_center.wav -map '[LFE]' lfe.wav -map '[SL]' side_left.wav -map '[SR]' yading@10: side_right.wav yading@10: @end example yading@10: yading@10: @section channelmap yading@10: Remap input channels to new locations. yading@10: yading@10: This filter accepts the following named parameters: yading@10: @table @option yading@10: @item channel_layout yading@10: Channel layout of the output stream. yading@10: yading@10: @item map yading@10: Map channels from input to output. The argument is a '|'-separated list of yading@10: mappings, each in the @code{@var{in_channel}-@var{out_channel}} or yading@10: @var{in_channel} form. @var{in_channel} can be either the name of the input yading@10: channel (e.g. FL for front left) or its index in the input channel layout. yading@10: @var{out_channel} is the name of the output channel or its index in the output yading@10: channel layout. If @var{out_channel} is not given then it is implicitly an yading@10: index, starting with zero and increasing by one for each mapping. yading@10: @end table yading@10: yading@10: If no mapping is present, the filter will implicitly map input channels to yading@10: output channels preserving index. yading@10: yading@10: For example, assuming a 5.1+downmix input MOV file yading@10: @example yading@10: ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav yading@10: @end example yading@10: will create an output WAV file tagged as stereo from the downmix channels of yading@10: the input. yading@10: yading@10: To fix a 5.1 WAV improperly encoded in AAC's native channel order yading@10: @example yading@10: ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:channel_layout=5.1' out.wav yading@10: @end example yading@10: yading@10: @section join yading@10: Join multiple input streams into one multi-channel stream. yading@10: yading@10: The filter accepts the following named parameters: yading@10: @table @option yading@10: yading@10: @item inputs yading@10: Number of input streams. Defaults to 2. yading@10: yading@10: @item channel_layout yading@10: Desired output channel layout. Defaults to stereo. yading@10: yading@10: @item map yading@10: Map channels from inputs to output. The argument is a '|'-separated list of yading@10: mappings, each in the @code{@var{input_idx}.@var{in_channel}-@var{out_channel}} yading@10: form. @var{input_idx} is the 0-based index of the input stream. @var{in_channel} yading@10: can be either the name of the input channel (e.g. FL for front left) or its yading@10: index in the specified input stream. @var{out_channel} is the name of the output yading@10: channel. yading@10: @end table yading@10: yading@10: The filter will attempt to guess the mappings when those are not specified yading@10: explicitly. It does so by first trying to find an unused matching input channel yading@10: and if that fails it picks the first unused input channel. yading@10: yading@10: E.g. to join 3 inputs (with properly set channel layouts) yading@10: @example yading@10: ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT yading@10: @end example yading@10: yading@10: To build a 5.1 output from 6 single-channel streams: yading@10: @example yading@10: ffmpeg -i fl -i fr -i fc -i sl -i sr -i lfe -filter_complex yading@10: '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' yading@10: out yading@10: @end example yading@10: yading@10: @section resample yading@10: Convert the audio sample format, sample rate and channel layout. This filter is yading@10: not meant to be used directly. yading@10: yading@10: @section volume yading@10: yading@10: Adjust the input audio volume. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item volume yading@10: Expresses how the audio volume will be increased or decreased. yading@10: yading@10: Output values are clipped to the maximum value. yading@10: yading@10: The output audio volume is given by the relation: yading@10: @example yading@10: @var{output_volume} = @var{volume} * @var{input_volume} yading@10: @end example yading@10: yading@10: Default value for @var{volume} is 1.0. yading@10: yading@10: @item precision yading@10: Set the mathematical precision. yading@10: yading@10: This determines which input sample formats will be allowed, which affects the yading@10: precision of the volume scaling. yading@10: yading@10: @table @option yading@10: @item fixed yading@10: 8-bit fixed-point; limits input sample format to U8, S16, and S32. yading@10: @item float yading@10: 32-bit floating-point; limits input sample format to FLT. (default) yading@10: @item double yading@10: 64-bit floating-point; limits input sample format to DBL. yading@10: @end table yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Halve the input audio volume: yading@10: @example yading@10: volume=volume=0.5 yading@10: volume=volume=1/2 yading@10: volume=volume=-6.0206dB yading@10: @end example yading@10: yading@10: In all the above example the named key for @option{volume} can be yading@10: omitted, for example like in: yading@10: @example yading@10: volume=0.5 yading@10: @end example yading@10: yading@10: @item yading@10: Increase input audio power by 6 decibels using fixed-point precision: yading@10: @example yading@10: volume=volume=6dB:precision=fixed yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section volumedetect yading@10: yading@10: Detect the volume of the input video. yading@10: yading@10: The filter has no parameters. The input is not modified. Statistics about yading@10: the volume will be printed in the log when the input stream end is reached. yading@10: yading@10: In particular it will show the mean volume (root mean square), maximum yading@10: volume (on a per-sample basis), and the beginning of an histogram of the yading@10: registered volume values (from the maximum value to a cumulated 1/1000 of yading@10: the samples). yading@10: yading@10: All volumes are in decibels relative to the maximum PCM value. yading@10: yading@10: @subsection Examples yading@10: yading@10: Here is an excerpt of the output: yading@10: @example yading@10: [Parsed_volumedetect_0 @ 0xa23120] mean_volume: -27 dB yading@10: [Parsed_volumedetect_0 @ 0xa23120] max_volume: -4 dB yading@10: [Parsed_volumedetect_0 @ 0xa23120] histogram_4db: 6 yading@10: [Parsed_volumedetect_0 @ 0xa23120] histogram_5db: 62 yading@10: [Parsed_volumedetect_0 @ 0xa23120] histogram_6db: 286 yading@10: [Parsed_volumedetect_0 @ 0xa23120] histogram_7db: 1042 yading@10: [Parsed_volumedetect_0 @ 0xa23120] histogram_8db: 2551 yading@10: [Parsed_volumedetect_0 @ 0xa23120] histogram_9db: 4609 yading@10: [Parsed_volumedetect_0 @ 0xa23120] histogram_10db: 8409 yading@10: @end example yading@10: yading@10: It means that: yading@10: @itemize yading@10: @item yading@10: The mean square energy is approximately -27 dB, or 10^-2.7. yading@10: @item yading@10: The largest sample is at -4 dB, or more precisely between -4 dB and -5 dB. yading@10: @item yading@10: There are 6 samples at -4 dB, 62 at -5 dB, 286 at -6 dB, etc. yading@10: @end itemize yading@10: yading@10: In other words, raising the volume by +4 dB does not cause any clipping, yading@10: raising it by +5 dB causes clipping for 6 samples, etc. yading@10: yading@10: @c man end AUDIO FILTERS yading@10: yading@10: @chapter Audio Sources yading@10: @c man begin AUDIO SOURCES yading@10: yading@10: Below is a description of the currently available audio sources. yading@10: yading@10: @section abuffer yading@10: yading@10: Buffer audio frames, and make them available to the filter chain. yading@10: yading@10: This source is mainly intended for a programmatic use, in particular yading@10: through the interface defined in @file{libavfilter/asrc_abuffer.h}. yading@10: yading@10: It accepts the following named parameters: yading@10: yading@10: @table @option yading@10: yading@10: @item time_base yading@10: Timebase which will be used for timestamps of submitted frames. It must be yading@10: either a floating-point number or in @var{numerator}/@var{denominator} form. yading@10: yading@10: @item sample_rate yading@10: The sample rate of the incoming audio buffers. yading@10: yading@10: @item sample_fmt yading@10: The sample format of the incoming audio buffers. yading@10: Either a sample format name or its corresponging integer representation from yading@10: the enum AVSampleFormat in @file{libavutil/samplefmt.h} yading@10: yading@10: @item channel_layout yading@10: The channel layout of the incoming audio buffers. yading@10: Either a channel layout name from channel_layout_map in yading@10: @file{libavutil/channel_layout.c} or its corresponding integer representation yading@10: from the AV_CH_LAYOUT_* macros in @file{libavutil/channel_layout.h} yading@10: yading@10: @item channels yading@10: The number of channels of the incoming audio buffers. yading@10: If both @var{channels} and @var{channel_layout} are specified, then they yading@10: must be consistent. yading@10: yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @example yading@10: abuffer=sample_rate=44100:sample_fmt=s16p:channel_layout=stereo yading@10: @end example yading@10: yading@10: will instruct the source to accept planar 16bit signed stereo at 44100Hz. yading@10: Since the sample format with name "s16p" corresponds to the number yading@10: 6 and the "stereo" channel layout corresponds to the value 0x3, this is yading@10: equivalent to: yading@10: @example yading@10: abuffer=sample_rate=44100:sample_fmt=6:channel_layout=0x3 yading@10: @end example yading@10: yading@10: @section aevalsrc yading@10: yading@10: Generate an audio signal specified by an expression. yading@10: yading@10: This source accepts in input one or more expressions (one for each yading@10: channel), which are evaluated and used to generate a corresponding yading@10: audio signal. yading@10: yading@10: This source accepts the following options: yading@10: yading@10: @table @option yading@10: @item exprs yading@10: Set the '|'-separated expressions list for each separate channel. In case the yading@10: @option{channel_layout} option is not specified, the selected channel layout yading@10: depends on the number of provided expressions. yading@10: yading@10: @item channel_layout, c yading@10: Set the channel layout. The number of channels in the specified layout yading@10: must be equal to the number of specified expressions. yading@10: yading@10: @item duration, d yading@10: Set the minimum duration of the sourced audio. See the function yading@10: @code{av_parse_time()} for the accepted format. yading@10: Note that the resulting duration may be greater than the specified yading@10: duration, as the generated audio is always cut at the end of a yading@10: complete frame. yading@10: yading@10: If not specified, or the expressed duration is negative, the audio is yading@10: supposed to be generated forever. yading@10: yading@10: @item nb_samples, n yading@10: Set the number of samples per channel per each output frame, yading@10: default to 1024. yading@10: yading@10: @item sample_rate, s yading@10: Specify the sample rate, default to 44100. yading@10: @end table yading@10: yading@10: Each expression in @var{exprs} can contain the following constants: yading@10: yading@10: @table @option yading@10: @item n yading@10: number of the evaluated sample, starting from 0 yading@10: yading@10: @item t yading@10: time of the evaluated sample expressed in seconds, starting from 0 yading@10: yading@10: @item s yading@10: sample rate yading@10: yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Generate silence: yading@10: @example yading@10: aevalsrc=0 yading@10: @end example yading@10: yading@10: @item yading@10: Generate a sin signal with frequency of 440 Hz, set sample rate to yading@10: 8000 Hz: yading@10: @example yading@10: aevalsrc="sin(440*2*PI*t):s=8000" yading@10: @end example yading@10: yading@10: @item yading@10: Generate a two channels signal, specify the channel layout (Front yading@10: Center + Back Center) explicitly: yading@10: @example yading@10: aevalsrc="sin(420*2*PI*t)|cos(430*2*PI*t):c=FC|BC" yading@10: @end example yading@10: yading@10: @item yading@10: Generate white noise: yading@10: @example yading@10: aevalsrc="-2+random(0)" yading@10: @end example yading@10: yading@10: @item yading@10: Generate an amplitude modulated signal: yading@10: @example yading@10: aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)" yading@10: @end example yading@10: yading@10: @item yading@10: Generate 2.5 Hz binaural beats on a 360 Hz carrier: yading@10: @example yading@10: aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)" yading@10: @end example yading@10: yading@10: @end itemize yading@10: yading@10: @section anullsrc yading@10: yading@10: Null audio source, return unprocessed audio frames. It is mainly useful yading@10: as a template and to be employed in analysis / debugging tools, or as yading@10: the source for filters which ignore the input data (for example the sox yading@10: synth filter). yading@10: yading@10: This source accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item channel_layout, cl yading@10: yading@10: Specify the channel layout, and can be either an integer or a string yading@10: representing a channel layout. The default value of @var{channel_layout} yading@10: is "stereo". yading@10: yading@10: Check the channel_layout_map definition in yading@10: @file{libavutil/channel_layout.c} for the mapping between strings and yading@10: channel layout values. yading@10: yading@10: @item sample_rate, r yading@10: Specify the sample rate, and defaults to 44100. yading@10: yading@10: @item nb_samples, n yading@10: Set the number of samples per requested frames. yading@10: yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO. yading@10: @example yading@10: anullsrc=r=48000:cl=4 yading@10: @end example yading@10: yading@10: @item yading@10: Do the same operation with a more obvious syntax: yading@10: @example yading@10: anullsrc=r=48000:cl=mono yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section abuffer yading@10: Buffer audio frames, and make them available to the filter chain. yading@10: yading@10: This source is not intended to be part of user-supplied graph descriptions but yading@10: for insertion by calling programs through the interface defined in yading@10: @file{libavfilter/buffersrc.h}. yading@10: yading@10: It accepts the following named parameters: yading@10: @table @option yading@10: yading@10: @item time_base yading@10: Timebase which will be used for timestamps of submitted frames. It must be yading@10: either a floating-point number or in @var{numerator}/@var{denominator} form. yading@10: yading@10: @item sample_rate yading@10: Audio sample rate. yading@10: yading@10: @item sample_fmt yading@10: Name of the sample format, as returned by @code{av_get_sample_fmt_name()}. yading@10: yading@10: @item channel_layout yading@10: Channel layout of the audio data, in the form that can be accepted by yading@10: @code{av_get_channel_layout()}. yading@10: @end table yading@10: yading@10: All the parameters need to be explicitly defined. yading@10: yading@10: @section flite yading@10: yading@10: Synthesize a voice utterance using the libflite library. yading@10: yading@10: To enable compilation of this filter you need to configure FFmpeg with yading@10: @code{--enable-libflite}. yading@10: yading@10: Note that the flite library is not thread-safe. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item list_voices yading@10: If set to 1, list the names of the available voices and exit yading@10: immediately. Default value is 0. yading@10: yading@10: @item nb_samples, n yading@10: Set the maximum number of samples per frame. Default value is 512. yading@10: yading@10: @item textfile yading@10: Set the filename containing the text to speak. yading@10: yading@10: @item text yading@10: Set the text to speak. yading@10: yading@10: @item voice, v yading@10: Set the voice to use for the speech synthesis. Default value is yading@10: @code{kal}. See also the @var{list_voices} option. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Read from file @file{speech.txt}, and synthetize the text using the yading@10: standard flite voice: yading@10: @example yading@10: flite=textfile=speech.txt yading@10: @end example yading@10: yading@10: @item yading@10: Read the specified text selecting the @code{slt} voice: yading@10: @example yading@10: flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt yading@10: @end example yading@10: yading@10: @item yading@10: Input text to ffmpeg: yading@10: @example yading@10: ffmpeg -f lavfi -i flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt yading@10: @end example yading@10: yading@10: @item yading@10: Make @file{ffplay} speak the specified text, using @code{flite} and yading@10: the @code{lavfi} device: yading@10: @example yading@10: ffplay -f lavfi flite=text='No more be grieved for which that thou hast done.' yading@10: @end example yading@10: @end itemize yading@10: yading@10: For more information about libflite, check: yading@10: @url{http://www.speech.cs.cmu.edu/flite/} yading@10: yading@10: @section sine yading@10: yading@10: Generate an audio signal made of a sine wave with amplitude 1/8. yading@10: yading@10: The audio signal is bit-exact. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item frequency, f yading@10: Set the carrier frequency. Default is 440 Hz. yading@10: yading@10: @item beep_factor, b yading@10: Enable a periodic beep every second with frequency @var{beep_factor} times yading@10: the carrier frequency. Default is 0, meaning the beep is disabled. yading@10: yading@10: @item sample_rate, s yading@10: Specify the sample rate, default is 44100. yading@10: yading@10: @item duration, d yading@10: Specify the duration of the generated audio stream. yading@10: yading@10: @item samples_per_frame yading@10: Set the number of samples per output frame, default is 1024. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: yading@10: @item yading@10: Generate a simple 440 Hz sine wave: yading@10: @example yading@10: sine yading@10: @end example yading@10: yading@10: @item yading@10: Generate a 220 Hz sine wave with a 880 Hz beep each second, for 5 seconds: yading@10: @example yading@10: sine=220:4:d=5 yading@10: sine=f=220:b=4:d=5 yading@10: sine=frequency=220:beep_factor=4:duration=5 yading@10: @end example yading@10: yading@10: @end itemize yading@10: yading@10: @c man end AUDIO SOURCES yading@10: yading@10: @chapter Audio Sinks yading@10: @c man begin AUDIO SINKS yading@10: yading@10: Below is a description of the currently available audio sinks. yading@10: yading@10: @section abuffersink yading@10: yading@10: Buffer audio frames, and make them available to the end of filter chain. yading@10: yading@10: This sink is mainly intended for programmatic use, in particular yading@10: through the interface defined in @file{libavfilter/buffersink.h} yading@10: or the options system. yading@10: yading@10: It accepts a pointer to an AVABufferSinkContext structure, which yading@10: defines the incoming buffers' formats, to be passed as the opaque yading@10: parameter to @code{avfilter_init_filter} for initialization. yading@10: yading@10: @section anullsink yading@10: yading@10: Null audio sink, do absolutely nothing with the input audio. It is yading@10: mainly useful as a template and to be employed in analysis / debugging yading@10: tools. yading@10: yading@10: @c man end AUDIO SINKS yading@10: yading@10: @chapter Video Filters yading@10: @c man begin VIDEO FILTERS yading@10: yading@10: When you configure your FFmpeg build, you can disable any of the yading@10: existing filters using @code{--disable-filters}. yading@10: The configure output will show the video filters included in your yading@10: build. yading@10: yading@10: Below is a description of the currently available video filters. yading@10: yading@10: @section alphaextract yading@10: yading@10: Extract the alpha component from the input as a grayscale video. This yading@10: is especially useful with the @var{alphamerge} filter. yading@10: yading@10: @section alphamerge yading@10: yading@10: Add or replace the alpha component of the primary input with the yading@10: grayscale value of a second input. This is intended for use with yading@10: @var{alphaextract} to allow the transmission or storage of frame yading@10: sequences that have alpha in a format that doesn't support an alpha yading@10: channel. yading@10: yading@10: For example, to reconstruct full frames from a normal YUV-encoded video yading@10: and a separate video created with @var{alphaextract}, you might use: yading@10: @example yading@10: movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out] yading@10: @end example yading@10: yading@10: Since this filter is designed for reconstruction, it operates on frame yading@10: sequences without considering timestamps, and terminates when either yading@10: input reaches end of stream. This will cause problems if your encoding yading@10: pipeline drops frames. If you're trying to apply an image as an yading@10: overlay to a video stream, consider the @var{overlay} filter instead. yading@10: yading@10: @section ass yading@10: yading@10: Same as the @ref{subtitles} filter, except that it doesn't require libavcodec yading@10: and libavformat to work. On the other hand, it is limited to ASS (Advanced yading@10: Substation Alpha) subtitles files. yading@10: yading@10: @section bbox yading@10: yading@10: Compute the bounding box for the non-black pixels in the input frame yading@10: luminance plane. yading@10: yading@10: This filter computes the bounding box containing all the pixels with a yading@10: luminance value greater than the minimum allowed value. yading@10: The parameters describing the bounding box are printed on the filter yading@10: log. yading@10: yading@10: @section blackdetect yading@10: yading@10: Detect video intervals that are (almost) completely black. Can be yading@10: useful to detect chapter transitions, commercials, or invalid yading@10: recordings. Output lines contains the time for the start, end and yading@10: duration of the detected black interval expressed in seconds. yading@10: yading@10: In order to display the output lines, you need to set the loglevel at yading@10: least to the AV_LOG_INFO value. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item black_min_duration, d yading@10: Set the minimum detected black duration expressed in seconds. It must yading@10: be a non-negative floating point number. yading@10: yading@10: Default value is 2.0. yading@10: yading@10: @item picture_black_ratio_th, pic_th yading@10: Set the threshold for considering a picture "black". yading@10: Express the minimum value for the ratio: yading@10: @example yading@10: @var{nb_black_pixels} / @var{nb_pixels} yading@10: @end example yading@10: yading@10: for which a picture is considered black. yading@10: Default value is 0.98. yading@10: yading@10: @item pixel_black_th, pix_th yading@10: Set the threshold for considering a pixel "black". yading@10: yading@10: The threshold expresses the maximum pixel luminance value for which a yading@10: pixel is considered "black". The provided value is scaled according to yading@10: the following equation: yading@10: @example yading@10: @var{absolute_threshold} = @var{luminance_minimum_value} + @var{pixel_black_th} * @var{luminance_range_size} yading@10: @end example yading@10: yading@10: @var{luminance_range_size} and @var{luminance_minimum_value} depend on yading@10: the input video format, the range is [0-255] for YUV full-range yading@10: formats and [16-235] for YUV non full-range formats. yading@10: yading@10: Default value is 0.10. yading@10: @end table yading@10: yading@10: The following example sets the maximum pixel threshold to the minimum yading@10: value, and detects only black intervals of 2 or more seconds: yading@10: @example yading@10: blackdetect=d=2:pix_th=0.00 yading@10: @end example yading@10: yading@10: @section blackframe yading@10: yading@10: Detect frames that are (almost) completely black. Can be useful to yading@10: detect chapter transitions or commercials. Output lines consist of yading@10: the frame number of the detected frame, the percentage of blackness, yading@10: the position in the file if known or -1 and the timestamp in seconds. yading@10: yading@10: In order to display the output lines, you need to set the loglevel at yading@10: least to the AV_LOG_INFO value. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item amount yading@10: Set the percentage of the pixels that have to be below the threshold, defaults yading@10: to @code{98}. yading@10: yading@10: @item threshold, thresh yading@10: Set the threshold below which a pixel value is considered black, defaults to yading@10: @code{32}. yading@10: yading@10: @end table yading@10: yading@10: @section blend yading@10: yading@10: Blend two video frames into each other. yading@10: yading@10: It takes two input streams and outputs one stream, the first input is the yading@10: "top" layer and second input is "bottom" layer. yading@10: Output terminates when shortest input terminates. yading@10: yading@10: A description of the accepted options follows. yading@10: yading@10: @table @option yading@10: @item c0_mode yading@10: @item c1_mode yading@10: @item c2_mode yading@10: @item c3_mode yading@10: @item all_mode yading@10: Set blend mode for specific pixel component or all pixel components in case yading@10: of @var{all_mode}. Default value is @code{normal}. yading@10: yading@10: Available values for component modes are: yading@10: @table @samp yading@10: @item addition yading@10: @item and yading@10: @item average yading@10: @item burn yading@10: @item darken yading@10: @item difference yading@10: @item divide yading@10: @item dodge yading@10: @item exclusion yading@10: @item hardlight yading@10: @item lighten yading@10: @item multiply yading@10: @item negation yading@10: @item normal yading@10: @item or yading@10: @item overlay yading@10: @item phoenix yading@10: @item pinlight yading@10: @item reflect yading@10: @item screen yading@10: @item softlight yading@10: @item subtract yading@10: @item vividlight yading@10: @item xor yading@10: @end table yading@10: yading@10: @item c0_opacity yading@10: @item c1_opacity yading@10: @item c2_opacity yading@10: @item c3_opacity yading@10: @item all_opacity yading@10: Set blend opacity for specific pixel component or all pixel components in case yading@10: of @var{all_opacity}. Only used in combination with pixel component blend modes. yading@10: yading@10: @item c0_expr yading@10: @item c1_expr yading@10: @item c2_expr yading@10: @item c3_expr yading@10: @item all_expr yading@10: Set blend expression for specific pixel component or all pixel components in case yading@10: of @var{all_expr}. Note that related mode options will be ignored if those are set. yading@10: yading@10: The expressions can use the following variables: yading@10: yading@10: @table @option yading@10: @item N yading@10: The sequential number of the filtered frame, starting from @code{0}. yading@10: yading@10: @item X yading@10: @item Y yading@10: the coordinates of the current sample yading@10: yading@10: @item W yading@10: @item H yading@10: the width and height of currently filtered plane yading@10: yading@10: @item SW yading@10: @item SH yading@10: Width and height scale depending on the currently filtered plane. It is the yading@10: ratio between the corresponding luma plane number of pixels and the current yading@10: plane ones. E.g. for YUV4:2:0 the values are @code{1,1} for the luma plane, and yading@10: @code{0.5,0.5} for chroma planes. yading@10: yading@10: @item T yading@10: Time of the current frame, expressed in seconds. yading@10: yading@10: @item TOP, A yading@10: Value of pixel component at current location for first video frame (top layer). yading@10: yading@10: @item BOTTOM, B yading@10: Value of pixel component at current location for second video frame (bottom layer). yading@10: @end table yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Apply transition from bottom layer to top layer in first 10 seconds: yading@10: @example yading@10: blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10)))' yading@10: @end example yading@10: yading@10: @item yading@10: Apply 1x1 checkerboard effect: yading@10: @example yading@10: blend=all_expr='if(eq(mod(X,2),mod(Y,2)),A,B)' yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section boxblur yading@10: yading@10: Apply boxblur algorithm to the input video. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item luma_radius, lr yading@10: @item luma_power, lp yading@10: @item chroma_radius, cr yading@10: @item chroma_power, cp yading@10: @item alpha_radius, ar yading@10: @item alpha_power, ap yading@10: yading@10: @end table yading@10: yading@10: A description of the accepted options follows. yading@10: yading@10: @table @option yading@10: @item luma_radius, lr yading@10: @item chroma_radius, cr yading@10: @item alpha_radius, ar yading@10: Set an expression for the box radius in pixels used for blurring the yading@10: corresponding input plane. yading@10: yading@10: The radius value must be a non-negative number, and must not be yading@10: greater than the value of the expression @code{min(w,h)/2} for the yading@10: luma and alpha planes, and of @code{min(cw,ch)/2} for the chroma yading@10: planes. yading@10: yading@10: Default value for @option{luma_radius} is "2". If not specified, yading@10: @option{chroma_radius} and @option{alpha_radius} default to the yading@10: corresponding value set for @option{luma_radius}. yading@10: yading@10: The expressions can contain the following constants: yading@10: @table @option yading@10: @item w, h yading@10: the input width and height in pixels yading@10: yading@10: @item cw, ch yading@10: the input chroma image width and height in pixels yading@10: yading@10: @item hsub, vsub yading@10: horizontal and vertical chroma subsample values. For example for the yading@10: pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1. yading@10: @end table yading@10: yading@10: @item luma_power, lp yading@10: @item chroma_power, cp yading@10: @item alpha_power, ap yading@10: Specify how many times the boxblur filter is applied to the yading@10: corresponding plane. yading@10: yading@10: Default value for @option{luma_power} is 2. If not specified, yading@10: @option{chroma_power} and @option{alpha_power} default to the yading@10: corresponding value set for @option{luma_power}. yading@10: yading@10: A value of 0 will disable the effect. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Apply a boxblur filter with luma, chroma, and alpha radius yading@10: set to 2: yading@10: @example yading@10: boxblur=luma_radius=2:luma_power=1 yading@10: boxblur=2:1 yading@10: @end example yading@10: yading@10: @item yading@10: Set luma radius to 2, alpha and chroma radius to 0: yading@10: @example yading@10: boxblur=2:1:cr=0:ar=0 yading@10: @end example yading@10: yading@10: @item yading@10: Set luma and chroma radius to a fraction of the video dimension: yading@10: @example yading@10: boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1 yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section colorbalance yading@10: Modify intensity of primary colors (red, green and blue) of input frames. yading@10: yading@10: The filter allows an input frame to be adjusted in the shadows, midtones or highlights yading@10: regions for the red-cyan, green-magenta or blue-yellow balance. yading@10: yading@10: A positive adjustment value shifts the balance towards the primary color, a negative yading@10: value towards the complementary color. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item rs yading@10: @item gs yading@10: @item bs yading@10: Adjust red, green and blue shadows (darkest pixels). yading@10: yading@10: @item rm yading@10: @item gm yading@10: @item bm yading@10: Adjust red, green and blue midtones (medium pixels). yading@10: yading@10: @item rh yading@10: @item gh yading@10: @item bh yading@10: Adjust red, green and blue highlights (brightest pixels). yading@10: yading@10: Allowed ranges for options are @code{[-1.0, 1.0]}. Defaults are @code{0}. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Add red color cast to shadows: yading@10: @example yading@10: colorbalance=rs=.3 yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section colorchannelmixer yading@10: yading@10: Adjust video input frames by re-mixing color channels. yading@10: yading@10: This filter modifies a color channel by adding the values associated to yading@10: the other channels of the same pixels. For example if the value to yading@10: modify is red, the output value will be: yading@10: @example yading@10: @var{red}=@var{red}*@var{rr} + @var{blue}*@var{rb} + @var{green}*@var{rg} + @var{alpha}*@var{ra} yading@10: @end example yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item rr yading@10: @item rg yading@10: @item rb yading@10: @item ra yading@10: Adjust contribution of input red, green, blue and alpha channels for output red channel. yading@10: Default is @code{1} for @var{rr}, and @code{0} for @var{rg}, @var{rb} and @var{ra}. yading@10: yading@10: @item gr yading@10: @item gg yading@10: @item gb yading@10: @item ga yading@10: Adjust contribution of input red, green, blue and alpha channels for output green channel. yading@10: Default is @code{1} for @var{gg}, and @code{0} for @var{gr}, @var{gb} and @var{ga}. yading@10: yading@10: @item br yading@10: @item bg yading@10: @item bb yading@10: @item ba yading@10: Adjust contribution of input red, green, blue and alpha channels for output blue channel. yading@10: Default is @code{1} for @var{bb}, and @code{0} for @var{br}, @var{bg} and @var{ba}. yading@10: yading@10: @item ar yading@10: @item ag yading@10: @item ab yading@10: @item aa yading@10: Adjust contribution of input red, green, blue and alpha channels for output alpha channel. yading@10: Default is @code{1} for @var{aa}, and @code{0} for @var{ar}, @var{ag} and @var{ab}. yading@10: yading@10: Allowed ranges for options are @code{[-2.0, 2.0]}. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Convert source to grayscale: yading@10: @example yading@10: colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3 yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section colormatrix yading@10: yading@10: Convert color matrix. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item src yading@10: @item dst yading@10: Specify the source and destination color matrix. Both values must be yading@10: specified. yading@10: yading@10: The accepted values are: yading@10: @table @samp yading@10: @item bt709 yading@10: BT.709 yading@10: yading@10: @item bt601 yading@10: BT.601 yading@10: yading@10: @item smpte240m yading@10: SMPTE-240M yading@10: yading@10: @item fcc yading@10: FCC yading@10: @end table yading@10: @end table yading@10: yading@10: For example to convert from BT.601 to SMPTE-240M, use the command: yading@10: @example yading@10: colormatrix=bt601:smpte240m yading@10: @end example yading@10: yading@10: @section copy yading@10: yading@10: Copy the input source unchanged to the output. Mainly useful for yading@10: testing purposes. yading@10: yading@10: @section crop yading@10: yading@10: Crop the input video to given dimensions. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item w, out_w yading@10: Width of the output video. It defaults to @code{iw}. yading@10: This expression is evaluated only once during the filter yading@10: configuration. yading@10: yading@10: @item h, out_h yading@10: Height of the output video. It defaults to @code{ih}. yading@10: This expression is evaluated only once during the filter yading@10: configuration. yading@10: yading@10: @item x yading@10: Horizontal position, in the input video, of the left edge of the output video. yading@10: It defaults to @code{(in_w-out_w)/2}. yading@10: This expression is evaluated per-frame. yading@10: yading@10: @item y yading@10: Vertical position, in the input video, of the top edge of the output video. yading@10: It defaults to @code{(in_h-out_h)/2}. yading@10: This expression is evaluated per-frame. yading@10: yading@10: @item keep_aspect yading@10: If set to 1 will force the output display aspect ratio yading@10: to be the same of the input, by changing the output sample aspect yading@10: ratio. It defaults to 0. yading@10: @end table yading@10: yading@10: The @var{out_w}, @var{out_h}, @var{x}, @var{y} parameters are yading@10: expressions containing the following constants: yading@10: yading@10: @table @option yading@10: @item x, y yading@10: the computed values for @var{x} and @var{y}. They are evaluated for yading@10: each new frame. yading@10: yading@10: @item in_w, in_h yading@10: the input width and height yading@10: yading@10: @item iw, ih yading@10: same as @var{in_w} and @var{in_h} yading@10: yading@10: @item out_w, out_h yading@10: the output (cropped) width and height yading@10: yading@10: @item ow, oh yading@10: same as @var{out_w} and @var{out_h} yading@10: yading@10: @item a yading@10: same as @var{iw} / @var{ih} yading@10: yading@10: @item sar yading@10: input sample aspect ratio yading@10: yading@10: @item dar yading@10: input display aspect ratio, it is the same as (@var{iw} / @var{ih}) * @var{sar} yading@10: yading@10: @item hsub, vsub yading@10: horizontal and vertical chroma subsample values. For example for the yading@10: pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1. yading@10: yading@10: @item n yading@10: the number of input frame, starting from 0 yading@10: yading@10: @item pos yading@10: the position in the file of the input frame, NAN if unknown yading@10: yading@10: @item t yading@10: timestamp expressed in seconds, NAN if the input timestamp is unknown yading@10: yading@10: @end table yading@10: yading@10: The expression for @var{out_w} may depend on the value of @var{out_h}, yading@10: and the expression for @var{out_h} may depend on @var{out_w}, but they yading@10: cannot depend on @var{x} and @var{y}, as @var{x} and @var{y} are yading@10: evaluated after @var{out_w} and @var{out_h}. yading@10: yading@10: The @var{x} and @var{y} parameters specify the expressions for the yading@10: position of the top-left corner of the output (non-cropped) area. They yading@10: are evaluated for each frame. If the evaluated value is not valid, it yading@10: is approximated to the nearest valid value. yading@10: yading@10: The expression for @var{x} may depend on @var{y}, and the expression yading@10: for @var{y} may depend on @var{x}. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Crop area with size 100x100 at position (12,34). yading@10: @example yading@10: crop=100:100:12:34 yading@10: @end example yading@10: yading@10: Using named options, the example above becomes: yading@10: @example yading@10: crop=w=100:h=100:x=12:y=34 yading@10: @end example yading@10: yading@10: @item yading@10: Crop the central input area with size 100x100: yading@10: @example yading@10: crop=100:100 yading@10: @end example yading@10: yading@10: @item yading@10: Crop the central input area with size 2/3 of the input video: yading@10: @example yading@10: crop=2/3*in_w:2/3*in_h yading@10: @end example yading@10: yading@10: @item yading@10: Crop the input video central square: yading@10: @example yading@10: crop=out_w=in_h yading@10: crop=in_h yading@10: @end example yading@10: yading@10: @item yading@10: Delimit the rectangle with the top-left corner placed at position yading@10: 100:100 and the right-bottom corner corresponding to the right-bottom yading@10: corner of the input image: yading@10: @example yading@10: crop=in_w-100:in_h-100:100:100 yading@10: @end example yading@10: yading@10: @item yading@10: Crop 10 pixels from the left and right borders, and 20 pixels from yading@10: the top and bottom borders yading@10: @example yading@10: crop=in_w-2*10:in_h-2*20 yading@10: @end example yading@10: yading@10: @item yading@10: Keep only the bottom right quarter of the input image: yading@10: @example yading@10: crop=in_w/2:in_h/2:in_w/2:in_h/2 yading@10: @end example yading@10: yading@10: @item yading@10: Crop height for getting Greek harmony: yading@10: @example yading@10: crop=in_w:1/PHI*in_w yading@10: @end example yading@10: yading@10: @item yading@10: Appply trembling effect: yading@10: @example yading@10: 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) yading@10: @end example yading@10: yading@10: @item yading@10: Apply erratic camera effect depending on timestamp: yading@10: @example yading@10: 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)" yading@10: @end example yading@10: yading@10: @item yading@10: Set x depending on the value of y: yading@10: @example yading@10: crop=in_w/2:in_h/2:y:10+10*sin(n/10) yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section cropdetect yading@10: yading@10: Auto-detect crop size. yading@10: yading@10: Calculate necessary cropping parameters and prints the recommended yading@10: parameters through the logging system. The detected dimensions yading@10: correspond to the non-black area of the input video. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item limit yading@10: Set higher black value threshold, which can be optionally specified yading@10: from nothing (0) to everything (255). An intensity value greater yading@10: to the set value is considered non-black. Default value is 24. yading@10: yading@10: @item round yading@10: Set the value for which the width/height should be divisible by. The yading@10: offset is automatically adjusted to center the video. Use 2 to get yading@10: only even dimensions (needed for 4:2:2 video). 16 is best when yading@10: encoding to most video codecs. Default value is 16. yading@10: yading@10: @item reset_count, reset yading@10: Set the counter that determines after how many frames cropdetect will yading@10: reset the previously detected largest video area and start over to yading@10: detect the current optimal crop area. Default value is 0. yading@10: yading@10: This can be useful when channel logos distort the video area. 0 yading@10: indicates never reset and return the largest area encountered during yading@10: playback. yading@10: @end table yading@10: yading@10: @section curves yading@10: yading@10: Apply color adjustments using curves. yading@10: yading@10: This filter is similar to the Adobe Photoshop and GIMP curves tools. Each yading@10: component (red, green and blue) has its values defined by @var{N} key points yading@10: tied from each other using a smooth curve. The x-axis represents the pixel yading@10: values from the input frame, and the y-axis the new pixel values to be set for yading@10: the output frame. yading@10: yading@10: By default, a component curve is defined by the two points @var{(0;0)} and yading@10: @var{(1;1)}. This creates a straight line where each original pixel value is yading@10: "adjusted" to its own value, which means no change to the image. yading@10: yading@10: The filter allows you to redefine these two points and add some more. A new yading@10: curve (using a natural cubic spline interpolation) will be define to pass yading@10: smoothly through all these new coordinates. The new defined points needs to be yading@10: strictly increasing over the x-axis, and their @var{x} and @var{y} values must yading@10: be in the @var{[0;1]} interval. If the computed curves happened to go outside yading@10: the vector spaces, the values will be clipped accordingly. yading@10: yading@10: If there is no key point defined in @code{x=0}, the filter will automatically yading@10: insert a @var{(0;0)} point. In the same way, if there is no key point defined yading@10: in @code{x=1}, the filter will automatically insert a @var{(1;1)} point. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item preset yading@10: Select one of the available color presets. This option can be used in addition yading@10: to the @option{r}, @option{g}, @option{b} parameters; in this case, the later yading@10: options takes priority on the preset values. yading@10: Available presets are: yading@10: @table @samp yading@10: @item none yading@10: @item color_negative yading@10: @item cross_process yading@10: @item darker yading@10: @item increase_contrast yading@10: @item lighter yading@10: @item linear_contrast yading@10: @item medium_contrast yading@10: @item negative yading@10: @item strong_contrast yading@10: @item vintage yading@10: @end table yading@10: Default is @code{none}. yading@10: @item master, m yading@10: Set the master key points. These points will define a second pass mapping. It yading@10: is sometimes called a "luminance" or "value" mapping. It can be used with yading@10: @option{r}, @option{g}, @option{b} or @option{all} since it acts like a yading@10: post-processing LUT. yading@10: @item red, r yading@10: Set the key points for the red component. yading@10: @item green, g yading@10: Set the key points for the green component. yading@10: @item blue, b yading@10: Set the key points for the blue component. yading@10: @item all yading@10: Set the key points for all components (not including master). yading@10: Can be used in addition to the other key points component yading@10: options. In this case, the unset component(s) will fallback on this yading@10: @option{all} setting. yading@10: @item psfile yading@10: Specify a Photoshop curves file (@code{.asv}) to import the settings from. yading@10: @end table yading@10: yading@10: To avoid some filtergraph syntax conflicts, each key points list need to be yading@10: defined using the following syntax: @code{x0/y0 x1/y1 x2/y2 ...}. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Increase slightly the middle level of blue: yading@10: @example yading@10: curves=blue='0.5/0.58' yading@10: @end example yading@10: yading@10: @item yading@10: Vintage effect: yading@10: @example yading@10: curves=r='0/0.11 .42/.51 1/0.95':g='0.50/0.48':b='0/0.22 .49/.44 1/0.8' yading@10: @end example yading@10: Here we obtain the following coordinates for each components: yading@10: @table @var yading@10: @item red yading@10: @code{(0;0.11) (0.42;0.51) (1;0.95)} yading@10: @item green yading@10: @code{(0;0) (0.50;0.48) (1;1)} yading@10: @item blue yading@10: @code{(0;0.22) (0.49;0.44) (1;0.80)} yading@10: @end table yading@10: yading@10: @item yading@10: The previous example can also be achieved with the associated built-in preset: yading@10: @example yading@10: curves=preset=vintage yading@10: @end example yading@10: yading@10: @item yading@10: Or simply: yading@10: @example yading@10: curves=vintage yading@10: @end example yading@10: yading@10: @item yading@10: Use a Photoshop preset and redefine the points of the green component: yading@10: @example yading@10: curves=psfile='MyCurvesPresets/purple.asv':green='0.45/0.53' yading@10: @end example yading@10: @end itemize yading@10: yading@10: @anchor{decimate} yading@10: @section decimate yading@10: yading@10: Drop duplicated frames at regular intervals. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item cycle yading@10: Set the number of frames from which one will be dropped. Setting this to yading@10: @var{N} means one frame in every batch of @var{N} frames will be dropped. yading@10: Default is @code{5}. yading@10: yading@10: @item dupthresh yading@10: Set the threshold for duplicate detection. If the difference metric for a frame yading@10: is less than or equal to this value, then it is declared as duplicate. Default yading@10: is @code{1.1} yading@10: yading@10: @item scthresh yading@10: Set scene change threshold. Default is @code{15}. yading@10: yading@10: @item blockx yading@10: @item blocky yading@10: Set the size of the x and y-axis blocks used during metric calculations. yading@10: Larger blocks give better noise suppression, but also give worse detection of yading@10: small movements. Must be a power of two. Default is @code{32}. yading@10: yading@10: @item ppsrc yading@10: Mark main input as a pre-processed input and activate clean source input yading@10: stream. This allows the input to be pre-processed with various filters to help yading@10: the metrics calculation while keeping the frame selection lossless. When set to yading@10: @code{1}, the first stream is for the pre-processed input, and the second yading@10: stream is the clean source from where the kept frames are chosen. Default is yading@10: @code{0}. yading@10: yading@10: @item chroma yading@10: Set whether or not chroma is considered in the metric calculations. Default is yading@10: @code{1}. yading@10: @end table yading@10: yading@10: @section delogo yading@10: yading@10: Suppress a TV station logo by a simple interpolation of the surrounding yading@10: pixels. Just set a rectangle covering the logo and watch it disappear yading@10: (and sometimes something even uglier appear - your mileage may vary). yading@10: yading@10: This filter accepts the following options: yading@10: @table @option yading@10: yading@10: @item x, y yading@10: Specify the top left corner coordinates of the logo. They must be yading@10: specified. yading@10: yading@10: @item w, h yading@10: Specify the width and height of the logo to clear. They must be yading@10: specified. yading@10: yading@10: @item band, t yading@10: Specify the thickness of the fuzzy edge of the rectangle (added to yading@10: @var{w} and @var{h}). The default value is 4. yading@10: yading@10: @item show yading@10: When set to 1, a green rectangle is drawn on the screen to simplify yading@10: finding the right @var{x}, @var{y}, @var{w}, @var{h} parameters, and yading@10: @var{band} is set to 4. The default value is 0. yading@10: yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Set a rectangle covering the area with top left corner coordinates 0,0 yading@10: and size 100x77, setting a band of size 10: yading@10: @example yading@10: delogo=x=0:y=0:w=100:h=77:band=10 yading@10: @end example yading@10: yading@10: @end itemize yading@10: yading@10: @section deshake yading@10: yading@10: Attempt to fix small changes in horizontal and/or vertical shift. This yading@10: filter helps remove camera shake from hand-holding a camera, bumping a yading@10: tripod, moving on a vehicle, etc. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item x yading@10: @item y yading@10: @item w yading@10: @item h yading@10: Specify a rectangular area where to limit the search for motion yading@10: vectors. yading@10: If desired the search for motion vectors can be limited to a yading@10: rectangular area of the frame defined by its top left corner, width yading@10: and height. These parameters have the same meaning as the drawbox yading@10: filter which can be used to visualise the position of the bounding yading@10: box. yading@10: yading@10: This is useful when simultaneous movement of subjects within the frame yading@10: might be confused for camera motion by the motion vector search. yading@10: yading@10: If any or all of @var{x}, @var{y}, @var{w} and @var{h} are set to -1 yading@10: then the full frame is used. This allows later options to be set yading@10: without specifying the bounding box for the motion vector search. yading@10: yading@10: Default - search the whole frame. yading@10: yading@10: @item rx yading@10: @item ry yading@10: Specify the maximum extent of movement in x and y directions in the yading@10: range 0-64 pixels. Default 16. yading@10: yading@10: @item edge yading@10: Specify how to generate pixels to fill blanks at the edge of the yading@10: frame. Available values are: yading@10: @table @samp yading@10: @item blank, 0 yading@10: Fill zeroes at blank locations yading@10: @item original, 1 yading@10: Original image at blank locations yading@10: @item clamp, 2 yading@10: Extruded edge value at blank locations yading@10: @item mirror, 3 yading@10: Mirrored edge at blank locations yading@10: @end table yading@10: Default value is @samp{mirror}. yading@10: yading@10: @item blocksize yading@10: Specify the blocksize to use for motion search. Range 4-128 pixels, yading@10: default 8. yading@10: yading@10: @item contrast yading@10: Specify the contrast threshold for blocks. Only blocks with more than yading@10: the specified contrast (difference between darkest and lightest yading@10: pixels) will be considered. Range 1-255, default 125. yading@10: yading@10: @item search yading@10: Specify the search strategy. Available values are: yading@10: @table @samp yading@10: @item exhaustive, 0 yading@10: Set exhaustive search yading@10: @item less, 1 yading@10: Set less exhaustive search. yading@10: @end table yading@10: Default value is @samp{exhaustive}. yading@10: yading@10: @item filename yading@10: If set then a detailed log of the motion search is written to the yading@10: specified file. yading@10: yading@10: @item opencl yading@10: If set to 1, specify using OpenCL capabilities, only available if yading@10: FFmpeg was configured with @code{--enable-opencl}. Default value is 0. yading@10: yading@10: @end table yading@10: yading@10: @section drawbox yading@10: yading@10: Draw a colored box on the input image. yading@10: yading@10: This filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item x, y yading@10: Specify the top left corner coordinates of the box. Default to 0. yading@10: yading@10: @item width, w yading@10: @item height, h yading@10: Specify the width and height of the box, if 0 they are interpreted as yading@10: the input width and height. Default to 0. yading@10: yading@10: @item color, c yading@10: Specify the color of the box to write, it can be the name of a color yading@10: (case insensitive match) or a 0xRRGGBB[AA] sequence. If the special yading@10: value @code{invert} is used, the box edge color is the same as the yading@10: video with inverted luma. yading@10: yading@10: @item thickness, t yading@10: Set the thickness of the box edge. Default value is @code{4}. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Draw a black box around the edge of the input image: yading@10: @example yading@10: drawbox yading@10: @end example yading@10: yading@10: @item yading@10: Draw a box with color red and an opacity of 50%: yading@10: @example yading@10: drawbox=10:20:200:60:red@@0.5 yading@10: @end example yading@10: yading@10: The previous example can be specified as: yading@10: @example yading@10: drawbox=x=10:y=20:w=200:h=60:color=red@@0.5 yading@10: @end example yading@10: yading@10: @item yading@10: Fill the box with pink color: yading@10: @example yading@10: drawbox=x=10:y=10:w=100:h=100:color=pink@@0.5:t=max yading@10: @end example yading@10: @end itemize yading@10: yading@10: @anchor{drawtext} yading@10: @section drawtext yading@10: yading@10: Draw text string or text from specified file on top of video using the yading@10: libfreetype library. yading@10: yading@10: To enable compilation of this filter you need to configure FFmpeg with yading@10: @code{--enable-libfreetype}. yading@10: yading@10: @subsection Syntax yading@10: yading@10: The description of the accepted parameters follows. yading@10: yading@10: @table @option yading@10: yading@10: @item box yading@10: Used to draw a box around text using background color. yading@10: Value should be either 1 (enable) or 0 (disable). yading@10: The default value of @var{box} is 0. yading@10: yading@10: @item boxcolor yading@10: The color to be used for drawing box around text. yading@10: Either a string (e.g. "yellow") or in 0xRRGGBB[AA] format yading@10: (e.g. "0xff00ff"), possibly followed by an alpha specifier. yading@10: The default value of @var{boxcolor} is "white". yading@10: yading@10: @item draw yading@10: Set an expression which specifies if the text should be drawn. If the yading@10: expression evaluates to 0, the text is not drawn. This is useful for yading@10: specifying that the text should be drawn only when specific conditions yading@10: are met. yading@10: yading@10: Default value is "1". yading@10: yading@10: See below for the list of accepted constants and functions. yading@10: yading@10: @item expansion yading@10: Select how the @var{text} is expanded. Can be either @code{none}, yading@10: @code{strftime} (deprecated) or yading@10: @code{normal} (default). See the @ref{drawtext_expansion, Text expansion} section yading@10: below for details. yading@10: yading@10: @item fix_bounds yading@10: If true, check and fix text coords to avoid clipping. yading@10: yading@10: @item fontcolor yading@10: The color to be used for drawing fonts. yading@10: Either a string (e.g. "red") or in 0xRRGGBB[AA] format yading@10: (e.g. "0xff000033"), possibly followed by an alpha specifier. yading@10: The default value of @var{fontcolor} is "black". yading@10: yading@10: @item fontfile yading@10: The font file to be used for drawing text. Path must be included. yading@10: This parameter is mandatory. yading@10: yading@10: @item fontsize yading@10: The font size to be used for drawing text. yading@10: The default value of @var{fontsize} is 16. yading@10: yading@10: @item ft_load_flags yading@10: Flags to be used for loading the fonts. yading@10: yading@10: The flags map the corresponding flags supported by libfreetype, and are yading@10: a combination of the following values: yading@10: @table @var yading@10: @item default yading@10: @item no_scale yading@10: @item no_hinting yading@10: @item render yading@10: @item no_bitmap yading@10: @item vertical_layout yading@10: @item force_autohint yading@10: @item crop_bitmap yading@10: @item pedantic yading@10: @item ignore_global_advance_width yading@10: @item no_recurse yading@10: @item ignore_transform yading@10: @item monochrome yading@10: @item linear_design yading@10: @item no_autohint yading@10: @item end table yading@10: @end table yading@10: yading@10: Default value is "render". yading@10: yading@10: For more information consult the documentation for the FT_LOAD_* yading@10: libfreetype flags. yading@10: yading@10: @item shadowcolor yading@10: The color to be used for drawing a shadow behind the drawn text. It yading@10: can be a color name (e.g. "yellow") or a string in the 0xRRGGBB[AA] yading@10: form (e.g. "0xff00ff"), possibly followed by an alpha specifier. yading@10: The default value of @var{shadowcolor} is "black". yading@10: yading@10: @item shadowx, shadowy yading@10: The x and y offsets for the text shadow position with respect to the yading@10: position of the text. They can be either positive or negative yading@10: values. Default value for both is "0". yading@10: yading@10: @item tabsize yading@10: The size in number of spaces to use for rendering the tab. yading@10: Default value is 4. yading@10: yading@10: @item timecode yading@10: Set the initial timecode representation in "hh:mm:ss[:;.]ff" yading@10: format. It can be used with or without text parameter. @var{timecode_rate} yading@10: option must be specified. yading@10: yading@10: @item timecode_rate, rate, r yading@10: Set the timecode frame rate (timecode only). yading@10: yading@10: @item text yading@10: The text string to be drawn. The text must be a sequence of UTF-8 yading@10: encoded characters. yading@10: This parameter is mandatory if no file is specified with the parameter yading@10: @var{textfile}. yading@10: yading@10: @item textfile yading@10: A text file containing text to be drawn. The text must be a sequence yading@10: of UTF-8 encoded characters. yading@10: yading@10: This parameter is mandatory if no text string is specified with the yading@10: parameter @var{text}. yading@10: yading@10: If both @var{text} and @var{textfile} are specified, an error is thrown. yading@10: yading@10: @item reload yading@10: If set to 1, the @var{textfile} will be reloaded before each frame. yading@10: Be sure to update it atomically, or it may be read partially, or even fail. yading@10: yading@10: @item x, y yading@10: The expressions which specify the offsets where text will be drawn yading@10: within the video frame. They are relative to the top/left border of the yading@10: output image. yading@10: yading@10: The default value of @var{x} and @var{y} is "0". yading@10: yading@10: See below for the list of accepted constants and functions. yading@10: @end table yading@10: yading@10: The parameters for @var{x} and @var{y} are expressions containing the yading@10: following constants and functions: yading@10: yading@10: @table @option yading@10: @item dar yading@10: input display aspect ratio, it is the same as (@var{w} / @var{h}) * @var{sar} yading@10: yading@10: @item hsub, vsub yading@10: horizontal and vertical chroma subsample values. For example for the yading@10: pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1. yading@10: yading@10: @item line_h, lh yading@10: the height of each text line yading@10: yading@10: @item main_h, h, H yading@10: the input height yading@10: yading@10: @item main_w, w, W yading@10: the input width yading@10: yading@10: @item max_glyph_a, ascent yading@10: the maximum distance from the baseline to the highest/upper grid yading@10: coordinate used to place a glyph outline point, for all the rendered yading@10: glyphs. yading@10: It is a positive value, due to the grid's orientation with the Y axis yading@10: upwards. yading@10: yading@10: @item max_glyph_d, descent yading@10: the maximum distance from the baseline to the lowest grid coordinate yading@10: used to place a glyph outline point, for all the rendered glyphs. yading@10: This is a negative value, due to the grid's orientation, with the Y axis yading@10: upwards. yading@10: yading@10: @item max_glyph_h yading@10: maximum glyph height, that is the maximum height for all the glyphs yading@10: contained in the rendered text, it is equivalent to @var{ascent} - yading@10: @var{descent}. yading@10: yading@10: @item max_glyph_w yading@10: maximum glyph width, that is the maximum width for all the glyphs yading@10: contained in the rendered text yading@10: yading@10: @item n yading@10: the number of input frame, starting from 0 yading@10: yading@10: @item rand(min, max) yading@10: return a random number included between @var{min} and @var{max} yading@10: yading@10: @item sar yading@10: input sample aspect ratio yading@10: yading@10: @item t yading@10: timestamp expressed in seconds, NAN if the input timestamp is unknown yading@10: yading@10: @item text_h, th yading@10: the height of the rendered text yading@10: yading@10: @item text_w, tw yading@10: the width of the rendered text yading@10: yading@10: @item x, y yading@10: the x and y offset coordinates where the text is drawn. yading@10: yading@10: These parameters allow the @var{x} and @var{y} expressions to refer yading@10: each other, so you can for example specify @code{y=x/dar}. yading@10: @end table yading@10: yading@10: If libavfilter was built with @code{--enable-fontconfig}, then yading@10: @option{fontfile} can be a fontconfig pattern or omitted. yading@10: yading@10: @anchor{drawtext_expansion} yading@10: @subsection Text expansion yading@10: yading@10: If @option{expansion} is set to @code{strftime}, yading@10: the filter recognizes strftime() sequences in the provided text and yading@10: expands them accordingly. Check the documentation of strftime(). This yading@10: feature is deprecated. yading@10: yading@10: If @option{expansion} is set to @code{none}, the text is printed verbatim. yading@10: yading@10: If @option{expansion} is set to @code{normal} (which is the default), yading@10: the following expansion mechanism is used. yading@10: yading@10: The backslash character '\', followed by any character, always expands to yading@10: the second character. yading@10: yading@10: Sequence of the form @code{%@{...@}} are expanded. The text between the yading@10: braces is a function name, possibly followed by arguments separated by ':'. yading@10: If the arguments contain special characters or delimiters (':' or '@}'), yading@10: they should be escaped. yading@10: yading@10: Note that they probably must also be escaped as the value for the yading@10: @option{text} option in the filter argument string and as the filter yading@10: argument in the filtergraph description, and possibly also for the shell, yading@10: that makes up to four levels of escaping; using a text file avoids these yading@10: problems. yading@10: yading@10: The following functions are available: yading@10: yading@10: @table @command yading@10: yading@10: @item expr, e yading@10: The expression evaluation result. yading@10: yading@10: It must take one argument specifying the expression to be evaluated, yading@10: which accepts the same constants and functions as the @var{x} and yading@10: @var{y} values. Note that not all constants should be used, for yading@10: example the text size is not known when evaluating the expression, so yading@10: the constants @var{text_w} and @var{text_h} will have an undefined yading@10: value. yading@10: yading@10: @item gmtime yading@10: The time at which the filter is running, expressed in UTC. yading@10: It can accept an argument: a strftime() format string. yading@10: yading@10: @item localtime yading@10: The time at which the filter is running, expressed in the local time zone. yading@10: It can accept an argument: a strftime() format string. yading@10: yading@10: @item n, frame_num yading@10: The frame number, starting from 0. yading@10: yading@10: @item pts yading@10: The timestamp of the current frame, in seconds, with microsecond accuracy. yading@10: yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Draw "Test Text" with font FreeSerif, using the default values for the yading@10: optional parameters. yading@10: yading@10: @example yading@10: drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'" yading@10: @end example yading@10: yading@10: @item yading@10: Draw 'Test Text' with font FreeSerif of size 24 at position x=100 yading@10: and y=50 (counting from the top-left corner of the screen), text is yading@10: yellow with a red box around it. Both the text and the box have an yading@10: opacity of 20%. yading@10: yading@10: @example yading@10: drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\ yading@10: x=100: y=50: fontsize=24: fontcolor=yellow@@0.2: box=1: boxcolor=red@@0.2" yading@10: @end example yading@10: yading@10: Note that the double quotes are not necessary if spaces are not used yading@10: within the parameter list. yading@10: yading@10: @item yading@10: Show the text at the center of the video frame: yading@10: @example yading@10: drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2" yading@10: @end example yading@10: yading@10: @item yading@10: Show a text line sliding from right to left in the last row of the video yading@10: frame. The file @file{LONG_LINE} is assumed to contain a single line yading@10: with no newlines. yading@10: @example yading@10: drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t" yading@10: @end example yading@10: yading@10: @item yading@10: Show the content of file @file{CREDITS} off the bottom of the frame and scroll up. yading@10: @example yading@10: drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t" yading@10: @end example yading@10: yading@10: @item yading@10: Draw a single green letter "g", at the center of the input video. yading@10: The glyph baseline is placed at half screen height. yading@10: @example yading@10: drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent" yading@10: @end example yading@10: yading@10: @item yading@10: Show text for 1 second every 3 seconds: yading@10: @example yading@10: drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:draw=lt(mod(t\,3)\,1):text='blink'" yading@10: @end example yading@10: yading@10: @item yading@10: Use fontconfig to set the font. Note that the colons need to be escaped. yading@10: @example yading@10: drawtext='fontfile=Linux Libertine O-40\:style=Semibold:text=FFmpeg' yading@10: @end example yading@10: yading@10: @item yading@10: Print the date of a real-time encoding (see strftime(3)): yading@10: @example yading@10: drawtext='fontfile=FreeSans.ttf:text=%@{localtime:%a %b %d %Y@}' yading@10: @end example yading@10: yading@10: @end itemize yading@10: yading@10: For more information about libfreetype, check: yading@10: @url{http://www.freetype.org/}. yading@10: yading@10: For more information about fontconfig, check: yading@10: @url{http://freedesktop.org/software/fontconfig/fontconfig-user.html}. yading@10: yading@10: @section edgedetect yading@10: yading@10: Detect and draw edges. The filter uses the Canny Edge Detection algorithm. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item low, high yading@10: Set low and high threshold values used by the Canny thresholding yading@10: algorithm. yading@10: yading@10: The high threshold selects the "strong" edge pixels, which are then yading@10: connected through 8-connectivity with the "weak" edge pixels selected yading@10: by the low threshold. yading@10: yading@10: @var{low} and @var{high} threshold values must be choosen in the range yading@10: [0,1], and @var{low} should be lesser or equal to @var{high}. yading@10: yading@10: Default value for @var{low} is @code{20/255}, and default value for @var{high} yading@10: is @code{50/255}. yading@10: @end table yading@10: yading@10: Example: yading@10: @example yading@10: edgedetect=low=0.1:high=0.4 yading@10: @end example yading@10: yading@10: @section fade yading@10: yading@10: Apply fade-in/out effect to input video. yading@10: yading@10: This filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item type, t yading@10: The effect type -- can be either "in" for fade-in, or "out" for a fade-out yading@10: effect. yading@10: Default is @code{in}. yading@10: yading@10: @item start_frame, s yading@10: Specify the number of the start frame for starting to apply the fade yading@10: effect. Default is 0. yading@10: yading@10: @item nb_frames, n yading@10: The number of frames for which the fade effect has to last. At the end of the yading@10: fade-in effect the output video will have the same intensity as the input video, yading@10: at the end of the fade-out transition the output video will be completely black. yading@10: Default is 25. yading@10: yading@10: @item alpha yading@10: If set to 1, fade only alpha channel, if one exists on the input. yading@10: Default value is 0. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Fade in first 30 frames of video: yading@10: @example yading@10: fade=in:0:30 yading@10: @end example yading@10: yading@10: The command above is equivalent to: yading@10: @example yading@10: fade=t=in:s=0:n=30 yading@10: @end example yading@10: yading@10: @item yading@10: Fade out last 45 frames of a 200-frame video: yading@10: @example yading@10: fade=out:155:45 yading@10: fade=type=out:start_frame=155:nb_frames=45 yading@10: @end example yading@10: yading@10: @item yading@10: Fade in first 25 frames and fade out last 25 frames of a 1000-frame video: yading@10: @example yading@10: fade=in:0:25, fade=out:975:25 yading@10: @end example yading@10: yading@10: @item yading@10: Make first 5 frames black, then fade in from frame 5-24: yading@10: @example yading@10: fade=in:5:20 yading@10: @end example yading@10: yading@10: @item yading@10: Fade in alpha over first 25 frames of video: yading@10: @example yading@10: fade=in:0:25:alpha=1 yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section field yading@10: yading@10: Extract a single field from an interlaced image using stride yading@10: arithmetic to avoid wasting CPU time. The output frames are marked as yading@10: non-interlaced. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item type yading@10: Specify whether to extract the top (if the value is @code{0} or yading@10: @code{top}) or the bottom field (if the value is @code{1} or yading@10: @code{bottom}). yading@10: @end table yading@10: yading@10: @section fieldmatch yading@10: yading@10: Field matching filter for inverse telecine. It is meant to reconstruct the yading@10: progressive frames from a telecined stream. The filter does not drop duplicated yading@10: frames, so to achieve a complete inverse telecine @code{fieldmatch} needs to be yading@10: followed by a decimation filter such as @ref{decimate} in the filtergraph. yading@10: yading@10: The separation of the field matching and the decimation is notably motivated by yading@10: the possibility of inserting a de-interlacing filter fallback between the two. yading@10: If the source has mixed telecined and real interlaced content, yading@10: @code{fieldmatch} will not be able to match fields for the interlaced parts. yading@10: But these remaining combed frames will be marked as interlaced, and thus can be yading@10: de-interlaced by a later filter such as @ref{yadif} before decimation. yading@10: yading@10: In addition to the various configuration options, @code{fieldmatch} can take an yading@10: optional second stream, activated through the @option{ppsrc} option. If yading@10: enabled, the frames reconstruction will be based on the fields and frames from yading@10: this second stream. This allows the first input to be pre-processed in order to yading@10: help the various algorithms of the filter, while keeping the output lossless yading@10: (assuming the fields are matched properly). Typically, a field-aware denoiser, yading@10: or brightness/contrast adjustments can help. yading@10: yading@10: Note that this filter uses the same algorithms as TIVTC/TFM (AviSynth project) yading@10: and VIVTC/VFM (VapourSynth project). The later is a light clone of TFM from yading@10: which @code{fieldmatch} is based on. While the semantic and usage are very yading@10: close, some behaviour and options names can differ. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item order yading@10: Specify the assumed field order of the input stream. Available values are: yading@10: yading@10: @table @samp yading@10: @item auto yading@10: Auto detect parity (use FFmpeg's internal parity value). yading@10: @item bff yading@10: Assume bottom field first. yading@10: @item tff yading@10: Assume top field first. yading@10: @end table yading@10: yading@10: Note that it is sometimes recommended not to trust the parity announced by the yading@10: stream. yading@10: yading@10: Default value is @var{auto}. yading@10: yading@10: @item mode yading@10: Set the matching mode or strategy to use. @option{pc} mode is the safest in the yading@10: sense that it wont risk creating jerkiness due to duplicate frames when yading@10: possible, but if there are bad edits or blended fields it will end up yading@10: outputting combed frames when a good match might actually exist. On the other yading@10: hand, @option{pcn_ub} mode is the most risky in terms of creating jerkiness, yading@10: but will almost always find a good frame if there is one. The other values are yading@10: all somewhere in between @option{pc} and @option{pcn_ub} in terms of risking yading@10: jerkiness and creating duplicate frames versus finding good matches in sections yading@10: with bad edits, orphaned fields, blended fields, etc. yading@10: yading@10: More details about p/c/n/u/b are available in @ref{p/c/n/u/b meaning} section. yading@10: yading@10: Available values are: yading@10: yading@10: @table @samp yading@10: @item pc yading@10: 2-way matching (p/c) yading@10: @item pc_n yading@10: 2-way matching, and trying 3rd match if still combed (p/c + n) yading@10: @item pc_u yading@10: 2-way matching, and trying 3rd match (same order) if still combed (p/c + u) yading@10: @item pc_n_ub yading@10: 2-way matching, trying 3rd match if still combed, and trying 4th/5th matches if yading@10: still combed (p/c + n + u/b) yading@10: @item pcn yading@10: 3-way matching (p/c/n) yading@10: @item pcn_ub yading@10: 3-way matching, and trying 4th/5th matches if all 3 of the original matches are yading@10: detected as combed (p/c/n + u/b) yading@10: @end table yading@10: yading@10: The parenthesis at the end indicate the matches that would be used for that yading@10: mode assuming @option{order}=@var{tff} (and @option{field} on @var{auto} or yading@10: @var{top}). yading@10: yading@10: In terms of speed @option{pc} mode is by far the fastest and @option{pcn_ub} is yading@10: the slowest. yading@10: yading@10: Default value is @var{pc_n}. yading@10: yading@10: @item ppsrc yading@10: Mark the main input stream as a pre-processed input, and enable the secondary yading@10: input stream as the clean source to pick the fields from. See the filter yading@10: introduction for more details. It is similar to the @option{clip2} feature from yading@10: VFM/TFM. yading@10: yading@10: Default value is @code{0} (disabled). yading@10: yading@10: @item field yading@10: Set the field to match from. It is recommended to set this to the same value as yading@10: @option{order} unless you experience matching failures with that setting. In yading@10: certain circumstances changing the field that is used to match from can have a yading@10: large impact on matching performance. Available values are: yading@10: yading@10: @table @samp yading@10: @item auto yading@10: Automatic (same value as @option{order}). yading@10: @item bottom yading@10: Match from the bottom field. yading@10: @item top yading@10: Match from the top field. yading@10: @end table yading@10: yading@10: Default value is @var{auto}. yading@10: yading@10: @item mchroma yading@10: Set whether or not chroma is included during the match comparisons. In most yading@10: cases it is recommended to leave this enabled. You should set this to @code{0} yading@10: only if your clip has bad chroma problems such as heavy rainbowing or other yading@10: artifacts. Setting this to @code{0} could also be used to speed things up at yading@10: the cost of some accuracy. yading@10: yading@10: Default value is @code{1}. yading@10: yading@10: @item y0 yading@10: @item y1 yading@10: These define an exclusion band which excludes the lines between @option{y0} and yading@10: @option{y1} from being included in the field matching decision. An exclusion yading@10: band can be used to ignore subtitles, a logo, or other things that may yading@10: interfere with the matching. @option{y0} sets the starting scan line and yading@10: @option{y1} sets the ending line; all lines in between @option{y0} and yading@10: @option{y1} (including @option{y0} and @option{y1}) will be ignored. Setting yading@10: @option{y0} and @option{y1} to the same value will disable the feature. yading@10: @option{y0} and @option{y1} defaults to @code{0}. yading@10: yading@10: @item scthresh yading@10: Set the scene change detection threshold as a percentage of maximum change on yading@10: the luma plane. Good values are in the @code{[8.0, 14.0]} range. Scene change yading@10: detection is only relevant in case @option{combmatch}=@var{sc}. The range for yading@10: @option{scthresh} is @code{[0.0, 100.0]}. yading@10: yading@10: Default value is @code{12.0}. yading@10: yading@10: @item combmatch yading@10: When @option{combatch} is not @var{none}, @code{fieldmatch} will take into yading@10: account the combed scores of matches when deciding what match to use as the yading@10: final match. Available values are: yading@10: yading@10: @table @samp yading@10: @item none yading@10: No final matching based on combed scores. yading@10: @item sc yading@10: Combed scores are only used when a scene change is detected. yading@10: @item full yading@10: Use combed scores all the time. yading@10: @end table yading@10: yading@10: Default is @var{sc}. yading@10: yading@10: @item combdbg yading@10: Force @code{fieldmatch} to calculate the combed metrics for certain matches and yading@10: print them. This setting is known as @option{micout} in TFM/VFM vocabulary. yading@10: Available values are: yading@10: yading@10: @table @samp yading@10: @item none yading@10: No forced calculation. yading@10: @item pcn yading@10: Force p/c/n calculations. yading@10: @item pcnub yading@10: Force p/c/n/u/b calculations. yading@10: @end table yading@10: yading@10: Default value is @var{none}. yading@10: yading@10: @item cthresh yading@10: This is the area combing threshold used for combed frame detection. This yading@10: essentially controls how "strong" or "visible" combing must be to be detected. yading@10: Larger values mean combing must be more visible and smaller values mean combing yading@10: can be less visible or strong and still be detected. Valid settings are from yading@10: @code{-1} (every pixel will be detected as combed) to @code{255} (no pixel will yading@10: be detected as combed). This is basically a pixel difference value. A good yading@10: range is @code{[8, 12]}. yading@10: yading@10: Default value is @code{9}. yading@10: yading@10: @item chroma yading@10: Sets whether or not chroma is considered in the combed frame decision. Only yading@10: disable this if your source has chroma problems (rainbowing, etc.) that are yading@10: causing problems for the combed frame detection with chroma enabled. Actually, yading@10: using @option{chroma}=@var{0} is usually more reliable, except for the case yading@10: where there is chroma only combing in the source. yading@10: yading@10: Default value is @code{0}. yading@10: yading@10: @item blockx yading@10: @item blocky yading@10: Respectively set the x-axis and y-axis size of the window used during combed yading@10: frame detection. This has to do with the size of the area in which yading@10: @option{combpel} pixels are required to be detected as combed for a frame to be yading@10: declared combed. See the @option{combpel} parameter description for more info. yading@10: Possible values are any number that is a power of 2 starting at 4 and going up yading@10: to 512. yading@10: yading@10: Default value is @code{16}. yading@10: yading@10: @item combpel yading@10: The number of combed pixels inside any of the @option{blocky} by yading@10: @option{blockx} size blocks on the frame for the frame to be detected as yading@10: combed. While @option{cthresh} controls how "visible" the combing must be, this yading@10: setting controls "how much" combing there must be in any localized area (a yading@10: window defined by the @option{blockx} and @option{blocky} settings) on the yading@10: frame. Minimum value is @code{0} and maximum is @code{blocky x blockx} (at yading@10: which point no frames will ever be detected as combed). This setting is known yading@10: as @option{MI} in TFM/VFM vocabulary. yading@10: yading@10: Default value is @code{80}. yading@10: @end table yading@10: yading@10: @anchor{p/c/n/u/b meaning} yading@10: @subsection p/c/n/u/b meaning yading@10: yading@10: @subsubsection p/c/n yading@10: yading@10: We assume the following telecined stream: yading@10: yading@10: @example yading@10: Top fields: 1 2 2 3 4 yading@10: Bottom fields: 1 2 3 4 4 yading@10: @end example yading@10: yading@10: The numbers correspond to the progressive frame the fields relate to. Here, the yading@10: first two frames are progressive, the 3rd and 4th are combed, and so on. yading@10: yading@10: When @code{fieldmatch} is configured to run a matching from bottom yading@10: (@option{field}=@var{bottom}) this is how this input stream get transformed: yading@10: yading@10: @example yading@10: Input stream: yading@10: T 1 2 2 3 4 yading@10: B 1 2 3 4 4 <-- matching reference yading@10: yading@10: Matches: c c n n c yading@10: yading@10: Output stream: yading@10: T 1 2 3 4 4 yading@10: B 1 2 3 4 4 yading@10: @end example yading@10: yading@10: As a result of the field matching, we can see that some frames get duplicated. yading@10: To perform a complete inverse telecine, you need to rely on a decimation filter yading@10: after this operation. See for instance the @ref{decimate} filter. yading@10: yading@10: The same operation now matching from top fields (@option{field}=@var{top}) yading@10: looks like this: yading@10: yading@10: @example yading@10: Input stream: yading@10: T 1 2 2 3 4 <-- matching reference yading@10: B 1 2 3 4 4 yading@10: yading@10: Matches: c c p p c yading@10: yading@10: Output stream: yading@10: T 1 2 2 3 4 yading@10: B 1 2 2 3 4 yading@10: @end example yading@10: yading@10: In these examples, we can see what @var{p}, @var{c} and @var{n} mean; yading@10: basically, they refer to the frame and field of the opposite parity: yading@10: yading@10: @itemize yading@10: @item @var{p} matches the field of the opposite parity in the previous frame yading@10: @item @var{c} matches the field of the opposite parity in the current frame yading@10: @item @var{n} matches the field of the opposite parity in the next frame yading@10: @end itemize yading@10: yading@10: @subsubsection u/b yading@10: yading@10: The @var{u} and @var{b} matching are a bit special in the sense that they match yading@10: from the opposite parity flag. In the following examples, we assume that we are yading@10: currently matching the 2nd frame (Top:2, bottom:2). According to the match, a yading@10: 'x' is placed above and below each matched fields. yading@10: yading@10: With bottom matching (@option{field}=@var{bottom}): yading@10: @example yading@10: Match: c p n b u yading@10: yading@10: x x x x x yading@10: Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 yading@10: Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 yading@10: x x x x x yading@10: yading@10: Output frames: yading@10: 2 1 2 2 2 yading@10: 2 2 2 1 3 yading@10: @end example yading@10: yading@10: With top matching (@option{field}=@var{top}): yading@10: @example yading@10: Match: c p n b u yading@10: yading@10: x x x x x yading@10: Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 yading@10: Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 yading@10: x x x x x yading@10: yading@10: Output frames: yading@10: 2 2 2 1 2 yading@10: 2 1 3 2 2 yading@10: @end example yading@10: yading@10: @subsection Examples yading@10: yading@10: Simple IVTC of a top field first telecined stream: yading@10: @example yading@10: fieldmatch=order=tff:combmatch=none, decimate yading@10: @end example yading@10: yading@10: Advanced IVTC, with fallback on @ref{yadif} for still combed frames: yading@10: @example yading@10: fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate yading@10: @end example yading@10: yading@10: @section fieldorder yading@10: yading@10: Transform the field order of the input video. yading@10: yading@10: This filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item order yading@10: Output field order. Valid values are @var{tff} for top field first or @var{bff} yading@10: for bottom field first. yading@10: @end table yading@10: yading@10: Default value is @samp{tff}. yading@10: yading@10: Transformation is achieved by shifting the picture content up or down yading@10: by one line, and filling the remaining line with appropriate picture content. yading@10: This method is consistent with most broadcast field order converters. yading@10: yading@10: If the input video is not flagged as being interlaced, or it is already yading@10: flagged as being of the required output field order then this filter does yading@10: not alter the incoming video. yading@10: yading@10: This filter is very useful when converting to or from PAL DV material, yading@10: which is bottom field first. yading@10: yading@10: For example: yading@10: @example yading@10: ffmpeg -i in.vob -vf "fieldorder=bff" out.dv yading@10: @end example yading@10: yading@10: @section fifo yading@10: yading@10: Buffer input images and send them when they are requested. yading@10: yading@10: This filter is mainly useful when auto-inserted by the libavfilter yading@10: framework. yading@10: yading@10: The filter does not take parameters. yading@10: yading@10: @anchor{format} yading@10: @section format yading@10: yading@10: Convert the input video to one of the specified pixel formats. yading@10: Libavfilter will try to pick one that is supported for the input to yading@10: the next filter. yading@10: yading@10: This filter accepts the following parameters: yading@10: @table @option yading@10: yading@10: @item pix_fmts yading@10: A '|'-separated list of pixel format names, for example yading@10: "pix_fmts=yuv420p|monow|rgb24". yading@10: yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Convert the input video to the format @var{yuv420p} yading@10: @example yading@10: format=pix_fmts=yuv420p yading@10: @end example yading@10: yading@10: Convert the input video to any of the formats in the list yading@10: @example yading@10: format=pix_fmts=yuv420p|yuv444p|yuv410p yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section fps yading@10: yading@10: Convert the video to specified constant frame rate by duplicating or dropping yading@10: frames as necessary. yading@10: yading@10: This filter accepts the following named parameters: yading@10: @table @option yading@10: yading@10: @item fps yading@10: Desired output frame rate. The default is @code{25}. yading@10: yading@10: @item round yading@10: Rounding method. yading@10: yading@10: Possible values are: yading@10: @table @option yading@10: @item zero yading@10: zero round towards 0 yading@10: @item inf yading@10: round away from 0 yading@10: @item down yading@10: round towards -infinity yading@10: @item up yading@10: round towards +infinity yading@10: @item near yading@10: round to nearest yading@10: @end table yading@10: The default is @code{near}. yading@10: yading@10: @end table yading@10: yading@10: Alternatively, the options can be specified as a flat string: yading@10: @var{fps}[:@var{round}]. yading@10: yading@10: See also the @ref{setpts} filter. yading@10: yading@10: @section framestep yading@10: yading@10: Select one frame every N-th frame. yading@10: yading@10: This filter accepts the following option: yading@10: @table @option yading@10: @item step yading@10: Select frame after every @code{step} frames. yading@10: Allowed values are positive integers higher than 0. Default value is @code{1}. yading@10: @end table yading@10: yading@10: @anchor{frei0r} yading@10: @section frei0r yading@10: yading@10: Apply a frei0r effect to the input video. yading@10: yading@10: To enable compilation of this filter you need to install the frei0r yading@10: header and configure FFmpeg with @code{--enable-frei0r}. yading@10: yading@10: This filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item filter_name yading@10: The name to the frei0r effect to load. If the environment variable yading@10: @env{FREI0R_PATH} is defined, the frei0r effect is searched in each one of the yading@10: directories specified by the colon separated list in @env{FREIOR_PATH}, yading@10: otherwise in the standard frei0r paths, which are in this order: yading@10: @file{HOME/.frei0r-1/lib/}, @file{/usr/local/lib/frei0r-1/}, yading@10: @file{/usr/lib/frei0r-1/}. yading@10: yading@10: @item filter_params yading@10: A '|'-separated list of parameters to pass to the frei0r effect. yading@10: yading@10: @end table yading@10: yading@10: A frei0r effect parameter can be a boolean (whose values are specified yading@10: with "y" and "n"), a double, a color (specified by the syntax yading@10: @var{R}/@var{G}/@var{B}, @var{R}, @var{G}, and @var{B} being float yading@10: numbers from 0.0 to 1.0) or by an @code{av_parse_color()} color yading@10: description), a position (specified by the syntax @var{X}/@var{Y}, yading@10: @var{X} and @var{Y} being float numbers) and a string. yading@10: yading@10: The number and kind of parameters depend on the loaded effect. If an yading@10: effect parameter is not specified the default value is set. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Apply the distort0r effect, set the first two double parameters: yading@10: @example yading@10: frei0r=filter_name=distort0r:filter_params=0.5|0.01 yading@10: @end example yading@10: yading@10: @item yading@10: Apply the colordistance effect, take a color as first parameter: yading@10: @example yading@10: frei0r=colordistance:0.2/0.3/0.4 yading@10: frei0r=colordistance:violet yading@10: frei0r=colordistance:0x112233 yading@10: @end example yading@10: yading@10: @item yading@10: Apply the perspective effect, specify the top left and top right image yading@10: positions: yading@10: @example yading@10: frei0r=perspective:0.2/0.2|0.8/0.2 yading@10: @end example yading@10: @end itemize yading@10: yading@10: For more information see: yading@10: @url{http://frei0r.dyne.org} yading@10: yading@10: @section geq yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item lum_expr yading@10: the luminance expression yading@10: @item cb_expr yading@10: the chrominance blue expression yading@10: @item cr_expr yading@10: the chrominance red expression yading@10: @item alpha_expr yading@10: the alpha expression yading@10: @end table yading@10: yading@10: If one of the chrominance expression is not defined, it falls back on the other yading@10: one. If no alpha expression is specified it will evaluate to opaque value. yading@10: If none of chrominance expressions are yading@10: specified, they will evaluate the luminance expression. yading@10: yading@10: The expressions can use the following variables and functions: yading@10: yading@10: @table @option yading@10: @item N yading@10: The sequential number of the filtered frame, starting from @code{0}. yading@10: yading@10: @item X yading@10: @item Y yading@10: The coordinates of the current sample. yading@10: yading@10: @item W yading@10: @item H yading@10: The width and height of the image. yading@10: yading@10: @item SW yading@10: @item SH yading@10: Width and height scale depending on the currently filtered plane. It is the yading@10: ratio between the corresponding luma plane number of pixels and the current yading@10: plane ones. E.g. for YUV4:2:0 the values are @code{1,1} for the luma plane, and yading@10: @code{0.5,0.5} for chroma planes. yading@10: yading@10: @item T yading@10: Time of the current frame, expressed in seconds. yading@10: yading@10: @item p(x, y) yading@10: Return the value of the pixel at location (@var{x},@var{y}) of the current yading@10: plane. yading@10: yading@10: @item lum(x, y) yading@10: Return the value of the pixel at location (@var{x},@var{y}) of the luminance yading@10: plane. yading@10: yading@10: @item cb(x, y) yading@10: Return the value of the pixel at location (@var{x},@var{y}) of the yading@10: blue-difference chroma plane. Returns 0 if there is no such plane. yading@10: yading@10: @item cr(x, y) yading@10: Return the value of the pixel at location (@var{x},@var{y}) of the yading@10: red-difference chroma plane. Returns 0 if there is no such plane. yading@10: yading@10: @item alpha(x, y) yading@10: Return the value of the pixel at location (@var{x},@var{y}) of the alpha yading@10: plane. Returns 0 if there is no such plane. yading@10: @end table yading@10: yading@10: For functions, if @var{x} and @var{y} are outside the area, the value will be yading@10: automatically clipped to the closer edge. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Flip the image horizontally: yading@10: @example yading@10: geq=p(W-X\,Y) yading@10: @end example yading@10: yading@10: @item yading@10: Generate a bidimensional sine wave, with angle @code{PI/3} and a yading@10: wavelength of 100 pixels: yading@10: @example yading@10: geq=128 + 100*sin(2*(PI/100)*(cos(PI/3)*(X-50*T) + sin(PI/3)*Y)):128:128 yading@10: @end example yading@10: yading@10: @item yading@10: Generate a fancy enigmatic moving light: yading@10: @example yading@10: 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 yading@10: @end example yading@10: yading@10: @item yading@10: Generate a quick emboss effect: yading@10: @example yading@10: format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2' yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section gradfun yading@10: yading@10: Fix the banding artifacts that are sometimes introduced into nearly flat yading@10: regions by truncation to 8bit color depth. yading@10: Interpolate the gradients that should go where the bands are, and yading@10: dither them. yading@10: yading@10: This filter is designed for playback only. Do not use it prior to yading@10: lossy compression, because compression tends to lose the dither and yading@10: bring back the bands. yading@10: yading@10: This filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item strength yading@10: The maximum amount by which the filter will change any one pixel. Also the yading@10: threshold for detecting nearly flat regions. Acceptable values range from .51 to yading@10: 64, default value is 1.2, out-of-range values will be clipped to the valid yading@10: range. yading@10: yading@10: @item radius yading@10: The neighborhood to fit the gradient to. A larger radius makes for smoother yading@10: gradients, but also prevents the filter from modifying the pixels near detailed yading@10: regions. Acceptable values are 8-32, default value is 16, out-of-range values yading@10: will be clipped to the valid range. yading@10: yading@10: @end table yading@10: yading@10: Alternatively, the options can be specified as a flat string: yading@10: @var{strength}[:@var{radius}] yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Apply the filter with a @code{3.5} strength and radius of @code{8}: yading@10: @example yading@10: gradfun=3.5:8 yading@10: @end example yading@10: yading@10: @item yading@10: Specify radius, omitting the strength (which will fall-back to the default yading@10: value): yading@10: @example yading@10: gradfun=radius=8 yading@10: @end example yading@10: yading@10: @end itemize yading@10: yading@10: @section hflip yading@10: yading@10: Flip the input video horizontally. yading@10: yading@10: For example to horizontally flip the input video with @command{ffmpeg}: yading@10: @example yading@10: ffmpeg -i in.avi -vf "hflip" out.avi yading@10: @end example yading@10: yading@10: @section histeq yading@10: This filter applies a global color histogram equalization on a yading@10: per-frame basis. yading@10: yading@10: It can be used to correct video that has a compressed range of pixel yading@10: intensities. The filter redistributes the pixel intensities to yading@10: equalize their distribution across the intensity range. It may be yading@10: viewed as an "automatically adjusting contrast filter". This filter is yading@10: useful only for correcting degraded or poorly captured source yading@10: video. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item strength yading@10: Determine the amount of equalization to be applied. As the strength yading@10: is reduced, the distribution of pixel intensities more-and-more yading@10: approaches that of the input frame. The value must be a float number yading@10: in the range [0,1] and defaults to 0.200. yading@10: yading@10: @item intensity yading@10: Set the maximum intensity that can generated and scale the output yading@10: values appropriately. The strength should be set as desired and then yading@10: the intensity can be limited if needed to avoid washing-out. The value yading@10: must be a float number in the range [0,1] and defaults to 0.210. yading@10: yading@10: @item antibanding yading@10: Set the antibanding level. If enabled the filter will randomly vary yading@10: the luminance of output pixels by a small amount to avoid banding of yading@10: the histogram. Possible values are @code{none}, @code{weak} or yading@10: @code{strong}. It defaults to @code{none}. yading@10: @end table yading@10: yading@10: @section histogram yading@10: yading@10: Compute and draw a color distribution histogram for the input video. yading@10: yading@10: The computed histogram is a representation of distribution of color components yading@10: in an image. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item mode yading@10: Set histogram mode. yading@10: yading@10: It accepts the following values: yading@10: @table @samp yading@10: @item levels yading@10: standard histogram that display color components distribution in an image. yading@10: Displays color graph for each color component. Shows distribution yading@10: of the Y, U, V, A or G, B, R components, depending on input format, yading@10: in current frame. Bellow each graph is color component scale meter. yading@10: yading@10: @item color yading@10: chroma values in vectorscope, if brighter more such chroma values are yading@10: distributed in an image. yading@10: Displays chroma values (U/V color placement) in two dimensional graph yading@10: (which is called a vectorscope). It can be used to read of the hue and yading@10: saturation of the current frame. At a same time it is a histogram. yading@10: The whiter a pixel in the vectorscope, the more pixels of the input frame yading@10: correspond to that pixel (that is the more pixels have this chroma value). yading@10: The V component is displayed on the horizontal (X) axis, with the leftmost yading@10: side being V = 0 and the rightmost side being V = 255. yading@10: The U component is displayed on the vertical (Y) axis, with the top yading@10: representing U = 0 and the bottom representing U = 255. yading@10: yading@10: The position of a white pixel in the graph corresponds to the chroma value yading@10: of a pixel of the input clip. So the graph can be used to read of the yading@10: hue (color flavor) and the saturation (the dominance of the hue in the color). yading@10: As the hue of a color changes, it moves around the square. At the center of yading@10: the square, the saturation is zero, which means that the corresponding pixel yading@10: has no color. If you increase the amount of a specific color, while leaving yading@10: the other colors unchanged, the saturation increases, and you move towards yading@10: the edge of the square. yading@10: yading@10: @item color2 yading@10: chroma values in vectorscope, similar as @code{color} but actual chroma values yading@10: are displayed. yading@10: yading@10: @item waveform yading@10: per row/column color component graph. In row mode graph in the left side represents yading@10: color component value 0 and right side represents value = 255. In column mode top yading@10: side represents color component value = 0 and bottom side represents value = 255. yading@10: @end table yading@10: Default value is @code{levels}. yading@10: yading@10: @item level_height yading@10: Set height of level in @code{levels}. Default value is @code{200}. yading@10: Allowed range is [50, 2048]. yading@10: yading@10: @item scale_height yading@10: Set height of color scale in @code{levels}. Default value is @code{12}. yading@10: Allowed range is [0, 40]. yading@10: yading@10: @item step yading@10: Set step for @code{waveform} mode. Smaller values are useful to find out how much yading@10: of same luminance values across input rows/columns are distributed. yading@10: Default value is @code{10}. Allowed range is [1, 255]. yading@10: yading@10: @item waveform_mode yading@10: Set mode for @code{waveform}. Can be either @code{row}, or @code{column}. yading@10: Default is @code{row}. yading@10: yading@10: @item display_mode yading@10: Set display mode for @code{waveform} and @code{levels}. yading@10: It accepts the following values: yading@10: @table @samp yading@10: @item parade yading@10: Display separate graph for the color components side by side in yading@10: @code{row} waveform mode or one below other in @code{column} waveform mode yading@10: for @code{waveform} histogram mode. For @code{levels} histogram mode yading@10: per color component graphs are placed one bellow other. yading@10: yading@10: This display mode in @code{waveform} histogram mode makes it easy to spot yading@10: color casts in the highlights and shadows of an image, by comparing the yading@10: contours of the top and the bottom of each waveform. yading@10: Since whites, grays, and blacks are characterized by yading@10: exactly equal amounts of red, green, and blue, neutral areas of the yading@10: picture should display three waveforms of roughly equal width/height. yading@10: If not, the correction is easy to make by making adjustments to level the yading@10: three waveforms. yading@10: yading@10: @item overlay yading@10: Presents information that's identical to that in the @code{parade}, except yading@10: that the graphs representing color components are superimposed directly yading@10: over one another. yading@10: yading@10: This display mode in @code{waveform} histogram mode can make it easier to spot yading@10: the relative differences or similarities in overlapping areas of the color yading@10: components that are supposed to be identical, such as neutral whites, grays, yading@10: or blacks. yading@10: @end table yading@10: Default is @code{parade}. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: yading@10: @item yading@10: Calculate and draw histogram: yading@10: @example yading@10: ffplay -i input -vf histogram yading@10: @end example yading@10: yading@10: @end itemize yading@10: yading@10: @section hqdn3d yading@10: yading@10: High precision/quality 3d denoise filter. This filter aims to reduce yading@10: image noise producing smooth images and making still images really yading@10: still. It should enhance compressibility. yading@10: yading@10: It accepts the following optional parameters: yading@10: yading@10: @table @option yading@10: @item luma_spatial yading@10: a non-negative float number which specifies spatial luma strength, yading@10: defaults to 4.0 yading@10: yading@10: @item chroma_spatial yading@10: a non-negative float number which specifies spatial chroma strength, yading@10: defaults to 3.0*@var{luma_spatial}/4.0 yading@10: yading@10: @item luma_tmp yading@10: a float number which specifies luma temporal strength, defaults to yading@10: 6.0*@var{luma_spatial}/4.0 yading@10: yading@10: @item chroma_tmp yading@10: a float number which specifies chroma temporal strength, defaults to yading@10: @var{luma_tmp}*@var{chroma_spatial}/@var{luma_spatial} yading@10: @end table yading@10: yading@10: @section hue yading@10: yading@10: Modify the hue and/or the saturation of the input. yading@10: yading@10: This filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item h yading@10: Specify the hue angle as a number of degrees. It accepts an expression, yading@10: and defaults to "0". yading@10: yading@10: @item s yading@10: Specify the saturation in the [-10,10] range. It accepts a float number and yading@10: defaults to "1". yading@10: yading@10: @item H yading@10: Specify the hue angle as a number of radians. It accepts a float yading@10: number or an expression, and defaults to "0". yading@10: @end table yading@10: yading@10: @option{h} and @option{H} are mutually exclusive, and can't be yading@10: specified at the same time. yading@10: yading@10: The @option{h}, @option{H} and @option{s} option values are yading@10: expressions containing the following constants: yading@10: yading@10: @table @option yading@10: @item n yading@10: frame count of the input frame starting from 0 yading@10: yading@10: @item pts yading@10: presentation timestamp of the input frame expressed in time base units yading@10: yading@10: @item r yading@10: frame rate of the input video, NAN if the input frame rate is unknown yading@10: yading@10: @item t yading@10: timestamp expressed in seconds, NAN if the input timestamp is unknown yading@10: yading@10: @item tb yading@10: time base of the input video yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Set the hue to 90 degrees and the saturation to 1.0: yading@10: @example yading@10: hue=h=90:s=1 yading@10: @end example yading@10: yading@10: @item yading@10: Same command but expressing the hue in radians: yading@10: @example yading@10: hue=H=PI/2:s=1 yading@10: @end example yading@10: yading@10: @item yading@10: Rotate hue and make the saturation swing between 0 yading@10: and 2 over a period of 1 second: yading@10: @example yading@10: hue="H=2*PI*t: s=sin(2*PI*t)+1" yading@10: @end example yading@10: yading@10: @item yading@10: Apply a 3 seconds saturation fade-in effect starting at 0: yading@10: @example yading@10: hue="s=min(t/3\,1)" yading@10: @end example yading@10: yading@10: The general fade-in expression can be written as: yading@10: @example yading@10: hue="s=min(0\, max((t-START)/DURATION\, 1))" yading@10: @end example yading@10: yading@10: @item yading@10: Apply a 3 seconds saturation fade-out effect starting at 5 seconds: yading@10: @example yading@10: hue="s=max(0\, min(1\, (8-t)/3))" yading@10: @end example yading@10: yading@10: The general fade-out expression can be written as: yading@10: @example yading@10: hue="s=max(0\, min(1\, (START+DURATION-t)/DURATION))" yading@10: @end example yading@10: yading@10: @end itemize yading@10: yading@10: @subsection Commands yading@10: yading@10: This filter supports the following commands: yading@10: @table @option yading@10: @item s yading@10: @item h yading@10: @item H yading@10: Modify the hue and/or the saturation of the input video. yading@10: The command accepts the same syntax of the corresponding option. yading@10: yading@10: If the specified expression is not valid, it is kept at its current yading@10: value. yading@10: @end table yading@10: yading@10: @section idet yading@10: yading@10: Detect video interlacing type. yading@10: yading@10: This filter tries to detect if the input is interlaced or progressive, yading@10: top or bottom field first. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item intl_thres yading@10: Set interlacing threshold. yading@10: @item prog_thres yading@10: Set progressive threshold. yading@10: @end table yading@10: yading@10: @section il yading@10: yading@10: Deinterleave or interleave fields. yading@10: yading@10: This filter allows to process interlaced images fields without yading@10: deinterlacing them. Deinterleaving splits the input frame into 2 yading@10: fields (so called half pictures). Odd lines are moved to the top yading@10: half of the output image, even lines to the bottom half. yading@10: You can process (filter) them independently and then re-interleave them. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item luma_mode, l yading@10: @item chroma_mode, s yading@10: @item alpha_mode, a yading@10: Available values for @var{luma_mode}, @var{chroma_mode} and yading@10: @var{alpha_mode} are: yading@10: yading@10: @table @samp yading@10: @item none yading@10: Do nothing. yading@10: yading@10: @item deinterleave, d yading@10: Deinterleave fields, placing one above the other. yading@10: yading@10: @item interleave, i yading@10: Interleave fields. Reverse the effect of deinterleaving. yading@10: @end table yading@10: Default value is @code{none}. yading@10: yading@10: @item luma_swap, ls yading@10: @item chroma_swap, cs yading@10: @item alpha_swap, as yading@10: Swap luma/chroma/alpha fields. Exchange even & odd lines. Default value is @code{0}. yading@10: @end table yading@10: yading@10: @section interlace yading@10: yading@10: Simple interlacing filter from progressive contents. This interleaves upper (or yading@10: lower) lines from odd frames with lower (or upper) lines from even frames, yading@10: halving the frame rate and preserving image height. yading@10: yading@10: @example yading@10: Original Original New Frame yading@10: Frame 'j' Frame 'j+1' (tff) yading@10: ========== =========== ================== yading@10: Line 0 --------------------> Frame 'j' Line 0 yading@10: Line 1 Line 1 ----> Frame 'j+1' Line 1 yading@10: Line 2 ---------------------> Frame 'j' Line 2 yading@10: Line 3 Line 3 ----> Frame 'j+1' Line 3 yading@10: ... ... ... yading@10: New Frame + 1 will be generated by Frame 'j+2' and Frame 'j+3' and so on yading@10: @end example yading@10: yading@10: It accepts the following optional parameters: yading@10: yading@10: @table @option yading@10: @item scan yading@10: determines whether the interlaced frame is taken from the even (tff - default) yading@10: or odd (bff) lines of the progressive frame. yading@10: yading@10: @item lowpass yading@10: Enable (default) or disable the vertical lowpass filter to avoid twitter yading@10: interlacing and reduce moire patterns. yading@10: @end table yading@10: yading@10: @section kerndeint yading@10: yading@10: Deinterlace input video by applying Donald Graft's adaptive kernel yading@10: deinterling. Work on interlaced parts of a video to produce yading@10: progressive frames. yading@10: yading@10: The description of the accepted parameters follows. yading@10: yading@10: @table @option yading@10: @item thresh yading@10: Set the threshold which affects the filter's tolerance when yading@10: determining if a pixel line must be processed. It must be an integer yading@10: in the range [0,255] and defaults to 10. A value of 0 will result in yading@10: applying the process on every pixels. yading@10: yading@10: @item map yading@10: Paint pixels exceeding the threshold value to white if set to 1. yading@10: Default is 0. yading@10: yading@10: @item order yading@10: Set the fields order. Swap fields if set to 1, leave fields alone if yading@10: 0. Default is 0. yading@10: yading@10: @item sharp yading@10: Enable additional sharpening if set to 1. Default is 0. yading@10: yading@10: @item twoway yading@10: Enable twoway sharpening if set to 1. Default is 0. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Apply default values: yading@10: @example yading@10: kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0 yading@10: @end example yading@10: yading@10: @item yading@10: Enable additional sharpening: yading@10: @example yading@10: kerndeint=sharp=1 yading@10: @end example yading@10: yading@10: @item yading@10: Paint processed pixels in white: yading@10: @example yading@10: kerndeint=map=1 yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section lut, lutrgb, lutyuv yading@10: yading@10: Compute a look-up table for binding each pixel component input value yading@10: to an output value, and apply it to input video. yading@10: yading@10: @var{lutyuv} applies a lookup table to a YUV input video, @var{lutrgb} yading@10: to an RGB input video. yading@10: yading@10: These filters accept the following options: yading@10: @table @option yading@10: @item c0 yading@10: set first pixel component expression yading@10: @item c1 yading@10: set second pixel component expression yading@10: @item c2 yading@10: set third pixel component expression yading@10: @item c3 yading@10: set fourth pixel component expression, corresponds to the alpha component yading@10: yading@10: @item r yading@10: set red component expression yading@10: @item g yading@10: set green component expression yading@10: @item b yading@10: set blue component expression yading@10: @item a yading@10: alpha component expression yading@10: yading@10: @item y yading@10: set Y/luminance component expression yading@10: @item u yading@10: set U/Cb component expression yading@10: @item v yading@10: set V/Cr component expression yading@10: @end table yading@10: yading@10: Each of them specifies the expression to use for computing the lookup table for yading@10: the corresponding pixel component values. yading@10: yading@10: The exact component associated to each of the @var{c*} options depends on the yading@10: format in input. yading@10: yading@10: The @var{lut} filter requires either YUV or RGB pixel formats in input, yading@10: @var{lutrgb} requires RGB pixel formats in input, and @var{lutyuv} requires YUV. yading@10: yading@10: The expressions can contain the following constants and functions: yading@10: yading@10: @table @option yading@10: @item w, h yading@10: the input width and height yading@10: yading@10: @item val yading@10: input value for the pixel component yading@10: yading@10: @item clipval yading@10: the input value clipped in the @var{minval}-@var{maxval} range yading@10: yading@10: @item maxval yading@10: maximum value for the pixel component yading@10: yading@10: @item minval yading@10: minimum value for the pixel component yading@10: yading@10: @item negval yading@10: the negated value for the pixel component value clipped in the yading@10: @var{minval}-@var{maxval} range , it corresponds to the expression yading@10: "maxval-clipval+minval" yading@10: yading@10: @item clip(val) yading@10: the computed value in @var{val} clipped in the yading@10: @var{minval}-@var{maxval} range yading@10: yading@10: @item gammaval(gamma) yading@10: the computed gamma correction value of the pixel component value yading@10: clipped in the @var{minval}-@var{maxval} range, corresponds to the yading@10: expression yading@10: "pow((clipval-minval)/(maxval-minval)\,@var{gamma})*(maxval-minval)+minval" yading@10: yading@10: @end table yading@10: yading@10: All expressions default to "val". yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Negate input video: yading@10: @example yading@10: lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val" yading@10: lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val" yading@10: @end example yading@10: yading@10: The above is the same as: yading@10: @example yading@10: lutrgb="r=negval:g=negval:b=negval" yading@10: lutyuv="y=negval:u=negval:v=negval" yading@10: @end example yading@10: yading@10: @item yading@10: Negate luminance: yading@10: @example yading@10: lutyuv=y=negval yading@10: @end example yading@10: yading@10: @item yading@10: Remove chroma components, turns the video into a graytone image: yading@10: @example yading@10: lutyuv="u=128:v=128" yading@10: @end example yading@10: yading@10: @item yading@10: Apply a luma burning effect: yading@10: @example yading@10: lutyuv="y=2*val" yading@10: @end example yading@10: yading@10: @item yading@10: Remove green and blue components: yading@10: @example yading@10: lutrgb="g=0:b=0" yading@10: @end example yading@10: yading@10: @item yading@10: Set a constant alpha channel value on input: yading@10: @example yading@10: format=rgba,lutrgb=a="maxval-minval/2" yading@10: @end example yading@10: yading@10: @item yading@10: Correct luminance gamma by a 0.5 factor: yading@10: @example yading@10: lutyuv=y=gammaval(0.5) yading@10: @end example yading@10: yading@10: @item yading@10: Discard least significant bits of luma: yading@10: @example yading@10: lutyuv=y='bitand(val, 128+64+32)' yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section mp yading@10: yading@10: Apply an MPlayer filter to the input video. yading@10: yading@10: This filter provides a wrapper around most of the filters of yading@10: MPlayer/MEncoder. yading@10: yading@10: This wrapper is considered experimental. Some of the wrapped filters yading@10: may not work properly and we may drop support for them, as they will yading@10: be implemented natively into FFmpeg. Thus you should avoid yading@10: depending on them when writing portable scripts. yading@10: yading@10: The filters accepts the parameters: yading@10: @var{filter_name}[:=]@var{filter_params} yading@10: yading@10: @var{filter_name} is the name of a supported MPlayer filter, yading@10: @var{filter_params} is a string containing the parameters accepted by yading@10: the named filter. yading@10: yading@10: The list of the currently supported filters follows: yading@10: @table @var yading@10: @item dint yading@10: @item down3dright yading@10: @item eq2 yading@10: @item eq yading@10: @item fil yading@10: @item fspp yading@10: @item ilpack yading@10: @item mcdeint yading@10: @item ow yading@10: @item perspective yading@10: @item phase yading@10: @item pp7 yading@10: @item pullup yading@10: @item qp yading@10: @item sab yading@10: @item softpulldown yading@10: @item spp yading@10: @item tinterlace yading@10: @item uspp yading@10: @end table yading@10: yading@10: The parameter syntax and behavior for the listed filters are the same yading@10: of the corresponding MPlayer filters. For detailed instructions check yading@10: the "VIDEO FILTERS" section in the MPlayer manual. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Adjust gamma, brightness, contrast: yading@10: @example yading@10: mp=eq2=1.0:2:0.5 yading@10: @end example yading@10: @end itemize yading@10: yading@10: See also mplayer(1), @url{http://www.mplayerhq.hu/}. yading@10: yading@10: @section mpdecimate yading@10: yading@10: Drop frames that do not differ greatly from the previous frame in yading@10: order to reduce frame rate. yading@10: yading@10: The main use of this filter is for very-low-bitrate encoding yading@10: (e.g. streaming over dialup modem), but it could in theory be used for yading@10: fixing movies that were inverse-telecined incorrectly. yading@10: yading@10: A description of the accepted options follows. yading@10: yading@10: @table @option yading@10: @item max yading@10: Set the maximum number of consecutive frames which can be dropped (if yading@10: positive), or the minimum interval between dropped frames (if yading@10: negative). If the value is 0, the frame is dropped unregarding the yading@10: number of previous sequentially dropped frames. yading@10: yading@10: Default value is 0. yading@10: yading@10: @item hi yading@10: @item lo yading@10: @item frac yading@10: Set the dropping threshold values. yading@10: yading@10: Values for @option{hi} and @option{lo} are for 8x8 pixel blocks and yading@10: represent actual pixel value differences, so a threshold of 64 yading@10: corresponds to 1 unit of difference for each pixel, or the same spread yading@10: out differently over the block. yading@10: yading@10: A frame is a candidate for dropping if no 8x8 blocks differ by more yading@10: than a threshold of @option{hi}, and if no more than @option{frac} blocks (1 yading@10: meaning the whole image) differ by more than a threshold of @option{lo}. yading@10: yading@10: Default value for @option{hi} is 64*12, default value for @option{lo} is yading@10: 64*5, and default value for @option{frac} is 0.33. yading@10: @end table yading@10: yading@10: yading@10: @section negate yading@10: yading@10: Negate input video. yading@10: yading@10: This filter accepts an integer in input, if non-zero it negates the yading@10: alpha component (if available). The default value in input is 0. yading@10: yading@10: @section noformat yading@10: yading@10: Force libavfilter not to use any of the specified pixel formats for the yading@10: input to the next filter. yading@10: yading@10: This filter accepts the following parameters: yading@10: @table @option yading@10: yading@10: @item pix_fmts yading@10: A '|'-separated list of pixel format names, for example yading@10: "pix_fmts=yuv420p|monow|rgb24". yading@10: yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Force libavfilter to use a format different from @var{yuv420p} for the yading@10: input to the vflip filter: yading@10: @example yading@10: noformat=pix_fmts=yuv420p,vflip yading@10: @end example yading@10: yading@10: @item yading@10: Convert the input video to any of the formats not contained in the list: yading@10: @example yading@10: noformat=yuv420p|yuv444p|yuv410p yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section noise yading@10: yading@10: Add noise on video input frame. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item all_seed yading@10: @item c0_seed yading@10: @item c1_seed yading@10: @item c2_seed yading@10: @item c3_seed yading@10: Set noise seed for specific pixel component or all pixel components in case yading@10: of @var{all_seed}. Default value is @code{123457}. yading@10: yading@10: @item all_strength, alls yading@10: @item c0_strength, c0s yading@10: @item c1_strength, c1s yading@10: @item c2_strength, c2s yading@10: @item c3_strength, c3s yading@10: Set noise strength for specific pixel component or all pixel components in case yading@10: @var{all_strength}. Default value is @code{0}. Allowed range is [0, 100]. yading@10: yading@10: @item all_flags, allf yading@10: @item c0_flags, c0f yading@10: @item c1_flags, c1f yading@10: @item c2_flags, c2f yading@10: @item c3_flags, c3f yading@10: Set pixel component flags or set flags for all components if @var{all_flags}. yading@10: Available values for component flags are: yading@10: @table @samp yading@10: @item a yading@10: averaged temporal noise (smoother) yading@10: @item p yading@10: mix random noise with a (semi)regular pattern yading@10: @item q yading@10: higher quality (slightly better looking, slightly slower) yading@10: @item t yading@10: temporal noise (noise pattern changes between frames) yading@10: @item u yading@10: uniform noise (gaussian otherwise) yading@10: @end table yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: Add temporal and uniform noise to input video: yading@10: @example yading@10: noise=alls=20:allf=t+u yading@10: @end example yading@10: yading@10: @section null yading@10: yading@10: Pass the video source unchanged to the output. yading@10: yading@10: @section ocv yading@10: yading@10: Apply video transform using libopencv. yading@10: yading@10: To enable this filter install libopencv library and headers and yading@10: configure FFmpeg with @code{--enable-libopencv}. yading@10: yading@10: This filter accepts the following parameters: yading@10: yading@10: @table @option yading@10: yading@10: @item filter_name yading@10: The name of the libopencv filter to apply. yading@10: yading@10: @item filter_params yading@10: The parameters to pass to the libopencv filter. If not specified the default yading@10: values are assumed. yading@10: yading@10: @end table yading@10: yading@10: Refer to the official libopencv documentation for more precise yading@10: information: yading@10: @url{http://opencv.willowgarage.com/documentation/c/image_filtering.html} yading@10: yading@10: Follows the list of supported libopencv filters. yading@10: yading@10: @anchor{dilate} yading@10: @subsection dilate yading@10: yading@10: Dilate an image by using a specific structuring element. yading@10: This filter corresponds to the libopencv function @code{cvDilate}. yading@10: yading@10: It accepts the parameters: @var{struct_el}|@var{nb_iterations}. yading@10: yading@10: @var{struct_el} represents a structuring element, and has the syntax: yading@10: @var{cols}x@var{rows}+@var{anchor_x}x@var{anchor_y}/@var{shape} yading@10: yading@10: @var{cols} and @var{rows} represent the number of columns and rows of yading@10: the structuring element, @var{anchor_x} and @var{anchor_y} the anchor yading@10: point, and @var{shape} the shape for the structuring element, and yading@10: can be one of the values "rect", "cross", "ellipse", "custom". yading@10: yading@10: If the value for @var{shape} is "custom", it must be followed by a yading@10: string of the form "=@var{filename}". The file with name yading@10: @var{filename} is assumed to represent a binary image, with each yading@10: printable character corresponding to a bright pixel. When a custom yading@10: @var{shape} is used, @var{cols} and @var{rows} are ignored, the number yading@10: or columns and rows of the read file are assumed instead. yading@10: yading@10: The default value for @var{struct_el} is "3x3+0x0/rect". yading@10: yading@10: @var{nb_iterations} specifies the number of times the transform is yading@10: applied to the image, and defaults to 1. yading@10: yading@10: Follow some example: yading@10: @example yading@10: # use the default values yading@10: ocv=dilate yading@10: yading@10: # dilate using a structuring element with a 5x5 cross, iterate two times yading@10: ocv=filter_name=dilate:filter_params=5x5+2x2/cross|2 yading@10: yading@10: # read the shape from the file diamond.shape, iterate two times yading@10: # the file diamond.shape may contain a pattern of characters like this: yading@10: # * yading@10: # *** yading@10: # ***** yading@10: # *** yading@10: # * yading@10: # the specified cols and rows are ignored (but not the anchor point coordinates) yading@10: ocv=dilate:0x0+2x2/custom=diamond.shape|2 yading@10: @end example yading@10: yading@10: @subsection erode yading@10: yading@10: Erode an image by using a specific structuring element. yading@10: This filter corresponds to the libopencv function @code{cvErode}. yading@10: yading@10: The filter accepts the parameters: @var{struct_el}:@var{nb_iterations}, yading@10: with the same syntax and semantics as the @ref{dilate} filter. yading@10: yading@10: @subsection smooth yading@10: yading@10: Smooth the input video. yading@10: yading@10: The filter takes the following parameters: yading@10: @var{type}|@var{param1}|@var{param2}|@var{param3}|@var{param4}. yading@10: yading@10: @var{type} is the type of smooth filter to apply, and can be one of yading@10: the following values: "blur", "blur_no_scale", "median", "gaussian", yading@10: "bilateral". The default value is "gaussian". yading@10: yading@10: @var{param1}, @var{param2}, @var{param3}, and @var{param4} are yading@10: parameters whose meanings depend on smooth type. @var{param1} and yading@10: @var{param2} accept integer positive values or 0, @var{param3} and yading@10: @var{param4} accept float values. yading@10: yading@10: The default value for @var{param1} is 3, the default value for the yading@10: other parameters is 0. yading@10: yading@10: These parameters correspond to the parameters assigned to the yading@10: libopencv function @code{cvSmooth}. yading@10: yading@10: @anchor{overlay} yading@10: @section overlay yading@10: yading@10: Overlay one video on top of another. yading@10: yading@10: It takes two inputs and one output, the first input is the "main" yading@10: video on which the second input is overlayed. yading@10: yading@10: This filter accepts the following parameters: yading@10: yading@10: A description of the accepted options follows. yading@10: yading@10: @table @option yading@10: @item x yading@10: @item y yading@10: Set the expression for the x and y coordinates of the overlayed video yading@10: on the main video. Default value is "0" for both expressions. In case yading@10: the expression is invalid, it is set to a huge value (meaning that the yading@10: overlay will not be displayed within the output visible area). yading@10: yading@10: @item enable yading@10: Set the expression which enables the overlay. If the evaluation is yading@10: different from 0, the overlay is displayed on top of the input yading@10: frame. By default it is "1". yading@10: yading@10: @item eval yading@10: Set when the expressions for @option{x}, @option{y}, and yading@10: @option{enable} are evaluated. yading@10: yading@10: It accepts the following values: yading@10: @table @samp yading@10: @item init yading@10: only evaluate expressions once during the filter initialization or yading@10: when a command is processed yading@10: yading@10: @item frame yading@10: evaluate expressions for each incoming frame yading@10: @end table yading@10: yading@10: Default value is @samp{frame}. yading@10: yading@10: @item shortest yading@10: If set to 1, force the output to terminate when the shortest input yading@10: terminates. Default value is 0. yading@10: yading@10: @item format yading@10: Set the format for the output video. yading@10: yading@10: It accepts the following values: yading@10: @table @samp yading@10: @item yuv420 yading@10: force YUV420 output yading@10: yading@10: @item yuv444 yading@10: force YUV444 output yading@10: yading@10: @item rgb yading@10: force RGB output yading@10: @end table yading@10: yading@10: Default value is @samp{yuv420}. yading@10: yading@10: @item rgb @emph{(deprecated)} yading@10: If set to 1, force the filter to accept inputs in the RGB yading@10: color space. Default value is 0. This option is deprecated, use yading@10: @option{format} instead. yading@10: yading@10: @item repeatlast yading@10: If set to 1, force the filter to draw the last overlay frame over the yading@10: main input until the end of the stream. A value of 0 disables this yading@10: behavior, which is enabled by default. yading@10: @end table yading@10: yading@10: The @option{x}, @option{y}, and @option{enable} expressions can yading@10: contain the following parameters. yading@10: yading@10: @table @option yading@10: @item main_w, W yading@10: @item main_h, H yading@10: main input width and height yading@10: yading@10: @item overlay_w, w yading@10: @item overlay_h, h yading@10: overlay input width and height yading@10: yading@10: @item x yading@10: @item y yading@10: the computed values for @var{x} and @var{y}. They are evaluated for yading@10: each new frame. yading@10: yading@10: @item hsub yading@10: @item vsub yading@10: horizontal and vertical chroma subsample values of the output yading@10: format. For example for the pixel format "yuv422p" @var{hsub} is 2 and yading@10: @var{vsub} is 1. yading@10: yading@10: @item n yading@10: the number of input frame, starting from 0 yading@10: yading@10: @item pos yading@10: the position in the file of the input frame, NAN if unknown yading@10: yading@10: @item t yading@10: timestamp expressed in seconds, NAN if the input timestamp is unknown yading@10: @end table yading@10: yading@10: Note that the @var{n}, @var{pos}, @var{t} variables are available only yading@10: when evaluation is done @emph{per frame}, and will evaluate to NAN yading@10: when @option{eval} is set to @samp{init}. yading@10: yading@10: Be aware that frames are taken from each input video in timestamp yading@10: order, hence, if their initial timestamps differ, it is a a good idea yading@10: to pass the two inputs through a @var{setpts=PTS-STARTPTS} filter to yading@10: have them begin in the same zero timestamp, as it does the example for yading@10: the @var{movie} filter. yading@10: yading@10: You can chain together more overlays but you should test the yading@10: efficiency of such approach. yading@10: yading@10: @subsection Commands yading@10: yading@10: This filter supports the following commands: yading@10: @table @option yading@10: @item x yading@10: @item y yading@10: @item enable yading@10: Modify the x/y and enable overlay of the overlay input. yading@10: The command accepts the same syntax of the corresponding option. yading@10: yading@10: If the specified expression is not valid, it is kept at its current yading@10: value. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Draw the overlay at 10 pixels from the bottom right corner of the main yading@10: video: yading@10: @example yading@10: overlay=main_w-overlay_w-10:main_h-overlay_h-10 yading@10: @end example yading@10: yading@10: Using named options the example above becomes: yading@10: @example yading@10: overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10 yading@10: @end example yading@10: yading@10: @item yading@10: Insert a transparent PNG logo in the bottom left corner of the input, yading@10: using the @command{ffmpeg} tool with the @code{-filter_complex} option: yading@10: @example yading@10: ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output yading@10: @end example yading@10: yading@10: @item yading@10: Insert 2 different transparent PNG logos (second logo on bottom yading@10: right corner) using the @command{ffmpeg} tool: yading@10: @example yading@10: 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 yading@10: @end example yading@10: yading@10: @item yading@10: Add a transparent color layer on top of the main video, @code{WxH} yading@10: must specify the size of the main input to the overlay filter: yading@10: @example yading@10: color=color=red@@.3:size=WxH [over]; [in][over] overlay [out] yading@10: @end example yading@10: yading@10: @item yading@10: Play an original video and a filtered version (here with the deshake yading@10: filter) side by side using the @command{ffplay} tool: yading@10: @example yading@10: ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w' yading@10: @end example yading@10: yading@10: The above command is the same as: yading@10: @example yading@10: ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w' yading@10: @end example yading@10: yading@10: @item yading@10: Make a sliding overlay appearing from the left to the right top part of the yading@10: screen starting since time 2: yading@10: @example yading@10: overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0 yading@10: @end example yading@10: yading@10: @item yading@10: Compose output by putting two input videos side to side: yading@10: @example yading@10: ffmpeg -i left.avi -i right.avi -filter_complex " yading@10: nullsrc=size=200x100 [background]; yading@10: [0:v] setpts=PTS-STARTPTS, scale=100x100 [left]; yading@10: [1:v] setpts=PTS-STARTPTS, scale=100x100 [right]; yading@10: [background][left] overlay=shortest=1 [background+left]; yading@10: [background+left][right] overlay=shortest=1:x=100 [left+right] yading@10: " yading@10: @end example yading@10: yading@10: @item yading@10: Chain several overlays in cascade: yading@10: @example yading@10: nullsrc=s=200x200 [bg]; yading@10: testsrc=s=100x100, split=4 [in0][in1][in2][in3]; yading@10: [in0] lutrgb=r=0, [bg] overlay=0:0 [mid0]; yading@10: [in1] lutrgb=g=0, [mid0] overlay=100:0 [mid1]; yading@10: [in2] lutrgb=b=0, [mid1] overlay=0:100 [mid2]; yading@10: [in3] null, [mid2] overlay=100:100 [out0] yading@10: @end example yading@10: yading@10: @end itemize yading@10: yading@10: @section pad yading@10: yading@10: Add paddings to the input image, and place the original input at the yading@10: given coordinates @var{x}, @var{y}. yading@10: yading@10: This filter accepts the following parameters: yading@10: yading@10: @table @option yading@10: @item width, w yading@10: @item height, h yading@10: Specify an expression for the size of the output image with the yading@10: paddings added. If the value for @var{width} or @var{height} is 0, the yading@10: corresponding input size is used for the output. yading@10: yading@10: The @var{width} expression can reference the value set by the yading@10: @var{height} expression, and vice versa. yading@10: yading@10: The default value of @var{width} and @var{height} is 0. yading@10: yading@10: @item x yading@10: @item y yading@10: Specify an expression for the offsets where to place the input image yading@10: in the padded area with respect to the top/left border of the output yading@10: image. yading@10: yading@10: The @var{x} expression can reference the value set by the @var{y} yading@10: expression, and vice versa. yading@10: yading@10: The default value of @var{x} and @var{y} is 0. yading@10: yading@10: @item color yading@10: Specify the color of the padded area, it can be the name of a color yading@10: (case insensitive match) or a 0xRRGGBB[AA] sequence. yading@10: yading@10: The default value of @var{color} is "black". yading@10: @end table yading@10: yading@10: The value for the @var{width}, @var{height}, @var{x}, and @var{y} yading@10: options are expressions containing the following constants: yading@10: yading@10: @table @option yading@10: @item in_w, in_h yading@10: the input video width and height yading@10: yading@10: @item iw, ih yading@10: same as @var{in_w} and @var{in_h} yading@10: yading@10: @item out_w, out_h yading@10: the output width and height, that is the size of the padded area as yading@10: specified by the @var{width} and @var{height} expressions yading@10: yading@10: @item ow, oh yading@10: same as @var{out_w} and @var{out_h} yading@10: yading@10: @item x, y yading@10: x and y offsets as specified by the @var{x} and @var{y} yading@10: expressions, or NAN if not yet specified yading@10: yading@10: @item a yading@10: same as @var{iw} / @var{ih} yading@10: yading@10: @item sar yading@10: input sample aspect ratio yading@10: yading@10: @item dar yading@10: input display aspect ratio, it is the same as (@var{iw} / @var{ih}) * @var{sar} yading@10: yading@10: @item hsub, vsub yading@10: horizontal and vertical chroma subsample values. For example for the yading@10: pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Add paddings with color "violet" to the input video. Output video yading@10: size is 640x480, the top-left corner of the input video is placed at yading@10: column 0, row 40: yading@10: @example yading@10: pad=640:480:0:40:violet yading@10: @end example yading@10: yading@10: The example above is equivalent to the following command: yading@10: @example yading@10: pad=width=640:height=480:x=0:y=40:color=violet yading@10: @end example yading@10: yading@10: @item yading@10: Pad the input to get an output with dimensions increased by 3/2, yading@10: and put the input video at the center of the padded area: yading@10: @example yading@10: pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2" yading@10: @end example yading@10: yading@10: @item yading@10: Pad the input to get a squared output with size equal to the maximum yading@10: value between the input width and height, and put the input video at yading@10: the center of the padded area: yading@10: @example yading@10: pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2" yading@10: @end example yading@10: yading@10: @item yading@10: Pad the input to get a final w/h ratio of 16:9: yading@10: @example yading@10: pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2" yading@10: @end example yading@10: yading@10: @item yading@10: In case of anamorphic video, in order to set the output display aspect yading@10: correctly, it is necessary to use @var{sar} in the expression, yading@10: according to the relation: yading@10: @example yading@10: (ih * X / ih) * sar = output_dar yading@10: X = output_dar / sar yading@10: @end example yading@10: yading@10: Thus the previous example needs to be modified to: yading@10: @example yading@10: pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2" yading@10: @end example yading@10: yading@10: @item yading@10: Double output size and put the input video in the bottom-right yading@10: corner of the output padded area: yading@10: @example yading@10: pad="2*iw:2*ih:ow-iw:oh-ih" yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section pixdesctest yading@10: yading@10: Pixel format descriptor test filter, mainly useful for internal yading@10: testing. The output video should be equal to the input video. yading@10: yading@10: For example: yading@10: @example yading@10: format=monow, pixdesctest yading@10: @end example yading@10: yading@10: can be used to test the monowhite pixel format descriptor definition. yading@10: yading@10: @section pp yading@10: yading@10: Enable the specified chain of postprocessing subfilters using libpostproc. This yading@10: library should be automatically selected with a GPL build (@code{--enable-gpl}). yading@10: Subfilters must be separated by '/' and can be disabled by prepending a '-'. yading@10: Each subfilter and some options have a short and a long name that can be used yading@10: interchangeably, i.e. dr/dering are the same. yading@10: yading@10: The filters accept the following options: yading@10: yading@10: @table @option yading@10: @item subfilters yading@10: Set postprocessing subfilters string. yading@10: @end table yading@10: yading@10: All subfilters share common options to determine their scope: yading@10: yading@10: @table @option yading@10: @item a/autoq yading@10: Honor the quality commands for this subfilter. yading@10: yading@10: @item c/chrom yading@10: Do chrominance filtering, too (default). yading@10: yading@10: @item y/nochrom yading@10: Do luminance filtering only (no chrominance). yading@10: yading@10: @item n/noluma yading@10: Do chrominance filtering only (no luminance). yading@10: @end table yading@10: yading@10: These options can be appended after the subfilter name, separated by a '|'. yading@10: yading@10: Available subfilters are: yading@10: yading@10: @table @option yading@10: @item hb/hdeblock[|difference[|flatness]] yading@10: Horizontal deblocking filter yading@10: @table @option yading@10: @item difference yading@10: Difference factor where higher values mean more deblocking (default: @code{32}). yading@10: @item flatness yading@10: Flatness threshold where lower values mean more deblocking (default: @code{39}). yading@10: @end table yading@10: yading@10: @item vb/vdeblock[|difference[|flatness]] yading@10: Vertical deblocking filter yading@10: @table @option yading@10: @item difference yading@10: Difference factor where higher values mean more deblocking (default: @code{32}). yading@10: @item flatness yading@10: Flatness threshold where lower values mean more deblocking (default: @code{39}). yading@10: @end table yading@10: yading@10: @item ha/hadeblock[|difference[|flatness]] yading@10: Accurate horizontal deblocking filter yading@10: @table @option yading@10: @item difference yading@10: Difference factor where higher values mean more deblocking (default: @code{32}). yading@10: @item flatness yading@10: Flatness threshold where lower values mean more deblocking (default: @code{39}). yading@10: @end table yading@10: yading@10: @item va/vadeblock[|difference[|flatness]] yading@10: Accurate vertical deblocking filter yading@10: @table @option yading@10: @item difference yading@10: Difference factor where higher values mean more deblocking (default: @code{32}). yading@10: @item flatness yading@10: Flatness threshold where lower values mean more deblocking (default: @code{39}). yading@10: @end table yading@10: @end table yading@10: yading@10: The horizontal and vertical deblocking filters share the difference and yading@10: flatness values so you cannot set different horizontal and vertical yading@10: thresholds. yading@10: yading@10: @table @option yading@10: @item h1/x1hdeblock yading@10: Experimental horizontal deblocking filter yading@10: yading@10: @item v1/x1vdeblock yading@10: Experimental vertical deblocking filter yading@10: yading@10: @item dr/dering yading@10: Deringing filter yading@10: yading@10: @item tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], temporal noise reducer yading@10: @table @option yading@10: @item threshold1 yading@10: larger -> stronger filtering yading@10: @item threshold2 yading@10: larger -> stronger filtering yading@10: @item threshold3 yading@10: larger -> stronger filtering yading@10: @end table yading@10: yading@10: @item al/autolevels[:f/fullyrange], automatic brightness / contrast correction yading@10: @table @option yading@10: @item f/fullyrange yading@10: Stretch luminance to @code{0-255}. yading@10: @end table yading@10: yading@10: @item lb/linblenddeint yading@10: Linear blend deinterlacing filter that deinterlaces the given block by yading@10: filtering all lines with a @code{(1 2 1)} filter. yading@10: yading@10: @item li/linipoldeint yading@10: Linear interpolating deinterlacing filter that deinterlaces the given block by yading@10: linearly interpolating every second line. yading@10: yading@10: @item ci/cubicipoldeint yading@10: Cubic interpolating deinterlacing filter deinterlaces the given block by yading@10: cubically interpolating every second line. yading@10: yading@10: @item md/mediandeint yading@10: Median deinterlacing filter that deinterlaces the given block by applying a yading@10: median filter to every second line. yading@10: yading@10: @item fd/ffmpegdeint yading@10: FFmpeg deinterlacing filter that deinterlaces the given block by filtering every yading@10: second line with a @code{(-1 4 2 4 -1)} filter. yading@10: yading@10: @item l5/lowpass5 yading@10: Vertically applied FIR lowpass deinterlacing filter that deinterlaces the given yading@10: block by filtering all lines with a @code{(-1 2 6 2 -1)} filter. yading@10: yading@10: @item fq/forceQuant[|quantizer] yading@10: Overrides the quantizer table from the input with the constant quantizer you yading@10: specify. yading@10: @table @option yading@10: @item quantizer yading@10: Quantizer to use yading@10: @end table yading@10: yading@10: @item de/default yading@10: Default pp filter combination (@code{hb|a,vb|a,dr|a}) yading@10: yading@10: @item fa/fast yading@10: Fast pp filter combination (@code{h1|a,v1|a,dr|a}) yading@10: yading@10: @item ac yading@10: High quality pp filter combination (@code{ha|a|128|7,va|a,dr|a}) yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Apply horizontal and vertical deblocking, deringing and automatic yading@10: brightness/contrast: yading@10: @example yading@10: pp=hb/vb/dr/al yading@10: @end example yading@10: yading@10: @item yading@10: Apply default filters without brightness/contrast correction: yading@10: @example yading@10: pp=de/-al yading@10: @end example yading@10: yading@10: @item yading@10: Apply default filters and temporal denoiser: yading@10: @example yading@10: pp=default/tmpnoise|1|2|3 yading@10: @end example yading@10: yading@10: @item yading@10: Apply deblocking on luminance only, and switch vertical deblocking on or off yading@10: automatically depending on available CPU time: yading@10: @example yading@10: pp=hb|y/vb|a yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section removelogo yading@10: yading@10: Suppress a TV station logo, using an image file to determine which yading@10: pixels comprise the logo. It works by filling in the pixels that yading@10: comprise the logo with neighboring pixels. yading@10: yading@10: The filters accept the following options: yading@10: yading@10: @table @option yading@10: @item filename, f yading@10: Set the filter bitmap file, which can be any image format supported by yading@10: libavformat. The width and height of the image file must match those of the yading@10: video stream being processed. yading@10: @end table yading@10: yading@10: Pixels in the provided bitmap image with a value of zero are not yading@10: considered part of the logo, non-zero pixels are considered part of yading@10: the logo. If you use white (255) for the logo and black (0) for the yading@10: rest, you will be safe. For making the filter bitmap, it is yading@10: recommended to take a screen capture of a black frame with the logo yading@10: visible, and then using a threshold filter followed by the erode yading@10: filter once or twice. yading@10: yading@10: If needed, little splotches can be fixed manually. Remember that if yading@10: logo pixels are not covered, the filter quality will be much yading@10: reduced. Marking too many pixels as part of the logo does not hurt as yading@10: much, but it will increase the amount of blurring needed to cover over yading@10: the image and will destroy more information than necessary, and extra yading@10: pixels will slow things down on a large logo. yading@10: yading@10: @section scale yading@10: yading@10: Scale (resize) the input video, using the libswscale library. yading@10: yading@10: The scale filter forces the output display aspect ratio to be the same yading@10: of the input, by changing the output sample aspect ratio. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item width, w yading@10: Output video width. yading@10: default value is @code{iw}. See below yading@10: for the list of accepted constants. yading@10: yading@10: @item height, h yading@10: Output video height. yading@10: default value is @code{ih}. yading@10: See below for the list of accepted constants. yading@10: yading@10: @item interl yading@10: Set the interlacing. It accepts the following values: yading@10: yading@10: @table @option yading@10: @item 1 yading@10: force interlaced aware scaling yading@10: yading@10: @item 0 yading@10: do not apply interlaced scaling yading@10: yading@10: @item -1 yading@10: select interlaced aware scaling depending on whether the source frames yading@10: are flagged as interlaced or not yading@10: @end table yading@10: yading@10: Default value is @code{0}. yading@10: yading@10: @item flags yading@10: Set libswscale scaling flags. If not explictly specified the filter yading@10: applies a bilinear scaling algorithm. yading@10: yading@10: @item size, s yading@10: Set the video size, the value must be a valid abbreviation or in the yading@10: form @var{width}x@var{height}. yading@10: @end table yading@10: yading@10: The values of the @var{w} and @var{h} options are expressions yading@10: containing the following constants: yading@10: yading@10: @table @option yading@10: @item in_w, in_h yading@10: the input width and height yading@10: yading@10: @item iw, ih yading@10: same as @var{in_w} and @var{in_h} yading@10: yading@10: @item out_w, out_h yading@10: the output (cropped) width and height yading@10: yading@10: @item ow, oh yading@10: same as @var{out_w} and @var{out_h} yading@10: yading@10: @item a yading@10: same as @var{iw} / @var{ih} yading@10: yading@10: @item sar yading@10: input sample aspect ratio yading@10: yading@10: @item dar yading@10: input display aspect ratio, it is the same as (@var{iw} / @var{ih}) * @var{sar} yading@10: yading@10: @item hsub, vsub yading@10: horizontal and vertical chroma subsample values. For example for the yading@10: pixel format "yuv422p" @var{hsub} is 2 and @var{vsub} is 1. yading@10: @end table yading@10: yading@10: If the input image format is different from the format requested by yading@10: the next filter, the scale filter will convert the input to the yading@10: requested format. yading@10: yading@10: If the value for @var{w} or @var{h} is 0, the respective input yading@10: size is used for the output. yading@10: yading@10: If the value for @var{w} or @var{h} is -1, the scale filter will use, for the yading@10: respective output size, a value that maintains the aspect ratio of the input yading@10: image. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Scale the input video to a size of 200x100: yading@10: @example yading@10: scale=w=200:h=100 yading@10: @end example yading@10: yading@10: This is equivalent to: yading@10: @example yading@10: scale=w=200:h=100 yading@10: @end example yading@10: yading@10: or: yading@10: @example yading@10: scale=200x100 yading@10: @end example yading@10: yading@10: @item yading@10: Specify a size abbreviation for the output size: yading@10: @example yading@10: scale=qcif yading@10: @end example yading@10: yading@10: which can also be written as: yading@10: @example yading@10: scale=size=qcif yading@10: @end example yading@10: yading@10: @item yading@10: Scale the input to 2x: yading@10: @example yading@10: scale=w=2*iw:h=2*ih yading@10: @end example yading@10: yading@10: @item yading@10: The above is the same as: yading@10: @example yading@10: scale=2*in_w:2*in_h yading@10: @end example yading@10: yading@10: @item yading@10: Scale the input to 2x with forced interlaced scaling: yading@10: @example yading@10: scale=2*iw:2*ih:interl=1 yading@10: @end example yading@10: yading@10: @item yading@10: Scale the input to half size: yading@10: @example yading@10: scale=w=iw/2:h=ih/2 yading@10: @end example yading@10: yading@10: @item yading@10: Increase the width, and set the height to the same size: yading@10: @example yading@10: scale=3/2*iw:ow yading@10: @end example yading@10: yading@10: @item yading@10: Seek for Greek harmony: yading@10: @example yading@10: scale=iw:1/PHI*iw yading@10: scale=ih*PHI:ih yading@10: @end example yading@10: yading@10: @item yading@10: Increase the height, and set the width to 3/2 of the height: yading@10: @example yading@10: scale=w=3/2*oh:h=3/5*ih yading@10: @end example yading@10: yading@10: @item yading@10: Increase the size, but make the size a multiple of the chroma yading@10: subsample values: yading@10: @example yading@10: scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub" yading@10: @end example yading@10: yading@10: @item yading@10: Increase the width to a maximum of 500 pixels, keep the same input yading@10: aspect ratio: yading@10: @example yading@10: scale=w='min(500\, iw*3/2):h=-1' yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section separatefields yading@10: yading@10: The @code{separatefields} takes a frame-based video input and splits yading@10: each frame into its components fields, producing a new half height clip yading@10: with twice the frame rate and twice the frame count. yading@10: yading@10: This filter use field-dominance information in frame to decide which yading@10: of each pair of fields to place first in the output. yading@10: If it gets it wrong use @ref{setfield} filter before @code{separatefields} filter. yading@10: yading@10: @section setdar, setsar yading@10: yading@10: The @code{setdar} filter sets the Display Aspect Ratio for the filter yading@10: output video. yading@10: yading@10: This is done by changing the specified Sample (aka Pixel) Aspect yading@10: Ratio, according to the following equation: yading@10: @example yading@10: @var{DAR} = @var{HORIZONTAL_RESOLUTION} / @var{VERTICAL_RESOLUTION} * @var{SAR} yading@10: @end example yading@10: yading@10: Keep in mind that the @code{setdar} filter does not modify the pixel yading@10: dimensions of the video frame. Also the display aspect ratio set by yading@10: this filter may be changed by later filters in the filterchain, yading@10: e.g. in case of scaling or if another "setdar" or a "setsar" filter is yading@10: applied. yading@10: yading@10: The @code{setsar} filter sets the Sample (aka Pixel) Aspect Ratio for yading@10: the filter output video. yading@10: yading@10: Note that as a consequence of the application of this filter, the yading@10: output display aspect ratio will change according to the equation yading@10: above. yading@10: yading@10: Keep in mind that the sample aspect ratio set by the @code{setsar} yading@10: filter may be changed by later filters in the filterchain, e.g. if yading@10: another "setsar" or a "setdar" filter is applied. yading@10: yading@10: The filters accept the following options: yading@10: yading@10: @table @option yading@10: @item r, ratio, dar (@code{setdar} only), sar (@code{setsar} only) yading@10: Set the aspect ratio used by the filter. yading@10: yading@10: The parameter can be a floating point number string, an expression, or yading@10: a string of the form @var{num}:@var{den}, where @var{num} and yading@10: @var{den} are the numerator and denominator of the aspect ratio. If yading@10: the parameter is not specified, it is assumed the value "0". yading@10: In case the form "@var{num}:@var{den}" is used, the @code{:} character yading@10: should be escaped. yading@10: yading@10: @item max yading@10: Set the maximum integer value to use for expressing numerator and yading@10: denominator when reducing the expressed aspect ratio to a rational. yading@10: Default value is @code{100}. yading@10: yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: yading@10: @item yading@10: To change the display aspect ratio to 16:9, specify one of the following: yading@10: @example yading@10: setdar=dar=1.77777 yading@10: setdar=dar=16/9 yading@10: setdar=dar=1.77777 yading@10: @end example yading@10: yading@10: @item yading@10: To change the sample aspect ratio to 10:11, specify: yading@10: @example yading@10: setsar=sar=10/11 yading@10: @end example yading@10: yading@10: @item yading@10: To set a display aspect ratio of 16:9, and specify a maximum integer value of yading@10: 1000 in the aspect ratio reduction, use the command: yading@10: @example yading@10: setdar=ratio=16/9:max=1000 yading@10: @end example yading@10: yading@10: @end itemize yading@10: yading@10: @anchor{setfield} yading@10: @section setfield yading@10: yading@10: Force field for the output video frame. yading@10: yading@10: The @code{setfield} filter marks the interlace type field for the yading@10: output frames. It does not change the input frame, but only sets the yading@10: corresponding property, which affects how the frame is treated by yading@10: following filters (e.g. @code{fieldorder} or @code{yadif}). yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item mode yading@10: Available values are: yading@10: yading@10: @table @samp yading@10: @item auto yading@10: Keep the same field property. yading@10: yading@10: @item bff yading@10: Mark the frame as bottom-field-first. yading@10: yading@10: @item tff yading@10: Mark the frame as top-field-first. yading@10: yading@10: @item prog yading@10: Mark the frame as progressive. yading@10: @end table yading@10: @end table yading@10: yading@10: @section showinfo yading@10: yading@10: Show a line containing various information for each input video frame. yading@10: The input video is not modified. yading@10: yading@10: The shown line contains a sequence of key/value pairs of the form yading@10: @var{key}:@var{value}. yading@10: yading@10: A description of each shown parameter follows: yading@10: yading@10: @table @option yading@10: @item n yading@10: sequential number of the input frame, starting from 0 yading@10: yading@10: @item pts yading@10: Presentation TimeStamp of the input frame, expressed as a number of yading@10: time base units. The time base unit depends on the filter input pad. yading@10: yading@10: @item pts_time yading@10: Presentation TimeStamp of the input frame, expressed as a number of yading@10: seconds yading@10: yading@10: @item pos yading@10: position of the frame in the input stream, -1 if this information in yading@10: unavailable and/or meaningless (for example in case of synthetic video) yading@10: yading@10: @item fmt yading@10: pixel format name yading@10: yading@10: @item sar yading@10: sample aspect ratio of the input frame, expressed in the form yading@10: @var{num}/@var{den} yading@10: yading@10: @item s yading@10: size of the input frame, expressed in the form yading@10: @var{width}x@var{height} yading@10: yading@10: @item i yading@10: interlaced mode ("P" for "progressive", "T" for top field first, "B" yading@10: for bottom field first) yading@10: yading@10: @item iskey yading@10: 1 if the frame is a key frame, 0 otherwise yading@10: yading@10: @item type yading@10: picture type of the input frame ("I" for an I-frame, "P" for a yading@10: P-frame, "B" for a B-frame, "?" for unknown type). yading@10: Check also the documentation of the @code{AVPictureType} enum and of yading@10: the @code{av_get_picture_type_char} function defined in yading@10: @file{libavutil/avutil.h}. yading@10: yading@10: @item checksum yading@10: Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame yading@10: yading@10: @item plane_checksum yading@10: Adler-32 checksum (printed in hexadecimal) of each plane of the input frame, yading@10: expressed in the form "[@var{c0} @var{c1} @var{c2} @var{c3}]" yading@10: @end table yading@10: yading@10: @section smartblur yading@10: yading@10: Blur the input video without impacting the outlines. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item luma_radius, lr yading@10: Set the luma radius. The option value must be a float number in yading@10: the range [0.1,5.0] that specifies the variance of the gaussian filter yading@10: used to blur the image (slower if larger). Default value is 1.0. yading@10: yading@10: @item luma_strength, ls yading@10: Set the luma strength. The option value must be a float number yading@10: in the range [-1.0,1.0] that configures the blurring. A value included yading@10: in [0.0,1.0] will blur the image whereas a value included in yading@10: [-1.0,0.0] will sharpen the image. Default value is 1.0. yading@10: yading@10: @item luma_threshold, lt yading@10: Set the luma threshold used as a coefficient to determine yading@10: whether a pixel should be blurred or not. The option value must be an yading@10: integer in the range [-30,30]. A value of 0 will filter all the image, yading@10: a value included in [0,30] will filter flat areas and a value included yading@10: in [-30,0] will filter edges. Default value is 0. yading@10: yading@10: @item chroma_radius, cr yading@10: Set the chroma radius. The option value must be a float number in yading@10: the range [0.1,5.0] that specifies the variance of the gaussian filter yading@10: used to blur the image (slower if larger). Default value is 1.0. yading@10: yading@10: @item chroma_strength, cs yading@10: Set the chroma strength. The option value must be a float number yading@10: in the range [-1.0,1.0] that configures the blurring. A value included yading@10: in [0.0,1.0] will blur the image whereas a value included in yading@10: [-1.0,0.0] will sharpen the image. Default value is 1.0. yading@10: yading@10: @item chroma_threshold, ct yading@10: Set the chroma threshold used as a coefficient to determine yading@10: whether a pixel should be blurred or not. The option value must be an yading@10: integer in the range [-30,30]. A value of 0 will filter all the image, yading@10: a value included in [0,30] will filter flat areas and a value included yading@10: in [-30,0] will filter edges. Default value is 0. yading@10: @end table yading@10: yading@10: If a chroma option is not explicitly set, the corresponding luma value yading@10: is set. yading@10: yading@10: @section stereo3d yading@10: yading@10: Convert between different stereoscopic image formats. yading@10: yading@10: The filters accept the following options: yading@10: yading@10: @table @option yading@10: @item in yading@10: Set stereoscopic image format of input. yading@10: yading@10: Available values for input image formats are: yading@10: @table @samp yading@10: @item sbsl yading@10: side by side parallel (left eye left, right eye right) yading@10: yading@10: @item sbsr yading@10: side by side crosseye (right eye left, left eye right) yading@10: yading@10: @item sbs2l yading@10: side by side parallel with half width resolution yading@10: (left eye left, right eye right) yading@10: yading@10: @item sbs2r yading@10: side by side crosseye with half width resolution yading@10: (right eye left, left eye right) yading@10: yading@10: @item abl yading@10: above-below (left eye above, right eye below) yading@10: yading@10: @item abr yading@10: above-below (right eye above, left eye below) yading@10: yading@10: @item ab2l yading@10: above-below with half height resolution yading@10: (left eye above, right eye below) yading@10: yading@10: @item ab2r yading@10: above-below with half height resolution yading@10: (right eye above, left eye below) yading@10: yading@10: Default value is @samp{sbsl}. yading@10: @end table yading@10: yading@10: @item out yading@10: Set stereoscopic image format of output. yading@10: yading@10: Available values for output image formats are all the input formats as well as: yading@10: @table @samp yading@10: @item arbg yading@10: anaglyph red/blue gray yading@10: (red filter on left eye, blue filter on right eye) yading@10: yading@10: @item argg yading@10: anaglyph red/green gray yading@10: (red filter on left eye, green filter on right eye) yading@10: yading@10: @item arcg yading@10: anaglyph red/cyan gray yading@10: (red filter on left eye, cyan filter on right eye) yading@10: yading@10: @item arch yading@10: anaglyph red/cyan half colored yading@10: (red filter on left eye, cyan filter on right eye) yading@10: yading@10: @item arcc yading@10: anaglyph red/cyan color yading@10: (red filter on left eye, cyan filter on right eye) yading@10: yading@10: @item arcd yading@10: anaglyph red/cyan color optimized with the least squares projection of dubois yading@10: (red filter on left eye, cyan filter on right eye) yading@10: yading@10: @item agmg yading@10: anaglyph green/magenta gray yading@10: (green filter on left eye, magenta filter on right eye) yading@10: yading@10: @item agmh yading@10: anaglyph green/magenta half colored yading@10: (green filter on left eye, magenta filter on right eye) yading@10: yading@10: @item agmc yading@10: anaglyph green/magenta colored yading@10: (green filter on left eye, magenta filter on right eye) yading@10: yading@10: @item agmd yading@10: anaglyph green/magenta color optimized with the least squares projection of dubois yading@10: (green filter on left eye, magenta filter on right eye) yading@10: yading@10: @item aybg yading@10: anaglyph yellow/blue gray yading@10: (yellow filter on left eye, blue filter on right eye) yading@10: yading@10: @item aybh yading@10: anaglyph yellow/blue half colored yading@10: (yellow filter on left eye, blue filter on right eye) yading@10: yading@10: @item aybc yading@10: anaglyph yellow/blue colored yading@10: (yellow filter on left eye, blue filter on right eye) yading@10: yading@10: @item aybd yading@10: anaglyph yellow/blue color optimized with the least squares projection of dubois yading@10: (yellow filter on left eye, blue filter on right eye) yading@10: yading@10: @item irl yading@10: interleaved rows (left eye has top row, right eye starts on next row) yading@10: yading@10: @item irr yading@10: interleaved rows (right eye has top row, left eye starts on next row) yading@10: yading@10: @item ml yading@10: mono output (left eye only) yading@10: yading@10: @item mr yading@10: mono output (right eye only) yading@10: @end table yading@10: yading@10: Default value is @samp{arcd}. yading@10: @end table yading@10: yading@10: @anchor{subtitles} yading@10: @section subtitles yading@10: yading@10: Draw subtitles on top of input video using the libass library. yading@10: yading@10: To enable compilation of this filter you need to configure FFmpeg with yading@10: @code{--enable-libass}. This filter also requires a build with libavcodec and yading@10: libavformat to convert the passed subtitles file to ASS (Advanced Substation yading@10: Alpha) subtitles format. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item filename, f yading@10: Set the filename of the subtitle file to read. It must be specified. yading@10: yading@10: @item original_size yading@10: Specify the size of the original video, the video for which the ASS file yading@10: was composed. Due to a misdesign in ASS aspect ratio arithmetic, this is yading@10: necessary to correctly scale the fonts if the aspect ratio has been changed. yading@10: yading@10: @item charenc yading@10: Set subtitles input character encoding. @code{subtitles} filter only. Only yading@10: useful if not UTF-8. yading@10: @end table yading@10: yading@10: If the first key is not specified, it is assumed that the first value yading@10: specifies the @option{filename}. yading@10: yading@10: For example, to render the file @file{sub.srt} on top of the input yading@10: video, use the command: yading@10: @example yading@10: subtitles=sub.srt yading@10: @end example yading@10: yading@10: which is equivalent to: yading@10: @example yading@10: subtitles=filename=sub.srt yading@10: @end example yading@10: yading@10: @section super2xsai yading@10: yading@10: Scale the input by 2x and smooth using the Super2xSaI (Scale and yading@10: Interpolate) pixel art scaling algorithm. yading@10: yading@10: Useful for enlarging pixel art images without reducing sharpness. yading@10: yading@10: @section swapuv yading@10: Swap U & V plane. yading@10: yading@10: @section telecine yading@10: yading@10: Apply telecine process to the video. yading@10: yading@10: This filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item first_field yading@10: @table @samp yading@10: @item top, t yading@10: top field first yading@10: @item bottom, b yading@10: bottom field first yading@10: The default value is @code{top}. yading@10: @end table yading@10: yading@10: @item pattern yading@10: A string of numbers representing the pulldown pattern you wish to apply. yading@10: The default value is @code{23}. yading@10: @end table yading@10: yading@10: @example yading@10: Some typical patterns: yading@10: yading@10: NTSC output (30i): yading@10: 27.5p: 32222 yading@10: 24p: 23 (classic) yading@10: 24p: 2332 (preferred) yading@10: 20p: 33 yading@10: 18p: 334 yading@10: 16p: 3444 yading@10: yading@10: PAL output (25i): yading@10: 27.5p: 12222 yading@10: 24p: 222222222223 ("Euro pulldown") yading@10: 16.67p: 33 yading@10: 16p: 33333334 yading@10: @end example yading@10: yading@10: @section thumbnail yading@10: Select the most representative frame in a given sequence of consecutive frames. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item n yading@10: Set the frames batch size to analyze; in a set of @var{n} frames, the filter yading@10: will pick one of them, and then handle the next batch of @var{n} frames until yading@10: the end. Default is @code{100}. yading@10: @end table yading@10: yading@10: Since the filter keeps track of the whole frames sequence, a bigger @var{n} yading@10: value will result in a higher memory usage, so a high value is not recommended. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Extract one picture each 50 frames: yading@10: @example yading@10: thumbnail=50 yading@10: @end example yading@10: yading@10: @item yading@10: Complete example of a thumbnail creation with @command{ffmpeg}: yading@10: @example yading@10: ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section tile yading@10: yading@10: Tile several successive frames together. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item layout yading@10: Set the grid size (i.e. the number of lines and columns) in the form yading@10: "@var{w}x@var{h}". yading@10: yading@10: @item nb_frames yading@10: Set the maximum number of frames to render in the given area. It must be less yading@10: than or equal to @var{w}x@var{h}. The default value is @code{0}, meaning all yading@10: the area will be used. yading@10: yading@10: @item margin yading@10: Set the outer border margin in pixels. yading@10: yading@10: @item padding yading@10: Set the inner border thickness (i.e. the number of pixels between frames). For yading@10: more advanced padding options (such as having different values for the edges), yading@10: refer to the pad video filter. yading@10: yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Produce 8x8 PNG tiles of all keyframes (@option{-skip_frame nokey}) in a movie: yading@10: @example yading@10: ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png yading@10: @end example yading@10: The @option{-vsync 0} is necessary to prevent @command{ffmpeg} from yading@10: duplicating each output frame to accomodate the originally detected frame yading@10: rate. yading@10: yading@10: @item yading@10: Display @code{5} pictures in an area of @code{3x2} frames, yading@10: with @code{7} pixels between them, and @code{2} pixels of initial margin, using yading@10: mixed flat and named options: yading@10: @example yading@10: tile=3x2:nb_frames=5:padding=7:margin=2 yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section tinterlace yading@10: yading@10: Perform various types of temporal field interlacing. yading@10: yading@10: Frames are counted starting from 1, so the first input frame is yading@10: considered odd. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item mode yading@10: Specify the mode of the interlacing. This option can also be specified yading@10: as a value alone. See below for a list of values for this option. yading@10: yading@10: Available values are: yading@10: yading@10: @table @samp yading@10: @item merge, 0 yading@10: Move odd frames into the upper field, even into the lower field, yading@10: generating a double height frame at half frame rate. yading@10: yading@10: @item drop_odd, 1 yading@10: Only output even frames, odd frames are dropped, generating a frame with yading@10: unchanged height at half frame rate. yading@10: yading@10: @item drop_even, 2 yading@10: Only output odd frames, even frames are dropped, generating a frame with yading@10: unchanged height at half frame rate. yading@10: yading@10: @item pad, 3 yading@10: Expand each frame to full height, but pad alternate lines with black, yading@10: generating a frame with double height at the same input frame rate. yading@10: yading@10: @item interleave_top, 4 yading@10: Interleave the upper field from odd frames with the lower field from yading@10: even frames, generating a frame with unchanged height at half frame rate. yading@10: yading@10: @item interleave_bottom, 5 yading@10: Interleave the lower field from odd frames with the upper field from yading@10: even frames, generating a frame with unchanged height at half frame rate. yading@10: yading@10: @item interlacex2, 6 yading@10: Double frame rate with unchanged height. Frames are inserted each yading@10: containing the second temporal field from the previous input frame and yading@10: the first temporal field from the next input frame. This mode relies on yading@10: the top_field_first flag. Useful for interlaced video displays with no yading@10: field synchronisation. yading@10: @end table yading@10: yading@10: Numeric values are deprecated but are accepted for backward yading@10: compatibility reasons. yading@10: yading@10: Default mode is @code{merge}. yading@10: yading@10: @item flags yading@10: Specify flags influencing the filter process. yading@10: yading@10: Available value for @var{flags} is: yading@10: yading@10: @table @option yading@10: @item low_pass_filter, vlfp yading@10: Enable vertical low-pass filtering in the filter. yading@10: Vertical low-pass filtering is required when creating an interlaced yading@10: destination from a progressive source which contains high-frequency yading@10: vertical detail. Filtering will reduce interlace 'twitter' and Moire yading@10: patterning. yading@10: yading@10: Vertical low-pass filtering can only be enabled for @option{mode} yading@10: @var{interleave_top} and @var{interleave_bottom}. yading@10: yading@10: @end table yading@10: @end table yading@10: yading@10: @section transpose yading@10: yading@10: Transpose rows with columns in the input video and optionally flip it. yading@10: yading@10: This filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item dir yading@10: The direction of the transpose. yading@10: yading@10: @table @samp yading@10: @item 0, 4, cclock_flip yading@10: Rotate by 90 degrees counterclockwise and vertically flip (default), that is: yading@10: @example yading@10: L.R L.l yading@10: . . -> . . yading@10: l.r R.r yading@10: @end example yading@10: yading@10: @item 1, 5, clock yading@10: Rotate by 90 degrees clockwise, that is: yading@10: @example yading@10: L.R l.L yading@10: . . -> . . yading@10: l.r r.R yading@10: @end example yading@10: yading@10: @item 2, 6, cclock yading@10: Rotate by 90 degrees counterclockwise, that is: yading@10: @example yading@10: L.R R.r yading@10: . . -> . . yading@10: l.r L.l yading@10: @end example yading@10: yading@10: @item 3, 7, clock_flip yading@10: Rotate by 90 degrees clockwise and vertically flip, that is: yading@10: @example yading@10: L.R r.R yading@10: . . -> . . yading@10: l.r l.L yading@10: @end example yading@10: @end table yading@10: yading@10: For values between 4-7, the transposition is only done if the input yading@10: video geometry is portrait and not landscape. These values are yading@10: deprecated, the @code{passthrough} option should be used instead. yading@10: yading@10: @item passthrough yading@10: Do not apply the transposition if the input geometry matches the one yading@10: specified by the specified value. It accepts the following values: yading@10: @table @samp yading@10: @item none yading@10: Always apply transposition. yading@10: @item portrait yading@10: Preserve portrait geometry (when @var{height} >= @var{width}). yading@10: @item landscape yading@10: Preserve landscape geometry (when @var{width} >= @var{height}). yading@10: @end table yading@10: yading@10: Default value is @code{none}. yading@10: @end table yading@10: yading@10: For example to rotate by 90 degrees clockwise and preserve portrait yading@10: layout: yading@10: @example yading@10: transpose=dir=1:passthrough=portrait yading@10: @end example yading@10: yading@10: The command above can also be specified as: yading@10: @example yading@10: transpose=1:portrait yading@10: @end example yading@10: yading@10: @section unsharp yading@10: yading@10: Sharpen or blur the input video. yading@10: yading@10: It accepts the following parameters: yading@10: yading@10: @table @option yading@10: @item luma_msize_x, lx yading@10: @item chroma_msize_x, cx yading@10: Set the luma/chroma matrix horizontal size. It must be an odd integer yading@10: between 3 and 63, default value is 5. yading@10: yading@10: @item luma_msize_y, ly yading@10: @item chroma_msize_y, cy yading@10: Set the luma/chroma matrix vertical size. It must be an odd integer yading@10: between 3 and 63, default value is 5. yading@10: yading@10: @item luma_amount, la yading@10: @item chroma_amount, ca yading@10: Set the luma/chroma effect strength. It can be a float number, yading@10: reasonable values lay between -1.5 and 1.5. yading@10: yading@10: Negative values will blur the input video, while positive values will yading@10: sharpen it, a value of zero will disable the effect. yading@10: yading@10: Default value is 1.0 for @option{luma_amount}, 0.0 for yading@10: @option{chroma_amount}. yading@10: @end table yading@10: yading@10: All parameters are optional and default to the yading@10: equivalent of the string '5:5:1.0:5:5:0.0'. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Apply strong luma sharpen effect: yading@10: @example yading@10: unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5 yading@10: @end example yading@10: yading@10: @item yading@10: Apply strong blur of both luma and chroma parameters: yading@10: @example yading@10: unsharp=7:7:-2:7:7:-2 yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section vflip yading@10: yading@10: Flip the input video vertically. yading@10: yading@10: @example yading@10: ffmpeg -i in.avi -vf "vflip" out.avi yading@10: @end example yading@10: yading@10: @anchor{yadif} yading@10: @section yadif yading@10: yading@10: Deinterlace the input video ("yadif" means "yet another deinterlacing yading@10: filter"). yading@10: yading@10: This filter accepts the following options: yading@10: yading@10: yading@10: @table @option yading@10: yading@10: @item mode yading@10: The interlacing mode to adopt, accepts one of the following values: yading@10: yading@10: @table @option yading@10: @item 0, send_frame yading@10: output 1 frame for each frame yading@10: @item 1, send_field yading@10: output 1 frame for each field yading@10: @item 2, send_frame_nospatial yading@10: like @code{send_frame} but skip spatial interlacing check yading@10: @item 3, send_field_nospatial yading@10: like @code{send_field} but skip spatial interlacing check yading@10: @end table yading@10: yading@10: Default value is @code{send_frame}. yading@10: yading@10: @item parity yading@10: The picture field parity assumed for the input interlaced video, accepts one of yading@10: the following values: yading@10: yading@10: @table @option yading@10: @item 0, tff yading@10: assume top field first yading@10: @item 1, bff yading@10: assume bottom field first yading@10: @item -1, auto yading@10: enable automatic detection yading@10: @end table yading@10: yading@10: Default value is @code{auto}. yading@10: If interlacing is unknown or decoder does not export this information, yading@10: top field first will be assumed. yading@10: yading@10: @item deint yading@10: Specify which frames to deinterlace. Accept one of the following yading@10: values: yading@10: yading@10: @table @option yading@10: @item 0, all yading@10: deinterlace all frames yading@10: @item 1, interlaced yading@10: only deinterlace frames marked as interlaced yading@10: @end table yading@10: yading@10: Default value is @code{all}. yading@10: @end table yading@10: yading@10: @c man end VIDEO FILTERS yading@10: yading@10: @chapter Video Sources yading@10: @c man begin VIDEO SOURCES yading@10: yading@10: Below is a description of the currently available video sources. yading@10: yading@10: @section buffer yading@10: yading@10: Buffer video frames, and make them available to the filter chain. yading@10: yading@10: This source is mainly intended for a programmatic use, in particular yading@10: through the interface defined in @file{libavfilter/vsrc_buffer.h}. yading@10: yading@10: This source accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item video_size yading@10: Specify the size (width and height) of the buffered video frames. yading@10: yading@10: @item width yading@10: Input video width. yading@10: yading@10: @item height yading@10: Input video height. yading@10: yading@10: @item pix_fmt yading@10: A string representing the pixel format of the buffered video frames. yading@10: It may be a number corresponding to a pixel format, or a pixel format yading@10: name. yading@10: yading@10: @item time_base yading@10: Specify the timebase assumed by the timestamps of the buffered frames. yading@10: yading@10: @item frame_rate yading@10: Specify the frame rate expected for the video stream. yading@10: yading@10: @item pixel_aspect, sar yading@10: Specify the sample aspect ratio assumed by the video frames. yading@10: yading@10: @item sws_param yading@10: Specify the optional parameters to be used for the scale filter which yading@10: is automatically inserted when an input change is detected in the yading@10: input size or format. yading@10: @end table yading@10: yading@10: For example: yading@10: @example yading@10: buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1 yading@10: @end example yading@10: yading@10: will instruct the source to accept video frames with size 320x240 and yading@10: with format "yuv410p", assuming 1/24 as the timestamps timebase and yading@10: square pixels (1:1 sample aspect ratio). yading@10: Since the pixel format with name "yuv410p" corresponds to the number 6 yading@10: (check the enum AVPixelFormat definition in @file{libavutil/pixfmt.h}), yading@10: this example corresponds to: yading@10: @example yading@10: buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1 yading@10: @end example yading@10: yading@10: Alternatively, the options can be specified as a flat string, but this yading@10: syntax is deprecated: yading@10: yading@10: @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}] yading@10: yading@10: @section cellauto yading@10: yading@10: Create a pattern generated by an elementary cellular automaton. yading@10: yading@10: The initial state of the cellular automaton can be defined through the yading@10: @option{filename}, and @option{pattern} options. If such options are yading@10: not specified an initial state is created randomly. yading@10: yading@10: At each new frame a new row in the video is filled with the result of yading@10: the cellular automaton next generation. The behavior when the whole yading@10: frame is filled is defined by the @option{scroll} option. yading@10: yading@10: This source accepts the following options: yading@10: yading@10: @table @option yading@10: @item filename, f yading@10: Read the initial cellular automaton state, i.e. the starting row, from yading@10: the specified file. yading@10: In the file, each non-whitespace character is considered an alive yading@10: cell, a newline will terminate the row, and further characters in the yading@10: file will be ignored. yading@10: yading@10: @item pattern, p yading@10: Read the initial cellular automaton state, i.e. the starting row, from yading@10: the specified string. yading@10: yading@10: Each non-whitespace character in the string is considered an alive yading@10: cell, a newline will terminate the row, and further characters in the yading@10: string will be ignored. yading@10: yading@10: @item rate, r yading@10: Set the video rate, that is the number of frames generated per second. yading@10: Default is 25. yading@10: yading@10: @item random_fill_ratio, ratio yading@10: Set the random fill ratio for the initial cellular automaton row. It yading@10: is a floating point number value ranging from 0 to 1, defaults to yading@10: 1/PHI. yading@10: yading@10: This option is ignored when a file or a pattern is specified. yading@10: yading@10: @item random_seed, seed yading@10: Set the seed for filling randomly the initial row, must be an integer yading@10: included between 0 and UINT32_MAX. If not specified, or if explicitly yading@10: set to -1, the filter will try to use a good random seed on a best yading@10: effort basis. yading@10: yading@10: @item rule yading@10: Set the cellular automaton rule, it is a number ranging from 0 to 255. yading@10: Default value is 110. yading@10: yading@10: @item size, s yading@10: Set the size of the output video. yading@10: yading@10: If @option{filename} or @option{pattern} is specified, the size is set yading@10: by default to the width of the specified initial state row, and the yading@10: height is set to @var{width} * PHI. yading@10: yading@10: If @option{size} is set, it must contain the width of the specified yading@10: pattern string, and the specified pattern will be centered in the yading@10: larger row. yading@10: yading@10: If a filename or a pattern string is not specified, the size value yading@10: defaults to "320x518" (used for a randomly generated initial state). yading@10: yading@10: @item scroll yading@10: If set to 1, scroll the output upward when all the rows in the output yading@10: have been already filled. If set to 0, the new generated row will be yading@10: written over the top row just after the bottom row is filled. yading@10: Defaults to 1. yading@10: yading@10: @item start_full, full yading@10: If set to 1, completely fill the output with generated rows before yading@10: outputting the first frame. yading@10: This is the default behavior, for disabling set the value to 0. yading@10: yading@10: @item stitch yading@10: If set to 1, stitch the left and right row edges together. yading@10: This is the default behavior, for disabling set the value to 0. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Read the initial state from @file{pattern}, and specify an output of yading@10: size 200x400. yading@10: @example yading@10: cellauto=f=pattern:s=200x400 yading@10: @end example yading@10: yading@10: @item yading@10: Generate a random initial row with a width of 200 cells, with a fill yading@10: ratio of 2/3: yading@10: @example yading@10: cellauto=ratio=2/3:s=200x200 yading@10: @end example yading@10: yading@10: @item yading@10: Create a pattern generated by rule 18 starting by a single alive cell yading@10: centered on an initial row with width 100: yading@10: @example yading@10: cellauto=p=@@:s=100x400:full=0:rule=18 yading@10: @end example yading@10: yading@10: @item yading@10: Specify a more elaborated initial pattern: yading@10: @example yading@10: cellauto=p='@@@@ @@ @@@@':s=100x400:full=0:rule=18 yading@10: @end example yading@10: yading@10: @end itemize yading@10: yading@10: @section mandelbrot yading@10: yading@10: Generate a Mandelbrot set fractal, and progressively zoom towards the yading@10: point specified with @var{start_x} and @var{start_y}. yading@10: yading@10: This source accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item end_pts yading@10: Set the terminal pts value. Default value is 400. yading@10: yading@10: @item end_scale yading@10: Set the terminal scale value. yading@10: Must be a floating point value. Default value is 0.3. yading@10: yading@10: @item inner yading@10: Set the inner coloring mode, that is the algorithm used to draw the yading@10: Mandelbrot fractal internal region. yading@10: yading@10: It shall assume one of the following values: yading@10: @table @option yading@10: @item black yading@10: Set black mode. yading@10: @item convergence yading@10: Show time until convergence. yading@10: @item mincol yading@10: Set color based on point closest to the origin of the iterations. yading@10: @item period yading@10: Set period mode. yading@10: @end table yading@10: yading@10: Default value is @var{mincol}. yading@10: yading@10: @item bailout yading@10: Set the bailout value. Default value is 10.0. yading@10: yading@10: @item maxiter yading@10: Set the maximum of iterations performed by the rendering yading@10: algorithm. Default value is 7189. yading@10: yading@10: @item outer yading@10: Set outer coloring mode. yading@10: It shall assume one of following values: yading@10: @table @option yading@10: @item iteration_count yading@10: Set iteration cound mode. yading@10: @item normalized_iteration_count yading@10: set normalized iteration count mode. yading@10: @end table yading@10: Default value is @var{normalized_iteration_count}. yading@10: yading@10: @item rate, r yading@10: Set frame rate, expressed as number of frames per second. Default yading@10: value is "25". yading@10: yading@10: @item size, s yading@10: Set frame size. Default value is "640x480". yading@10: yading@10: @item start_scale yading@10: Set the initial scale value. Default value is 3.0. yading@10: yading@10: @item start_x yading@10: Set the initial x position. Must be a floating point value between yading@10: -100 and 100. Default value is -0.743643887037158704752191506114774. yading@10: yading@10: @item start_y yading@10: Set the initial y position. Must be a floating point value between yading@10: -100 and 100. Default value is -0.131825904205311970493132056385139. yading@10: @end table yading@10: yading@10: @section mptestsrc yading@10: yading@10: Generate various test patterns, as generated by the MPlayer test filter. yading@10: yading@10: The size of the generated video is fixed, and is 256x256. yading@10: This source is useful in particular for testing encoding features. yading@10: yading@10: This source accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item rate, r yading@10: Specify the frame rate of the sourced video, as the number of frames yading@10: generated per second. It has to be a string in the format yading@10: @var{frame_rate_num}/@var{frame_rate_den}, an integer number, a float yading@10: number or a valid video frame rate abbreviation. The default value is yading@10: "25". yading@10: yading@10: @item duration, d yading@10: Set the video duration of the sourced video. The accepted syntax is: yading@10: @example yading@10: [-]HH:MM:SS[.m...] yading@10: [-]S+[.m...] yading@10: @end example yading@10: See also the function @code{av_parse_time()}. yading@10: yading@10: If not specified, or the expressed duration is negative, the video is yading@10: supposed to be generated forever. yading@10: yading@10: @item test, t yading@10: yading@10: Set the number or the name of the test to perform. Supported tests are: yading@10: @table @option yading@10: @item dc_luma yading@10: @item dc_chroma yading@10: @item freq_luma yading@10: @item freq_chroma yading@10: @item amp_luma yading@10: @item amp_chroma yading@10: @item cbp yading@10: @item mv yading@10: @item ring1 yading@10: @item ring2 yading@10: @item all yading@10: @end table yading@10: yading@10: Default value is "all", which will cycle through the list of all tests. yading@10: @end table yading@10: yading@10: For example the following: yading@10: @example yading@10: testsrc=t=dc_luma yading@10: @end example yading@10: yading@10: will generate a "dc_luma" test pattern. yading@10: yading@10: @section frei0r_src yading@10: yading@10: Provide a frei0r source. yading@10: yading@10: To enable compilation of this filter you need to install the frei0r yading@10: header and configure FFmpeg with @code{--enable-frei0r}. yading@10: yading@10: This source accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item size yading@10: The size of the video to generate, may be a string of the form yading@10: @var{width}x@var{height} or a frame size abbreviation. yading@10: yading@10: @item framerate yading@10: Framerate of the generated video, may be a string of the form yading@10: @var{num}/@var{den} or a frame rate abbreviation. yading@10: yading@10: @item filter_name yading@10: The name to the frei0r source to load. For more information regarding frei0r and yading@10: how to set the parameters read the section @ref{frei0r} in the description of yading@10: the video filters. yading@10: yading@10: @item filter_params yading@10: A '|'-separated list of parameters to pass to the frei0r source. yading@10: yading@10: @end table yading@10: yading@10: For example, to generate a frei0r partik0l source with size 200x200 yading@10: and frame rate 10 which is overlayed on the overlay filter main input: yading@10: @example yading@10: frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay yading@10: @end example yading@10: yading@10: @section life yading@10: yading@10: Generate a life pattern. yading@10: yading@10: This source is based on a generalization of John Conway's life game. yading@10: yading@10: The sourced input represents a life grid, each pixel represents a cell yading@10: which can be in one of two possible states, alive or dead. Every cell yading@10: interacts with its eight neighbours, which are the cells that are yading@10: horizontally, vertically, or diagonally adjacent. yading@10: yading@10: At each interaction the grid evolves according to the adopted rule, yading@10: which specifies the number of neighbor alive cells which will make a yading@10: cell stay alive or born. The @option{rule} option allows to specify yading@10: the rule to adopt. yading@10: yading@10: This source accepts the following options: yading@10: yading@10: @table @option yading@10: @item filename, f yading@10: Set the file from which to read the initial grid state. In the file, yading@10: each non-whitespace character is considered an alive cell, and newline yading@10: is used to delimit the end of each row. yading@10: yading@10: If this option is not specified, the initial grid is generated yading@10: randomly. yading@10: yading@10: @item rate, r yading@10: Set the video rate, that is the number of frames generated per second. yading@10: Default is 25. yading@10: yading@10: @item random_fill_ratio, ratio yading@10: Set the random fill ratio for the initial random grid. It is a yading@10: floating point number value ranging from 0 to 1, defaults to 1/PHI. yading@10: It is ignored when a file is specified. yading@10: yading@10: @item random_seed, seed yading@10: Set the seed for filling the initial random grid, must be an integer yading@10: included between 0 and UINT32_MAX. If not specified, or if explicitly yading@10: set to -1, the filter will try to use a good random seed on a best yading@10: effort basis. yading@10: yading@10: @item rule yading@10: Set the life rule. yading@10: yading@10: A rule can be specified with a code of the kind "S@var{NS}/B@var{NB}", yading@10: where @var{NS} and @var{NB} are sequences of numbers in the range 0-8, yading@10: @var{NS} specifies the number of alive neighbor cells which make a yading@10: live cell stay alive, and @var{NB} the number of alive neighbor cells yading@10: which make a dead cell to become alive (i.e. to "born"). yading@10: "s" and "b" can be used in place of "S" and "B", respectively. yading@10: yading@10: Alternatively a rule can be specified by an 18-bits integer. The 9 yading@10: high order bits are used to encode the next cell state if it is alive yading@10: for each number of neighbor alive cells, the low order bits specify yading@10: the rule for "borning" new cells. Higher order bits encode for an yading@10: higher number of neighbor cells. yading@10: For example the number 6153 = @code{(12<<9)+9} specifies a stay alive yading@10: rule of 12 and a born rule of 9, which corresponds to "S23/B03". yading@10: yading@10: Default value is "S23/B3", which is the original Conway's game of life yading@10: rule, and will keep a cell alive if it has 2 or 3 neighbor alive yading@10: cells, and will born a new cell if there are three alive cells around yading@10: a dead cell. yading@10: yading@10: @item size, s yading@10: Set the size of the output video. yading@10: yading@10: If @option{filename} is specified, the size is set by default to the yading@10: same size of the input file. If @option{size} is set, it must contain yading@10: the size specified in the input file, and the initial grid defined in yading@10: that file is centered in the larger resulting area. yading@10: yading@10: If a filename is not specified, the size value defaults to "320x240" yading@10: (used for a randomly generated initial grid). yading@10: yading@10: @item stitch yading@10: If set to 1, stitch the left and right grid edges together, and the yading@10: top and bottom edges also. Defaults to 1. yading@10: yading@10: @item mold yading@10: Set cell mold speed. If set, a dead cell will go from @option{death_color} to yading@10: @option{mold_color} with a step of @option{mold}. @option{mold} can have a yading@10: value from 0 to 255. yading@10: yading@10: @item life_color yading@10: Set the color of living (or new born) cells. yading@10: yading@10: @item death_color yading@10: Set the color of dead cells. If @option{mold} is set, this is the first color yading@10: used to represent a dead cell. yading@10: yading@10: @item mold_color yading@10: Set mold color, for definitely dead and moldy cells. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Read a grid from @file{pattern}, and center it on a grid of size yading@10: 300x300 pixels: yading@10: @example yading@10: life=f=pattern:s=300x300 yading@10: @end example yading@10: yading@10: @item yading@10: Generate a random grid of size 200x200, with a fill ratio of 2/3: yading@10: @example yading@10: life=ratio=2/3:s=200x200 yading@10: @end example yading@10: yading@10: @item yading@10: Specify a custom rule for evolving a randomly generated grid: yading@10: @example yading@10: life=rule=S14/B34 yading@10: @end example yading@10: yading@10: @item yading@10: Full example with slow death effect (mold) using @command{ffplay}: yading@10: @example yading@10: ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16 yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section color, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc yading@10: yading@10: The @code{color} source provides an uniformly colored input. yading@10: yading@10: The @code{nullsrc} source returns unprocessed video frames. It is yading@10: mainly useful to be employed in analysis / debugging tools, or as the yading@10: source for filters which ignore the input data. yading@10: yading@10: The @code{rgbtestsrc} source generates an RGB test pattern useful for yading@10: detecting RGB vs BGR issues. You should see a red, green and blue yading@10: stripe from top to bottom. yading@10: yading@10: The @code{smptebars} source generates a color bars pattern, based on yading@10: the SMPTE Engineering Guideline EG 1-1990. yading@10: yading@10: The @code{smptehdbars} source generates a color bars pattern, based on yading@10: the SMPTE RP 219-2002. yading@10: yading@10: The @code{testsrc} source generates a test video pattern, showing a yading@10: color pattern, a scrolling gradient and a timestamp. This is mainly yading@10: intended for testing purposes. yading@10: yading@10: The sources accept the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item color, c yading@10: Specify the color of the source, only used in the @code{color} yading@10: source. It can be the name of a color (case insensitive match) or a yading@10: 0xRRGGBB[AA] sequence, possibly followed by an alpha specifier. The yading@10: default value is "black". yading@10: yading@10: @item size, s yading@10: Specify the size of the sourced video, it may be a string of the form yading@10: @var{width}x@var{height}, or the name of a size abbreviation. The yading@10: default value is "320x240". yading@10: yading@10: @item rate, r yading@10: Specify the frame rate of the sourced video, as the number of frames yading@10: generated per second. It has to be a string in the format yading@10: @var{frame_rate_num}/@var{frame_rate_den}, an integer number, a float yading@10: number or a valid video frame rate abbreviation. The default value is yading@10: "25". yading@10: yading@10: @item sar yading@10: Set the sample aspect ratio of the sourced video. yading@10: yading@10: @item duration, d yading@10: Set the video duration of the sourced video. The accepted syntax is: yading@10: @example yading@10: [-]HH[:MM[:SS[.m...]]] yading@10: [-]S+[.m...] yading@10: @end example yading@10: See also the function @code{av_parse_time()}. yading@10: yading@10: If not specified, or the expressed duration is negative, the video is yading@10: supposed to be generated forever. yading@10: yading@10: @item decimals, n yading@10: Set the number of decimals to show in the timestamp, only used in the yading@10: @code{testsrc} source. yading@10: yading@10: The displayed timestamp value will correspond to the original yading@10: timestamp value multiplied by the power of 10 of the specified yading@10: value. Default value is 0. yading@10: @end table yading@10: yading@10: For example the following: yading@10: @example yading@10: testsrc=duration=5.3:size=qcif:rate=10 yading@10: @end example yading@10: yading@10: will generate a video with a duration of 5.3 seconds, with size yading@10: 176x144 and a frame rate of 10 frames per second. yading@10: yading@10: The following graph description will generate a red source yading@10: with an opacity of 0.2, with size "qcif" and a frame rate of 10 yading@10: frames per second. yading@10: @example yading@10: color=c=red@@0.2:s=qcif:r=10 yading@10: @end example yading@10: yading@10: If the input content is to be ignored, @code{nullsrc} can be used. The yading@10: following command generates noise in the luminance plane by employing yading@10: the @code{geq} filter: yading@10: @example yading@10: nullsrc=s=256x256, geq=random(1)*255:128:128 yading@10: @end example yading@10: yading@10: @c man end VIDEO SOURCES yading@10: yading@10: @chapter Video Sinks yading@10: @c man begin VIDEO SINKS yading@10: yading@10: Below is a description of the currently available video sinks. yading@10: yading@10: @section buffersink yading@10: yading@10: Buffer video frames, and make them available to the end of the filter yading@10: graph. yading@10: yading@10: This sink is mainly intended for a programmatic use, in particular yading@10: through the interface defined in @file{libavfilter/buffersink.h} yading@10: or the options system. yading@10: yading@10: It accepts a pointer to an AVBufferSinkContext structure, which yading@10: defines the incoming buffers' formats, to be passed as the opaque yading@10: parameter to @code{avfilter_init_filter} for initialization. yading@10: yading@10: @section nullsink yading@10: yading@10: Null video sink, do absolutely nothing with the input video. It is yading@10: mainly useful as a template and to be employed in analysis / debugging yading@10: tools. yading@10: yading@10: @c man end VIDEO SINKS yading@10: yading@10: @chapter Multimedia Filters yading@10: @c man begin MULTIMEDIA FILTERS yading@10: yading@10: Below is a description of the currently available multimedia filters. yading@10: yading@10: @section aperms, perms yading@10: yading@10: Set read/write permissions for the output frames. yading@10: yading@10: These filters are mainly aimed at developers to test direct path in the yading@10: following filter in the filtergraph. yading@10: yading@10: The filters accept the following options: yading@10: yading@10: @table @option yading@10: @item mode yading@10: Select the permissions mode. yading@10: yading@10: It accepts the following values: yading@10: @table @samp yading@10: @item none yading@10: Do nothing. This is the default. yading@10: @item ro yading@10: Set all the output frames read-only. yading@10: @item rw yading@10: Set all the output frames directly writable. yading@10: @item toggle yading@10: Make the frame read-only if writable, and writable if read-only. yading@10: @item random yading@10: Set each output frame read-only or writable randomly. yading@10: @end table yading@10: yading@10: @item seed yading@10: Set the seed for the @var{random} mode, must be an integer included between yading@10: @code{0} and @code{UINT32_MAX}. If not specified, or if explicitly set to yading@10: @code{-1}, the filter will try to use a good random seed on a best effort yading@10: basis. yading@10: @end table yading@10: yading@10: Note: in case of auto-inserted filter between the permission filter and the yading@10: following one, the permission might not be received as expected in that yading@10: following filter. Inserting a @ref{format} or @ref{aformat} filter before the yading@10: perms/aperms filter can avoid this problem. yading@10: yading@10: @section aselect, select yading@10: Select frames to pass in output. yading@10: yading@10: This filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item expr, e yading@10: Set expression, which is evaluated for each input frame. yading@10: yading@10: If the expression is evaluated to zero, the frame is discarded. yading@10: yading@10: If the evaluation result is negative or NaN, the frame is sent to the yading@10: first output; otherwise it is sent to the output with index yading@10: @code{ceil(val)-1}, assuming that the input index starts from 0. yading@10: yading@10: For example a value of @code{1.2} corresponds to the output with index yading@10: @code{ceil(1.2)-1 = 2-1 = 1}, that is the second output. yading@10: yading@10: @item outputs, n yading@10: Set the number of outputs. The output to which to send the selected yading@10: frame is based on the result of the evaluation. Default value is 1. yading@10: @end table yading@10: yading@10: The expression can contain the following constants: yading@10: yading@10: @table @option yading@10: @item n yading@10: the sequential number of the filtered frame, starting from 0 yading@10: yading@10: @item selected_n yading@10: the sequential number of the selected frame, starting from 0 yading@10: yading@10: @item prev_selected_n yading@10: the sequential number of the last selected frame, NAN if undefined yading@10: yading@10: @item TB yading@10: timebase of the input timestamps yading@10: yading@10: @item pts yading@10: the PTS (Presentation TimeStamp) of the filtered video frame, yading@10: expressed in @var{TB} units, NAN if undefined yading@10: yading@10: @item t yading@10: the PTS (Presentation TimeStamp) of the filtered video frame, yading@10: expressed in seconds, NAN if undefined yading@10: yading@10: @item prev_pts yading@10: the PTS of the previously filtered video frame, NAN if undefined yading@10: yading@10: @item prev_selected_pts yading@10: the PTS of the last previously filtered video frame, NAN if undefined yading@10: yading@10: @item prev_selected_t yading@10: the PTS of the last previously selected video frame, NAN if undefined yading@10: yading@10: @item start_pts yading@10: the PTS of the first video frame in the video, NAN if undefined yading@10: yading@10: @item start_t yading@10: the time of the first video frame in the video, NAN if undefined yading@10: yading@10: @item pict_type @emph{(video only)} yading@10: the type of the filtered frame, can assume one of the following yading@10: values: yading@10: @table @option yading@10: @item I yading@10: @item P yading@10: @item B yading@10: @item S yading@10: @item SI yading@10: @item SP yading@10: @item BI yading@10: @end table yading@10: yading@10: @item interlace_type @emph{(video only)} yading@10: the frame interlace type, can assume one of the following values: yading@10: @table @option yading@10: @item PROGRESSIVE yading@10: the frame is progressive (not interlaced) yading@10: @item TOPFIRST yading@10: the frame is top-field-first yading@10: @item BOTTOMFIRST yading@10: the frame is bottom-field-first yading@10: @end table yading@10: yading@10: @item consumed_sample_n @emph{(audio only)} yading@10: the number of selected samples before the current frame yading@10: yading@10: @item samples_n @emph{(audio only)} yading@10: the number of samples in the current frame yading@10: yading@10: @item sample_rate @emph{(audio only)} yading@10: the input sample rate yading@10: yading@10: @item key yading@10: 1 if the filtered frame is a key-frame, 0 otherwise yading@10: yading@10: @item pos yading@10: the position in the file of the filtered frame, -1 if the information yading@10: is not available (e.g. for synthetic video) yading@10: yading@10: @item scene @emph{(video only)} yading@10: value between 0 and 1 to indicate a new scene; a low value reflects a low yading@10: probability for the current frame to introduce a new scene, while a higher yading@10: value means the current frame is more likely to be one (see the example below) yading@10: yading@10: @end table yading@10: yading@10: The default value of the select expression is "1". yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Select all frames in input: yading@10: @example yading@10: select yading@10: @end example yading@10: yading@10: The example above is the same as: yading@10: @example yading@10: select=1 yading@10: @end example yading@10: yading@10: @item yading@10: Skip all frames: yading@10: @example yading@10: select=0 yading@10: @end example yading@10: yading@10: @item yading@10: Select only I-frames: yading@10: @example yading@10: select='eq(pict_type\,I)' yading@10: @end example yading@10: yading@10: @item yading@10: Select one frame every 100: yading@10: @example yading@10: select='not(mod(n\,100))' yading@10: @end example yading@10: yading@10: @item yading@10: Select only frames contained in the 10-20 time interval: yading@10: @example yading@10: select='gte(t\,10)*lte(t\,20)' yading@10: @end example yading@10: yading@10: @item yading@10: Select only I frames contained in the 10-20 time interval: yading@10: @example yading@10: select='gte(t\,10)*lte(t\,20)*eq(pict_type\,I)' yading@10: @end example yading@10: yading@10: @item yading@10: Select frames with a minimum distance of 10 seconds: yading@10: @example yading@10: select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)' yading@10: @end example yading@10: yading@10: @item yading@10: Use aselect to select only audio frames with samples number > 100: yading@10: @example yading@10: aselect='gt(samples_n\,100)' yading@10: @end example yading@10: yading@10: @item yading@10: Create a mosaic of the first scenes: yading@10: @example yading@10: ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png yading@10: @end example yading@10: yading@10: Comparing @var{scene} against a value between 0.3 and 0.5 is generally a sane yading@10: choice. yading@10: yading@10: @item yading@10: Send even and odd frames to separate outputs, and compose them: yading@10: @example yading@10: select=n=2:e='mod(n, 2)+1' [odd][even]; [odd] pad=h=2*ih [tmp]; [tmp][even] overlay=y=h yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section asendcmd, sendcmd yading@10: yading@10: Send commands to filters in the filtergraph. yading@10: yading@10: These filters read commands to be sent to other filters in the yading@10: filtergraph. yading@10: yading@10: @code{asendcmd} must be inserted between two audio filters, yading@10: @code{sendcmd} must be inserted between two video filters, but apart yading@10: from that they act the same way. yading@10: yading@10: The specification of commands can be provided in the filter arguments yading@10: with the @var{commands} option, or in a file specified by the yading@10: @var{filename} option. yading@10: yading@10: These filters accept the following options: yading@10: @table @option yading@10: @item commands, c yading@10: Set the commands to be read and sent to the other filters. yading@10: @item filename, f yading@10: Set the filename of the commands to be read and sent to the other yading@10: filters. yading@10: @end table yading@10: yading@10: @subsection Commands syntax yading@10: yading@10: A commands description consists of a sequence of interval yading@10: specifications, comprising a list of commands to be executed when a yading@10: particular event related to that interval occurs. The occurring event yading@10: is typically the current frame time entering or leaving a given time yading@10: interval. yading@10: yading@10: An interval is specified by the following syntax: yading@10: @example yading@10: @var{START}[-@var{END}] @var{COMMANDS}; yading@10: @end example yading@10: yading@10: The time interval is specified by the @var{START} and @var{END} times. yading@10: @var{END} is optional and defaults to the maximum time. yading@10: yading@10: The current frame time is considered within the specified interval if yading@10: it is included in the interval [@var{START}, @var{END}), that is when yading@10: the time is greater or equal to @var{START} and is lesser than yading@10: @var{END}. yading@10: yading@10: @var{COMMANDS} consists of a sequence of one or more command yading@10: specifications, separated by ",", relating to that interval. The yading@10: syntax of a command specification is given by: yading@10: @example yading@10: [@var{FLAGS}] @var{TARGET} @var{COMMAND} @var{ARG} yading@10: @end example yading@10: yading@10: @var{FLAGS} is optional and specifies the type of events relating to yading@10: the time interval which enable sending the specified command, and must yading@10: be a non-null sequence of identifier flags separated by "+" or "|" and yading@10: enclosed between "[" and "]". yading@10: yading@10: The following flags are recognized: yading@10: @table @option yading@10: @item enter yading@10: The command is sent when the current frame timestamp enters the yading@10: specified interval. In other words, the command is sent when the yading@10: previous frame timestamp was not in the given interval, and the yading@10: current is. yading@10: yading@10: @item leave yading@10: The command is sent when the current frame timestamp leaves the yading@10: specified interval. In other words, the command is sent when the yading@10: previous frame timestamp was in the given interval, and the yading@10: current is not. yading@10: @end table yading@10: yading@10: If @var{FLAGS} is not specified, a default value of @code{[enter]} is yading@10: assumed. yading@10: yading@10: @var{TARGET} specifies the target of the command, usually the name of yading@10: the filter class or a specific filter instance name. yading@10: yading@10: @var{COMMAND} specifies the name of the command for the target filter. yading@10: yading@10: @var{ARG} is optional and specifies the optional list of argument for yading@10: the given @var{COMMAND}. yading@10: yading@10: Between one interval specification and another, whitespaces, or yading@10: sequences of characters starting with @code{#} until the end of line, yading@10: are ignored and can be used to annotate comments. yading@10: yading@10: A simplified BNF description of the commands specification syntax yading@10: follows: yading@10: @example yading@10: @var{COMMAND_FLAG} ::= "enter" | "leave" yading@10: @var{COMMAND_FLAGS} ::= @var{COMMAND_FLAG} [(+|"|")@var{COMMAND_FLAG}] yading@10: @var{COMMAND} ::= ["[" @var{COMMAND_FLAGS} "]"] @var{TARGET} @var{COMMAND} [@var{ARG}] yading@10: @var{COMMANDS} ::= @var{COMMAND} [,@var{COMMANDS}] yading@10: @var{INTERVAL} ::= @var{START}[-@var{END}] @var{COMMANDS} yading@10: @var{INTERVALS} ::= @var{INTERVAL}[;@var{INTERVALS}] yading@10: @end example yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Specify audio tempo change at second 4: yading@10: @example yading@10: asendcmd=c='4.0 atempo tempo 1.5',atempo yading@10: @end example yading@10: yading@10: @item yading@10: Specify a list of drawtext and hue commands in a file. yading@10: @example yading@10: # show text in the interval 5-10 yading@10: 5.0-10.0 [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=hello world', yading@10: [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text='; yading@10: yading@10: # desaturate the image in the interval 15-20 yading@10: 15.0-20.0 [enter] hue s 0, yading@10: [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=nocolor', yading@10: [leave] hue s 1, yading@10: [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=color'; yading@10: yading@10: # apply an exponential saturation fade-out effect, starting from time 25 yading@10: 25 [enter] hue s exp(25-t) yading@10: @end example yading@10: yading@10: A filtergraph allowing to read and process the above command list yading@10: stored in a file @file{test.cmd}, can be specified with: yading@10: @example yading@10: sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue yading@10: @end example yading@10: @end itemize yading@10: yading@10: @anchor{setpts} yading@10: @section asetpts, setpts yading@10: yading@10: Change the PTS (presentation timestamp) of the input frames. yading@10: yading@10: @code{asetpts} works on audio frames, @code{setpts} on video frames. yading@10: yading@10: This filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item expr yading@10: The expression which is evaluated for each frame to construct its timestamp. yading@10: yading@10: @end table yading@10: yading@10: The expression is evaluated through the eval API and can contain the following yading@10: constants: yading@10: yading@10: @table @option yading@10: @item FRAME_RATE yading@10: frame rate, only defined for constant frame-rate video yading@10: yading@10: @item PTS yading@10: the presentation timestamp in input yading@10: yading@10: @item N yading@10: the count of the input frame, starting from 0. yading@10: yading@10: @item NB_CONSUMED_SAMPLES yading@10: the number of consumed samples, not including the current frame (only yading@10: audio) yading@10: yading@10: @item NB_SAMPLES yading@10: the number of samples in the current frame (only audio) yading@10: yading@10: @item SAMPLE_RATE yading@10: audio sample rate yading@10: yading@10: @item STARTPTS yading@10: the PTS of the first frame yading@10: yading@10: @item STARTT yading@10: the time in seconds of the first frame yading@10: yading@10: @item INTERLACED yading@10: tell if the current frame is interlaced yading@10: yading@10: @item T yading@10: the time in seconds of the current frame yading@10: yading@10: @item TB yading@10: the time base yading@10: yading@10: @item POS yading@10: original position in the file of the frame, or undefined if undefined yading@10: for the current frame yading@10: yading@10: @item PREV_INPTS yading@10: previous input PTS yading@10: yading@10: @item PREV_INT yading@10: previous input time in seconds yading@10: yading@10: @item PREV_OUTPTS yading@10: previous output PTS yading@10: yading@10: @item PREV_OUTT yading@10: previous output time in seconds yading@10: yading@10: @item RTCTIME yading@10: wallclock (RTC) time in microseconds. This is deprecated, use time(0) yading@10: instead. yading@10: yading@10: @item RTCSTART yading@10: wallclock (RTC) time at the start of the movie in microseconds yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Start counting PTS from zero yading@10: @example yading@10: setpts=PTS-STARTPTS yading@10: @end example yading@10: yading@10: @item yading@10: Apply fast motion effect: yading@10: @example yading@10: setpts=0.5*PTS yading@10: @end example yading@10: yading@10: @item yading@10: Apply slow motion effect: yading@10: @example yading@10: setpts=2.0*PTS yading@10: @end example yading@10: yading@10: @item yading@10: Set fixed rate of 25 frames per second: yading@10: @example yading@10: setpts=N/(25*TB) yading@10: @end example yading@10: yading@10: @item yading@10: Set fixed rate 25 fps with some jitter: yading@10: @example yading@10: setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))' yading@10: @end example yading@10: yading@10: @item yading@10: Apply an offset of 10 seconds to the input PTS: yading@10: @example yading@10: setpts=PTS+10/TB yading@10: @end example yading@10: yading@10: @item yading@10: Generate timestamps from a "live source" and rebase onto the current timebase: yading@10: @example yading@10: setpts='(RTCTIME - RTCSTART) / (TB * 1000000)' yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section ebur128 yading@10: yading@10: EBU R128 scanner filter. This filter takes an audio stream as input and outputs yading@10: it unchanged. By default, it logs a message at a frequency of 10Hz with the yading@10: Momentary loudness (identified by @code{M}), Short-term loudness (@code{S}), yading@10: Integrated loudness (@code{I}) and Loudness Range (@code{LRA}). yading@10: yading@10: The filter also has a video output (see the @var{video} option) with a real yading@10: time graph to observe the loudness evolution. The graphic contains the logged yading@10: message mentioned above, so it is not printed anymore when this option is set, yading@10: unless the verbose logging is set. The main graphing area contains the yading@10: short-term loudness (3 seconds of analysis), and the gauge on the right is for yading@10: the momentary loudness (400 milliseconds). yading@10: yading@10: More information about the Loudness Recommendation EBU R128 on yading@10: @url{http://tech.ebu.ch/loudness}. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item video yading@10: Activate the video output. The audio stream is passed unchanged whether this yading@10: option is set or no. The video stream will be the first output stream if yading@10: activated. Default is @code{0}. yading@10: yading@10: @item size yading@10: Set the video size. This option is for video only. Default and minimum yading@10: resolution is @code{640x480}. yading@10: yading@10: @item meter yading@10: Set the EBU scale meter. Default is @code{9}. Common values are @code{9} and yading@10: @code{18}, respectively for EBU scale meter +9 and EBU scale meter +18. Any yading@10: other integer value between this range is allowed. yading@10: yading@10: @item metadata yading@10: Set metadata injection. If set to @code{1}, the audio input will be segmented yading@10: into 100ms output frames, each of them containing various loudness information yading@10: in metadata. All the metadata keys are prefixed with @code{lavfi.r128.}. yading@10: yading@10: Default is @code{0}. yading@10: yading@10: @item framelog yading@10: Force the frame logging level. yading@10: yading@10: Available values are: yading@10: @table @samp yading@10: @item info yading@10: information logging level yading@10: @item verbose yading@10: verbose logging level yading@10: @end table yading@10: yading@10: By default, the logging level is set to @var{info}. If the @option{video} or yading@10: the @option{metadata} options are set, it switches to @var{verbose}. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Real-time graph using @command{ffplay}, with a EBU scale meter +18: yading@10: @example yading@10: ffplay -f lavfi -i "amovie=input.mp3,ebur128=video=1:meter=18 [out0][out1]" yading@10: @end example yading@10: yading@10: @item yading@10: Run an analysis with @command{ffmpeg}: yading@10: @example yading@10: ffmpeg -nostats -i input.mp3 -filter_complex ebur128 -f null - yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section settb, asettb yading@10: yading@10: Set the timebase to use for the output frames timestamps. yading@10: It is mainly useful for testing timebase configuration. yading@10: yading@10: This filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item expr, tb yading@10: The expression which is evaluated into the output timebase. yading@10: yading@10: @end table yading@10: yading@10: The value for @option{tb} is an arithmetic expression representing a yading@10: rational. The expression can contain the constants "AVTB" (the default yading@10: timebase), "intb" (the input timebase) and "sr" (the sample rate, yading@10: audio only). Default value is "intb". yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Set the timebase to 1/25: yading@10: @example yading@10: settb=expr=1/25 yading@10: @end example yading@10: yading@10: @item yading@10: Set the timebase to 1/10: yading@10: @example yading@10: settb=expr=0.1 yading@10: @end example yading@10: yading@10: @item yading@10: Set the timebase to 1001/1000: yading@10: @example yading@10: settb=1+0.001 yading@10: @end example yading@10: yading@10: @item yading@10: Set the timebase to 2*intb: yading@10: @example yading@10: settb=2*intb yading@10: @end example yading@10: yading@10: @item yading@10: Set the default timebase value: yading@10: @example yading@10: settb=AVTB yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section concat yading@10: yading@10: Concatenate audio and video streams, joining them together one after the yading@10: other. yading@10: yading@10: The filter works on segments of synchronized video and audio streams. All yading@10: segments must have the same number of streams of each type, and that will yading@10: also be the number of streams at output. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: yading@10: @item n yading@10: Set the number of segments. Default is 2. yading@10: yading@10: @item v yading@10: Set the number of output video streams, that is also the number of video yading@10: streams in each segment. Default is 1. yading@10: yading@10: @item a yading@10: Set the number of output audio streams, that is also the number of video yading@10: streams in each segment. Default is 0. yading@10: yading@10: @item unsafe yading@10: Activate unsafe mode: do not fail if segments have a different format. yading@10: yading@10: @end table yading@10: yading@10: The filter has @var{v}+@var{a} outputs: first @var{v} video outputs, then yading@10: @var{a} audio outputs. yading@10: yading@10: There are @var{n}x(@var{v}+@var{a}) inputs: first the inputs for the first yading@10: segment, in the same order as the outputs, then the inputs for the second yading@10: segment, etc. yading@10: yading@10: Related streams do not always have exactly the same duration, for various yading@10: reasons including codec frame size or sloppy authoring. For that reason, yading@10: related synchronized streams (e.g. a video and its audio track) should be yading@10: concatenated at once. The concat filter will use the duration of the longest yading@10: stream in each segment (except the last one), and if necessary pad shorter yading@10: audio streams with silence. yading@10: yading@10: For this filter to work correctly, all segments must start at timestamp 0. yading@10: yading@10: All corresponding streams must have the same parameters in all segments; the yading@10: filtering system will automatically select a common pixel format for video yading@10: streams, and a common sample format, sample rate and channel layout for yading@10: audio streams, but other settings, such as resolution, must be converted yading@10: explicitly by the user. yading@10: yading@10: Different frame rates are acceptable but will result in variable frame rate yading@10: at output; be sure to configure the output file to handle it. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Concatenate an opening, an episode and an ending, all in bilingual version yading@10: (video in stream 0, audio in streams 1 and 2): yading@10: @example yading@10: ffmpeg -i opening.mkv -i episode.mkv -i ending.mkv -filter_complex \ yading@10: '[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2] yading@10: concat=n=3:v=1:a=2 [v] [a1] [a2]' \ yading@10: -map '[v]' -map '[a1]' -map '[a2]' output.mkv yading@10: @end example yading@10: yading@10: @item yading@10: Concatenate two parts, handling audio and video separately, using the yading@10: (a)movie sources, and adjusting the resolution: yading@10: @example yading@10: movie=part1.mp4, scale=512:288 [v1] ; amovie=part1.mp4 [a1] ; yading@10: movie=part2.mp4, scale=512:288 [v2] ; amovie=part2.mp4 [a2] ; yading@10: [v1] [v2] concat [outv] ; [a1] [a2] concat=v=0:a=1 [outa] yading@10: @end example yading@10: Note that a desync will happen at the stitch if the audio and video streams yading@10: do not have exactly the same duration in the first file. yading@10: yading@10: @end itemize yading@10: yading@10: @section showspectrum yading@10: yading@10: Convert input audio to a video output, representing the audio frequency yading@10: spectrum. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item size, s yading@10: Specify the video size for the output. Default value is @code{640x512}. yading@10: yading@10: @item slide yading@10: Specify if the spectrum should slide along the window. Default value is yading@10: @code{0}. yading@10: yading@10: @item mode yading@10: Specify display mode. yading@10: yading@10: It accepts the following values: yading@10: @table @samp yading@10: @item combined yading@10: all channels are displayed in the same row yading@10: @item separate yading@10: all channels are displayed in separate rows yading@10: @end table yading@10: yading@10: Default value is @samp{combined}. yading@10: yading@10: @item color yading@10: Specify display color mode. yading@10: yading@10: It accepts the following values: yading@10: @table @samp yading@10: @item channel yading@10: each channel is displayed in a separate color yading@10: @item intensity yading@10: each channel is is displayed using the same color scheme yading@10: @end table yading@10: yading@10: Default value is @samp{channel}. yading@10: yading@10: @item scale yading@10: Specify scale used for calculating intensity color values. yading@10: yading@10: It accepts the following values: yading@10: @table @samp yading@10: @item lin yading@10: linear yading@10: @item sqrt yading@10: square root, default yading@10: @item cbrt yading@10: cubic root yading@10: @item log yading@10: logarithmic yading@10: @end table yading@10: yading@10: Default value is @samp{sqrt}. yading@10: yading@10: @item saturation yading@10: Set saturation modifier for displayed colors. Negative values provide yading@10: alternative color scheme. @code{0} is no saturation at all. yading@10: Saturation must be in [-10.0, 10.0] range. yading@10: Default value is @code{1}. yading@10: @end table yading@10: yading@10: The usage is very similar to the showwaves filter; see the examples in that yading@10: section. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Large window with logarithmic color scaling: yading@10: @example yading@10: showspectrum=s=1280x480:scale=log yading@10: @end example yading@10: yading@10: @item yading@10: Complete example for a colored and sliding spectrum per channel using @command{ffplay}: yading@10: @example yading@10: ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1]; yading@10: [a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]' yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section showwaves yading@10: yading@10: Convert input audio to a video output, representing the samples waves. yading@10: yading@10: The filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item size, s yading@10: Specify the video size for the output. Default value is "600x240". yading@10: yading@10: @item mode yading@10: Set display mode. yading@10: yading@10: Available values are: yading@10: @table @samp yading@10: @item point yading@10: Draw a point for each sample. yading@10: yading@10: @item line yading@10: Draw a vertical line for each sample. yading@10: @end table yading@10: yading@10: Default value is @code{point}. yading@10: yading@10: @item n yading@10: Set the number of samples which are printed on the same column. A yading@10: larger value will decrease the frame rate. Must be a positive yading@10: integer. This option can be set only if the value for @var{rate} yading@10: is not explicitly specified. yading@10: yading@10: @item rate, r yading@10: Set the (approximate) output frame rate. This is done by setting the yading@10: option @var{n}. Default value is "25". yading@10: yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Output the input file audio and the corresponding video representation yading@10: at the same time: yading@10: @example yading@10: amovie=a.mp3,asplit[out0],showwaves[out1] yading@10: @end example yading@10: yading@10: @item yading@10: Create a synthetic signal and show it with showwaves, forcing a yading@10: frame rate of 30 frames per second: yading@10: @example yading@10: aevalsrc=sin(1*2*PI*t)*sin(880*2*PI*t):cos(2*PI*200*t),asplit[out0],showwaves=r=30[out1] yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section split, asplit yading@10: yading@10: Split input into several identical outputs. yading@10: yading@10: @code{asplit} works with audio input, @code{split} with video. yading@10: yading@10: The filter accepts a single parameter which specifies the number of outputs. If yading@10: unspecified, it defaults to 2. yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Create two separate outputs from the same input: yading@10: @example yading@10: [in] split [out0][out1] yading@10: @end example yading@10: yading@10: @item yading@10: To create 3 or more outputs, you need to specify the number of yading@10: outputs, like in: yading@10: @example yading@10: [in] asplit=3 [out0][out1][out2] yading@10: @end example yading@10: yading@10: @item yading@10: Create two separate outputs from the same input, one cropped and yading@10: one padded: yading@10: @example yading@10: [in] split [splitout1][splitout2]; yading@10: [splitout1] crop=100:100:0:0 [cropout]; yading@10: [splitout2] pad=200:200:100:100 [padout]; yading@10: @end example yading@10: yading@10: @item yading@10: Create 5 copies of the input audio with @command{ffmpeg}: yading@10: @example yading@10: ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT yading@10: @end example yading@10: @end itemize yading@10: yading@10: @c man end MULTIMEDIA FILTERS yading@10: yading@10: @chapter Multimedia Sources yading@10: @c man begin MULTIMEDIA SOURCES yading@10: yading@10: Below is a description of the currently available multimedia sources. yading@10: yading@10: @section amovie yading@10: yading@10: This is the same as @ref{movie} source, except it selects an audio yading@10: stream by default. yading@10: yading@10: @anchor{movie} yading@10: @section movie yading@10: yading@10: Read audio and/or video stream(s) from a movie container. yading@10: yading@10: This filter accepts the following options: yading@10: yading@10: @table @option yading@10: @item filename yading@10: The name of the resource to read (not necessarily a file but also a device or a yading@10: stream accessed through some protocol). yading@10: yading@10: @item format_name, f yading@10: Specifies the format assumed for the movie to read, and can be either yading@10: the name of a container or an input device. If not specified the yading@10: format is guessed from @var{movie_name} or by probing. yading@10: yading@10: @item seek_point, sp yading@10: Specifies the seek point in seconds, the frames will be output yading@10: starting from this seek point, the parameter is evaluated with yading@10: @code{av_strtod} so the numerical value may be suffixed by an IS yading@10: postfix. Default value is "0". yading@10: yading@10: @item streams, s yading@10: Specifies the streams to read. Several streams can be specified, yading@10: separated by "+". The source will then have as many outputs, in the yading@10: same order. The syntax is explained in the ``Stream specifiers'' yading@10: section in the ffmpeg manual. Two special names, "dv" and "da" specify yading@10: respectively the default (best suited) video and audio stream. Default yading@10: is "dv", or "da" if the filter is called as "amovie". yading@10: yading@10: @item stream_index, si yading@10: Specifies the index of the video stream to read. If the value is -1, yading@10: the best suited video stream will be automatically selected. Default yading@10: value is "-1". Deprecated. If the filter is called "amovie", it will select yading@10: audio instead of video. yading@10: yading@10: @item loop yading@10: Specifies how many times to read the stream in sequence. yading@10: If the value is less than 1, the stream will be read again and again. yading@10: Default value is "1". yading@10: yading@10: Note that when the movie is looped the source timestamps are not yading@10: changed, so it will generate non monotonically increasing timestamps. yading@10: @end table yading@10: yading@10: This filter allows to overlay a second video on top of main input of yading@10: a filtergraph as shown in this graph: yading@10: @example yading@10: input -----------> deltapts0 --> overlay --> output yading@10: ^ yading@10: | yading@10: movie --> scale--> deltapts1 -------+ yading@10: @end example yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Skip 3.2 seconds from the start of the avi file in.avi, and overlay it yading@10: on top of the input labelled as "in": yading@10: @example yading@10: movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over]; yading@10: [in] setpts=PTS-STARTPTS [main]; yading@10: [main][over] overlay=16:16 [out] yading@10: @end example yading@10: yading@10: @item yading@10: Read from a video4linux2 device, and overlay it on top of the input yading@10: labelled as "in": yading@10: @example yading@10: movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [over]; yading@10: [in] setpts=PTS-STARTPTS [main]; yading@10: [main][over] overlay=16:16 [out] yading@10: @end example yading@10: yading@10: @item yading@10: Read the first video stream and the audio stream with id 0x81 from yading@10: dvd.vob; the video is connected to the pad named "video" and the audio is yading@10: connected to the pad named "audio": yading@10: @example yading@10: movie=dvd.vob:s=v:0+#0x81 [video] [audio] yading@10: @end example yading@10: @end itemize yading@10: yading@10: @c man end MULTIMEDIA SOURCES