@chapter Encoders
@c man begin ENCODERS

Encoders are configured elements in FFmpeg which allow the encoding of
multimedia streams.

When you configure your FFmpeg build, all the supported native encoders
are enabled by default. Encoders requiring an external library must be enabled
manually via the corresponding @code{--enable-lib} option. You can list all
available encoders using the configure option @code{--list-encoders}.

You can disable all the encoders with the configure option
@code{--disable-encoders} and selectively enable / disable single encoders
with the options @code{--enable-encoder=@var{ENCODER}} /
@code{--disable-encoder=@var{ENCODER}}.

The option @code{-encoders} of the ff* tools will display the list of
enabled encoders.

@c man end ENCODERS

@chapter Audio Encoders
@c man begin AUDIO ENCODERS

A description of some of the currently available audio encoders
follows.

@anchor{aacenc}
@section aac

Advanced Audio Coding (AAC) encoder.

This encoder is an experimental FFmpeg-native AAC encoder. Currently only the
low complexity (AAC-LC) profile is supported. To use this encoder, you must set
@option{strict} option to @samp{experimental} or lower.

As this encoder is experimental, unexpected behavior may exist from time to
time. For a more stable AAC encoder, see @ref{libvo-aacenc}. However, be warned
that it has a worse quality reported by some users.

@c todo @ref{libaacplus}
See also @ref{libfdk-aac-enc,,libfdk_aac} and @ref{libfaac}.

@subsection Options

@table @option
@item b
Set bit rate in bits/s. Setting this automatically activates constant bit rate
(CBR) mode.

@item q
Set quality for variable bit rate (VBR) mode. This option is valid only using
the @command{ffmpeg} command-line tool. For library interface users, use
@option{global_quality}.

@item stereo_mode
Set stereo encoding mode. Possible values:

@table @samp
@item auto
Automatically selected by the encoder.

@item ms_off
Disable middle/side encoding. This is the default.

@item ms_force
Force middle/side encoding.
@end table

@item aac_coder
Set AAC encoder coding method. Possible values:

@table @samp
@item faac
FAAC-inspired method.

This method is a simplified reimplementation of the method used in FAAC, which
sets thresholds proportional to the band energies, and then decreases all the
thresholds with quantizer steps to find the appropriate quantization with
distortion below threshold band by band.

The quality of this method is comparable to the two loop searching method
described below, but somewhat a little better and slower.

@item anmr
Average noise to mask ratio (ANMR) trellis-based solution.

This has a theoretic best quality out of all the coding methods, but at the
cost of the slowest speed.

@item twoloop
Two loop searching (TLS) method.

This method first sets quantizers depending on band thresholds and then tries
to find an optimal combination by adding or subtracting a specific value from
all quantizers and adjusting some individual quantizer a little.

This method produces similar quality with the FAAC method and is the default.

@item fast
Constant quantizer method.

This method sets a constant quantizer for all bands. This is the fastest of all
the methods, yet produces the worst quality.

@end table

@end table

@section ac3 and ac3_fixed

AC-3 audio encoders.

These encoders implement part of ATSC A/52:2010 and ETSI TS 102 366, as well as
the undocumented RealAudio 3 (a.k.a. dnet).

The @var{ac3} encoder uses floating-point math, while the @var{ac3_fixed}
encoder only uses fixed-point integer math. This does not mean that one is
always faster, just that one or the other may be better suited to a
particular system. The floating-point encoder will generally produce better
quality audio for a given bitrate. The @var{ac3_fixed} encoder is not the
default codec for any of the output formats, so it must be specified explicitly
using the option @code{-acodec ac3_fixed} in order to use it.

@subsection AC-3 Metadata

The AC-3 metadata options are used to set parameters that describe the audio,
but in most cases do not affect the audio encoding itself. Some of the options
do directly affect or influence the decoding and playback of the resulting
bitstream, while others are just for informational purposes. A few of the
options will add bits to the output stream that could otherwise be used for
audio data, and will thus affect the quality of the output. Those will be
indicated accordingly with a note in the option list below.

These parameters are described in detail in several publicly-available
documents.
@itemize
@item @uref{http://www.atsc.org/cms/standards/a_52-2010.pdf,A/52:2010 - Digital Audio Compression (AC-3) (E-AC-3) Standard}
@item @uref{http://www.atsc.org/cms/standards/a_54a_with_corr_1.pdf,A/54 - Guide to the Use of the ATSC Digital Television Standard}
@item @uref{http://www.dolby.com/uploadedFiles/zz-_Shared_Assets/English_PDFs/Professional/18_Metadata.Guide.pdf,Dolby Metadata Guide}
@item @uref{http://www.dolby.com/uploadedFiles/zz-_Shared_Assets/English_PDFs/Professional/46_DDEncodingGuidelines.pdf,Dolby Digital Professional Encoding Guidelines}
@end itemize

@subsubsection Metadata Control Options

@table @option

@item -per_frame_metadata @var{boolean}
Allow Per-Frame Metadata. Specifies if the encoder should check for changing
metadata for each frame.
@table @option
@item 0
The metadata values set at initialization will be used for every frame in the
stream. (default)
@item 1
Metadata values can be changed before encoding each frame.
@end table

@end table

@subsubsection Downmix Levels

@table @option

@item -center_mixlev @var{level}
Center Mix Level. The amount of gain the decoder should apply to the center
channel when downmixing to stereo. This field will only be written to the
bitstream if a center channel is present. The value is specified as a scale
factor. There are 3 valid values:
@table @option
@item 0.707
Apply -3dB gain
@item 0.595
Apply -4.5dB gain (default)
@item 0.500
Apply -6dB gain
@end table

@item -surround_mixlev @var{level}
Surround Mix Level. The amount of gain the decoder should apply to the surround
channel(s) when downmixing to stereo. This field will only be written to the
bitstream if one or more surround channels are present. The value is specified
as a scale factor.  There are 3 valid values:
@table @option
@item 0.707
Apply -3dB gain
@item 0.500
Apply -6dB gain (default)
@item 0.000
Silence Surround Channel(s)
@end table

@end table

@subsubsection Audio Production Information
Audio Production Information is optional information describing the mixing
environment.  Either none or both of the fields are written to the bitstream.

@table @option

@item -mixing_level @var{number}
Mixing Level. Specifies peak sound pressure level (SPL) in the production
environment when the mix was mastered. Valid values are 80 to 111, or -1 for
unknown or not indicated. The default value is -1, but that value cannot be
used if the Audio Production Information is written to the bitstream. Therefore,
if the @code{room_type} option is not the default value, the @code{mixing_level}
option must not be -1.

@item -room_type @var{type}
Room Type. Describes the equalization used during the final mixing session at
the studio or on the dubbing stage. A large room is a dubbing stage with the
industry standard X-curve equalization; a small room has flat equalization.
This field will not be written to the bitstream if both the @code{mixing_level}
option and the @code{room_type} option have the default values.
@table @option
@item 0
@itemx notindicated
Not Indicated (default)
@item 1
@itemx large
Large Room
@item 2
@itemx small
Small Room
@end table

@end table

@subsubsection Other Metadata Options

@table @option

@item -copyright @var{boolean}
Copyright Indicator. Specifies whether a copyright exists for this audio.
@table @option
@item 0
@itemx off
No Copyright Exists (default)
@item 1
@itemx on
Copyright Exists
@end table

@item -dialnorm @var{value}
Dialogue Normalization. Indicates how far the average dialogue level of the
program is below digital 100% full scale (0 dBFS). This parameter determines a
level shift during audio reproduction that sets the average volume of the
dialogue to a preset level. The goal is to match volume level between program
sources. A value of -31dB will result in no volume level change, relative to
the source volume, during audio reproduction. Valid values are whole numbers in
the range -31 to -1, with -31 being the default.

@item -dsur_mode @var{mode}
Dolby Surround Mode. Specifies whether the stereo signal uses Dolby Surround
(Pro Logic). This field will only be written to the bitstream if the audio
stream is stereo. Using this option does @b{NOT} mean the encoder will actually
apply Dolby Surround processing.
@table @option
@item 0
@itemx notindicated
Not Indicated (default)
@item 1
@itemx off
Not Dolby Surround Encoded
@item 2
@itemx on
Dolby Surround Encoded
@end table

@item -original @var{boolean}
Original Bit Stream Indicator. Specifies whether this audio is from the
original source and not a copy.
@table @option
@item 0
@itemx off
Not Original Source
@item 1
@itemx on
Original Source (default)
@end table

@end table

@subsection Extended Bitstream Information
The extended bitstream options are part of the Alternate Bit Stream Syntax as
specified in Annex D of the A/52:2010 standard. It is grouped into 2 parts.
If any one parameter in a group is specified, all values in that group will be
written to the bitstream.  Default values are used for those that are written
but have not been specified.  If the mixing levels are written, the decoder
will use these values instead of the ones specified in the @code{center_mixlev}
and @code{surround_mixlev} options if it supports the Alternate Bit Stream
Syntax.

@subsubsection Extended Bitstream Information - Part 1

@table @option

@item -dmix_mode @var{mode}
Preferred Stereo Downmix Mode. Allows the user to select either Lt/Rt
(Dolby Surround) or Lo/Ro (normal stereo) as the preferred stereo downmix mode.
@table @option
@item 0
@itemx notindicated
Not Indicated (default)
@item 1
@itemx ltrt
Lt/Rt Downmix Preferred
@item 2
@itemx loro
Lo/Ro Downmix Preferred
@end table

@item -ltrt_cmixlev @var{level}
Lt/Rt Center Mix Level. The amount of gain the decoder should apply to the
center channel when downmixing to stereo in Lt/Rt mode.
@table @option
@item 1.414
Apply +3dB gain
@item 1.189
Apply +1.5dB gain
@item 1.000
Apply 0dB gain
@item 0.841
Apply -1.5dB gain
@item 0.707
Apply -3.0dB gain
@item 0.595
Apply -4.5dB gain (default)
@item 0.500
Apply -6.0dB gain
@item 0.000
Silence Center Channel
@end table

@item -ltrt_surmixlev @var{level}
Lt/Rt Surround Mix Level. The amount of gain the decoder should apply to the
surround channel(s) when downmixing to stereo in Lt/Rt mode.
@table @option
@item 0.841
Apply -1.5dB gain
@item 0.707
Apply -3.0dB gain
@item 0.595
Apply -4.5dB gain
@item 0.500
Apply -6.0dB gain (default)
@item 0.000
Silence Surround Channel(s)
@end table

@item -loro_cmixlev @var{level}
Lo/Ro Center Mix Level. The amount of gain the decoder should apply to the
center channel when downmixing to stereo in Lo/Ro mode.
@table @option
@item 1.414
Apply +3dB gain
@item 1.189
Apply +1.5dB gain
@item 1.000
Apply 0dB gain
@item 0.841
Apply -1.5dB gain
@item 0.707
Apply -3.0dB gain
@item 0.595
Apply -4.5dB gain (default)
@item 0.500
Apply -6.0dB gain
@item 0.000
Silence Center Channel
@end table

@item -loro_surmixlev @var{level}
Lo/Ro Surround Mix Level. The amount of gain the decoder should apply to the
surround channel(s) when downmixing to stereo in Lo/Ro mode.
@table @option
@item 0.841
Apply -1.5dB gain
@item 0.707
Apply -3.0dB gain
@item 0.595
Apply -4.5dB gain
@item 0.500
Apply -6.0dB gain (default)
@item 0.000
Silence Surround Channel(s)
@end table

@end table

@subsubsection Extended Bitstream Information - Part 2

@table @option

@item -dsurex_mode @var{mode}
Dolby Surround EX Mode. Indicates whether the stream uses Dolby Surround EX
(7.1 matrixed to 5.1). Using this option does @b{NOT} mean the encoder will actually
apply Dolby Surround EX processing.
@table @option
@item 0
@itemx notindicated
Not Indicated (default)
@item 1
@itemx on
Dolby Surround EX Off
@item 2
@itemx off
Dolby Surround EX On
@end table

@item -dheadphone_mode @var{mode}
Dolby Headphone Mode. Indicates whether the stream uses Dolby Headphone
encoding (multi-channel matrixed to 2.0 for use with headphones). Using this
option does @b{NOT} mean the encoder will actually apply Dolby Headphone
processing.
@table @option
@item 0
@itemx notindicated
Not Indicated (default)
@item 1
@itemx on
Dolby Headphone Off
@item 2
@itemx off
Dolby Headphone On
@end table

@item -ad_conv_type @var{type}
A/D Converter Type. Indicates whether the audio has passed through HDCD A/D
conversion.
@table @option
@item 0
@itemx standard
Standard A/D Converter (default)
@item 1
@itemx hdcd
HDCD A/D Converter
@end table

@end table

@subsection Other AC-3 Encoding Options

@table @option

@item -stereo_rematrixing @var{boolean}
Stereo Rematrixing. Enables/Disables use of rematrixing for stereo input. This
is an optional AC-3 feature that increases quality by selectively encoding
the left/right channels as mid/side. This option is enabled by default, and it
is highly recommended that it be left as enabled except for testing purposes.

@end table

@subsection Floating-Point-Only AC-3 Encoding Options

These options are only valid for the floating-point encoder and do not exist
for the fixed-point encoder due to the corresponding features not being
implemented in fixed-point.

@table @option

@item -channel_coupling @var{boolean}
Enables/Disables use of channel coupling, which is an optional AC-3 feature
that increases quality by combining high frequency information from multiple
channels into a single channel. The per-channel high frequency information is
sent with less accuracy in both the frequency and time domains. This allows
more bits to be used for lower frequencies while preserving enough information
to reconstruct the high frequencies. This option is enabled by default for the
floating-point encoder and should generally be left as enabled except for
testing purposes or to increase encoding speed.
@table @option
@item -1
@itemx auto
Selected by Encoder (default)
@item 0
@itemx off
Disable Channel Coupling
@item 1
@itemx on
Enable Channel Coupling
@end table

@item -cpl_start_band @var{number}
Coupling Start Band. Sets the channel coupling start band, from 1 to 15. If a
value higher than the bandwidth is used, it will be reduced to 1 less than the
coupling end band. If @var{auto} is used, the start band will be determined by
the encoder based on the bit rate, sample rate, and channel layout. This option
has no effect if channel coupling is disabled.
@table @option
@item -1
@itemx auto
Selected by Encoder (default)
@end table

@end table

@anchor{flac}
@section flac

FLAC (Free Lossless Audio Codec) Encoder

@subsection Options

The following options are supported by FFmpeg's flac encoder.

@table @option
@item compression_level
Sets the compression level, which chooses defaults for many other options
if they are not set explicitly.

@item frame_size
Sets the size of the frames in samples per channel.

@item lpc_coeff_precision
Sets the LPC coefficient precision, valid values are from 1 to 15, 15 is the
default.

@item lpc_type
Sets the first stage LPC algorithm
@table @samp
@item none
LPC is not used

@item fixed
fixed LPC coefficients

@item levinson

@item cholesky
@end table

@item lpc_passes
Number of passes to use for Cholesky factorization during LPC analysis

@item min_partition_order
The minimum partition order

@item max_partition_order
The maximum partition order

@item prediction_order_method
@table @samp
@item estimation
@item 2level
@item 4level
@item 8level
@item search
Bruteforce search
@item log
@end table

@item ch_mode
Channel mode
@table @samp
@item auto
The mode is chosen automatically for each frame
@item indep
Chanels are independently coded
@item left_side
@item right_side
@item mid_side
@end table

@item exact_rice_parameters
Chooses if rice parameters are calculated exactly or approximately.
if set to 1 then they are chosen exactly, which slows the code down slightly and
improves compression slightly.

@item multi_dim_quant
Multi Dimensional Quantization. If set to 1 then a 2nd stage LPC algorithm is
applied after the first stage to finetune the coefficients. This is quite slow
and slightly improves compression.

@end table

@anchor{libfaac}
@section libfaac

libfaac AAC (Advanced Audio Coding) encoder wrapper.

Requires the presence of the libfaac headers and library during
configuration. You need to explicitly configure the build with
@code{--enable-libfaac --enable-nonfree}.

This encoder is considered to be of higher quality with respect to the
@ref{aacenc,,the native experimental FFmpeg AAC encoder}.

For more information see the libfaac project at
@url{http://www.audiocoding.com/faac.html/}.

@subsection Options

The following shared FFmpeg codec options are recognized.

The following options are supported by the libfaac wrapper. The
@command{faac}-equivalent of the options are listed in parentheses.

@table @option
@item b (@emph{-b})
Set bit rate in bits/s for ABR (Average Bit Rate) mode. If the bit rate
is not explicitly specified, it is automatically set to a suitable
value depending on the selected profile. @command{faac} bitrate is
expressed in kilobits/s.

Note that libfaac does not support CBR (Constant Bit Rate) but only
ABR (Average Bit Rate).

If VBR mode is enabled this option is ignored.

@item ar (@emph{-R})
Set audio sampling rate (in Hz).

@item ac (@emph{-c})
Set the number of audio channels.

@item cutoff (@emph{-C})
Set cutoff frequency. If not specified (or explicitly set to 0) it
will use a value automatically computed by the library. Default value
is 0.

@item profile
Set audio profile.

The following profiles are recognized:
@table @samp
@item aac_main
Main AAC (Main)

@item aac_low
Low Complexity AAC (LC)

@item aac_ssr
Scalable Sample Rate (SSR)

@item aac_ltp
Long Term Prediction (LTP)
@end table

If not specified it is set to @samp{aac_low}.

@item flags +qscale
Set constant quality VBR (Variable Bit Rate) mode.

@item global_quality
Set quality in VBR mode as an integer number of lambda units.

Only relevant when VBR mode is enabled with @code{flags +qscale}.  The
value is converted to QP units by dividing it by @code{FF_QP2LAMBDA},
and used to set the quality value used by libfaac. A reasonable range
for the option value in QP units is [10-500], the higher the value the
higher the quality.

@item q (@emph{-q})
Enable VBR mode when set to a non-negative value, and set constant
quality value as a double floating point value in QP units.

The value sets the quality value used by libfaac. A reasonable range
for the option value is [10-500], the higher the value the higher the
quality.

This option is valid only using the @command{ffmpeg} command-line
tool. For library interface users, use @option{global_quality}.
@end table

@subsection Examples

@itemize
@item
Use @command{ffmpeg} to convert an audio file to ABR 128 kbps AAC in an M4A (MP4)
container:
@example
ffmpeg -i input.wav -codec:a libfaac -b:a 128k -output.m4a
@end example

@item
Use @command{ffmpeg} to convert an audio file to VBR AAC, using the
LTP AAC profile:
@example
ffmpeg -i input.wav -c:a libfaac -profile:a aac_ltp -q:a 100 output.m4a
@end example
@end itemize

@anchor{libfdk-aac-enc}
@section libfdk_aac

libfdk-aac AAC (Advanced Audio Coding) encoder wrapper.

The libfdk-aac library is based on the Fraunhofer FDK AAC code from
the Android project.

Requires the presence of the libfdk-aac headers and library during
configuration. You need to explicitly configure the build with
@code{--enable-libfdk-aac}. The library is also incompatible with GPL,
so if you allow the use of GPL, you should configure with
@code{--enable-gpl --enable-nonfree --enable-libfdk-aac}.

This encoder is considered to be of higher quality with respect to
both @ref{aacenc,,the native experimental FFmpeg AAC encoder} and
@ref{libfaac}.

VBR encoding, enabled through the @option{vbr} or @option{flags
+qscale} options, is experimental and only works with some
combinations of parameters.

Support for encoding 7.1 audio is only available with libfdk-aac 0.1.3 or
higher.

For more information see the fdk-aac project at
@url{http://sourceforge.net/p/opencore-amr/fdk-aac/}.

@subsection Options

The following options are mapped on the shared FFmpeg codec options.

@table @option
@item b
Set bit rate in bits/s. If the bitrate is not explicitly specified, it
is automatically set to a suitable value depending on the selected
profile.

In case VBR mode is enabled the option is ignored.

@item ar
Set audio sampling rate (in Hz).

@item channels
Set the number of audio channels.

@item flags +qscale
Enable fixed quality, VBR (Variable Bit Rate) mode.
Note that VBR is implicitly enabled when the @option{vbr} value is
positive.

@item cutoff
Set cutoff frequency. If not specified (or explicitly set to 0) it
will use a value automatically computed by the library. Default value
is 0.

@item profile
Set audio profile.

The following profiles are recognized:
@table @samp
@item aac_low
Low Complexity AAC (LC)

@item aac_he
High Efficiency AAC (HE-AAC)

@item aac_he_v2
High Efficiency AAC version 2 (HE-AACv2)

@item aac_ld
Low Delay AAC (LD)

@item aac_eld
Enhanced Low Delay AAC (ELD)
@end table

If not specified it is set to @samp{aac_low}.
@end table

The following are private options of the libfdk_aac encoder.

@table @option
@item afterburner
Enable afterburner feature if set to 1, disabled if set to 0. This
improves the quality but also the required processing power.

Default value is 1.

@item eld_sbr
Enable SBR (Spectral Band Replication) for ELD if set to 1, disabled
if set to 0.

Default value is 0.

@item signaling
Set SBR/PS signaling style.

It can assume one of the following values:
@table @samp
@item default
choose signaling implicitly (explicit hierarchical by default,
implicit if global header is disabled)

@item implicit
implicit backwards compatible signaling

@item explicit_sbr
explicit SBR, implicit PS signaling

@item explicit_hierarchical
explicit hierarchical signaling
@end table

Default value is @samp{default}.

@item latm
Output LATM/LOAS encapsulated data if set to 1, disabled if set to 0.

Default value is 0.

@item header_period
Set StreamMuxConfig and PCE repetition period (in frames) for sending
in-band configuration buffers within LATM/LOAS transport layer.

Must be a 16-bits non-negative integer.

Default value is 0.

@item vbr
Set VBR mode, from 1 to 5. 1 is lowest quality (though still pretty
good) and 5 is highest quality. A value of 0 will disable VBR, and CBR
(Constant Bit Rate) is enabled.

Currently only the @samp{aac_low} profile supports VBR encoding.

VBR modes 1-5 correspond to roughly the following average bit rates:

@table @samp
@item 1
32 kbps/channel
@item 2
40 kbps/channel
@item 3
48-56 kbps/channel
@item 4
64 kbps/channel
@item 5
about 80-96 kbps/channel
@end table

Default value is 0.
@end table

@subsection Examples

@itemize
@item
Use @command{ffmpeg} to convert an audio file to VBR AAC in an M4A (MP4)
container:
@example
ffmpeg -i input.wav -codec:a libfdk_aac -vbr 3 output.m4a
@end example

@item
Use @command{ffmpeg} to convert an audio file to CBR 64k kbps AAC, using the
High-Efficiency AAC profile:
@example
ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he -b:a 64k output.m4a
@end example
@end itemize

@anchor{libmp3lame}
@section libmp3lame

LAME (Lame Ain't an MP3 Encoder) MP3 encoder wrapper.

Requires the presence of the libmp3lame headers and library during
configuration. You need to explicitly configure the build with
@code{--enable-libmp3lame}.

See @ref{libshine} for a fixed-point MP3 encoder, although with a
lower quality.

@subsection Options

The following options are supported by the libmp3lame wrapper. The
@command{lame}-equivalent of the options are listed in parentheses.

@table @option
@item b (@emph{-b})
Set bitrate expressed in bits/s for CBR or ABR. LAME @code{bitrate} is
expressed in kilobits/s.

@item q (@emph{-V})
Set constant quality setting for VBR. This option is valid only
using the @command{ffmpeg} command-line tool. For library interface
users, use @option{global_quality}.

@item compression_level (@emph{-q})
Set algorithm quality. Valid arguments are integers in the 0-9 range,
with 0 meaning highest quality but slowest, and 9 meaning fastest
while producing the worst quality.

@item reservoir
Enable use of bit reservoir when set to 1. Default value is 1. LAME
has this enabled by default, but can be overridden by use
@option{--nores} option.

@item joint_stereo (@emph{-m j})
Enable the encoder to use (on a frame by frame basis) either L/R
stereo or mid/side stereo. Default value is 1.

@item abr (@emph{--abr})
Enable the encoder to use ABR when set to 1. The @command{lame}
@option{--abr} sets the target bitrate, while this options only
tells FFmpeg to use ABR still relies on @option{b} to set bitrate.

@end table

@section libopencore-amrnb

OpenCORE Adaptive Multi-Rate Narrowband encoder.

Requires the presence of the libopencore-amrnb headers and library during
configuration. You need to explicitly configure the build with
@code{--enable-libopencore-amrnb --enable-version3}.

This is a mono-only encoder. Officially it only supports 8000Hz sample rate,
but you can override it by setting @option{strict} to @samp{unofficial} or
lower.

@subsection Options

@table @option

@item b
Set bitrate in bits per second. Only the following bitrates are supported,
otherwise libavcodec will round to the nearest valid bitrate.

@table @option
@item 4750
@item 5150
@item 5900
@item 6700
@item 7400
@item 7950
@item 10200
@item 12200
@end table

@item dtx
Allow discontinuous transmission (generate comfort noise) when set to 1. The
default value is 0 (disabled).

@end table

@anchor{libshine}
@section libshine

Shine Fixed-Point MP3 encoder wrapper.

Shine is a fixed-point MP3 encoder. It has a far better performance on
platforms without an FPU, e.g. armel CPUs, and some phones and tablets.
However, as it is more targeted on performance than quality, it is not on par
with LAME and other production-grade encoders quality-wise. Also, according to
the project's homepage, this encoder may not be free of bugs as the code was
written a long time ago and the project was dead for at least 5 years.

This encoder only supports stereo and mono input. This is also CBR-only.

The original project (last updated in early 2007) is at
@url{http://sourceforge.net/projects/libshine-fxp/}. We only support the
updated fork by the Savonet/Liquidsoap project at @url{https://github.com/savonet/shine}.

Requires the presence of the libshine headers and library during
configuration. You need to explicitly configure the build with
@code{--enable-libshine}.

See also @ref{libmp3lame}.

@subsection Options

The following options are supported by the libshine wrapper. The
@command{shineenc}-equivalent of the options are listed in parentheses.

@table @option
@item b (@emph{-b})
Set bitrate expressed in bits/s for CBR. @command{shineenc} @option{-b} option
is expressed in kilobits/s.

@end table

@section libtwolame

TwoLAME MP2 encoder wrapper.

Requires the presence of the libtwolame headers and library during
configuration. You need to explicitly configure the build with
@code{--enable-libtwolame}.

@subsection Options

The following options are supported by the libtwolame wrapper. The
@command{twolame}-equivalent options follow the FFmpeg ones and are in
parentheses.

@table @option
@item b (@emph{-b})
Set bitrate expressed in bits/s for CBR. @command{twolame} @option{b}
option is expressed in kilobits/s. Default value is 128k.

@item q (@emph{-V})
Set quality for experimental VBR support. Maximum value range is
from -50 to 50, useful range is from -10 to 10. The higher the
value, the better the quality. This option is valid only using the
@command{ffmpeg} command-line tool. For library interface users,
use @option{global_quality}.

@item mode (@emph{--mode})
Set the mode of the resulting audio. Possible values:

@table @samp
@item auto
Choose mode automatically based on the input. This is the default.
@item stereo
Stereo
@item joint_stereo
Joint stereo
@item dual_channel
Dual channel
@item mono
Mono
@end table

@item psymodel (@emph{--psyc-mode})
Set psychoacoustic model to use in encoding. The argument must be
an integer between -1 and 4, inclusive. The higher the value, the
better the quality. The default value is 3.

@item energy_levels (@emph{--energy})
Enable energy levels extensions when set to 1. The default value is
0 (disabled).

@item error_protection (@emph{--protect})
Enable CRC error protection when set to 1. The default value is 0
(disabled).

@item copyright (@emph{--copyright})
Set MPEG audio copyright flag when set to 1. The default value is 0
(disabled).

@item original (@emph{--original})
Set MPEG audio original flag when set to 1. The default value is 0
(disabled).

@end table

@anchor{libvo-aacenc}
@section libvo-aacenc

VisualOn AAC encoder.

Requires the presence of the libvo-aacenc headers and library during
configuration. You need to explicitly configure the build with
@code{--enable-libvo-aacenc --enable-version3}.

This encoder is considered to be worse than the
@ref{aacenc,,native experimental FFmpeg AAC encoder}, according to
multiple sources.

@subsection Options

The VisualOn AAC encoder only support encoding AAC-LC and up to 2
channels. It is also CBR-only.

@table @option

@item b
Set bit rate in bits/s.

@end table

@section libvo-amrwbenc

VisualOn Adaptive Multi-Rate Wideband encoder.

Requires the presence of the libvo-amrwbenc headers and library during
configuration. You need to explicitly configure the build with
@code{--enable-libvo-amrwbenc --enable-version3}.

This is a mono-only encoder. Officially it only supports 16000Hz sample
rate, but you can override it by setting @option{strict} to
@samp{unofficial} or lower.

@subsection Options

@table @option

@item b
Set bitrate in bits/s. Only the following bitrates are supported, otherwise
libavcodec will round to the nearest valid bitrate.

@table @samp
@item 6600
@item 8850
@item 12650
@item 14250
@item 15850
@item 18250
@item 19850
@item 23050
@item 23850
@end table

@item dtx
Allow discontinuous transmission (generate comfort noise) when set to 1. The
default value is 0 (disabled).

@end table

@section libopus

libopus Opus Interactive Audio Codec encoder wrapper.

Requires the presence of the libopus headers and library during
configuration. You need to explicitly configure the build with
@code{--enable-libopus}.

@subsection Option Mapping

Most libopus options are modelled after the @command{opusenc} utility from
opus-tools. The following is an option mapping chart describing options
supported by the libopus wrapper, and their @command{opusenc}-equivalent
in parentheses.

@table @option

@item b (@emph{bitrate})
Set the bit rate in bits/s.  FFmpeg's @option{b} option is
expressed in bits/s, while @command{opusenc}'s @option{bitrate} in
kilobits/s.

@item vbr (@emph{vbr}, @emph{hard-cbr}, and @emph{cvbr})
Set VBR mode. The FFmpeg @option{vbr} option has the following
valid arguments, with the their @command{opusenc} equivalent options
in parentheses:

@table @samp
@item off (@emph{hard-cbr})
Use constant bit rate encoding.

@item on (@emph{vbr})
Use variable bit rate encoding (the default).

@item constrained (@emph{cvbr})
Use constrained variable bit rate encoding.
@end table

@item compression_level (@emph{comp})
Set encoding algorithm complexity. Valid options are integers in
the 0-10 range. 0 gives the fastest encodes but lower quality, while 10
gives the highest quality but slowest encoding. The default is 10.

@item frame_duration (@emph{framesize})
Set maximum frame size, or duration of a frame in milliseconds. The
argument must be exactly the following: 2.5, 5, 10, 20, 40, 60. Smaller
frame sizes achieve lower latency but less quality at a given bitrate.
Sizes greater than 20ms are only interesting at fairly low bitrates.
The default is 20ms.

@item packet_loss (@emph{expect-loss})
Set expected packet loss percentage. The default is 0.

@item application (N.A.)
Set intended application type. Valid options are listed below:

@table @samp
@item voip
Favor improved speech intelligibility.
@item audio
Favor faithfulness to the input (the default).
@item lowdelay
Restrict to only the lowest delay modes.
@end table

@item cutoff (N.A.)
Set cutoff bandwidth in Hz. The argument must be exactly one of the
following: 4000, 6000, 8000, 12000, or 20000, corresponding to
narrowband, mediumband, wideband, super wideband, and fullband
respectively. The default is 0 (cutoff disabled).

@end table

@section libvorbis

libvorbis encoder wrapper.

Requires the presence of the libvorbisenc headers and library during
configuration. You need to explicitly configure the build with
@code{--enable-libvorbis}.

@subsection Options

The following options are supported by the libvorbis wrapper. The
@command{oggenc}-equivalent of the options are listed in parentheses.

To get a more accurate and extensive documentation of the libvorbis
options, consult the libvorbisenc's and @command{oggenc}'s documentations.
See @url{http://xiph.org/vorbis/},
@url{http://wiki.xiph.org/Vorbis-tools}, and oggenc(1).

@table @option
@item b (@emph{-b})
Set bitrate expressed in bits/s for ABR. @command{oggenc} @option{-b} is
expressed in kilobits/s.

@item q (@emph{-q})
Set constant quality setting for VBR. The value should be a float
number in the range of -1.0 to 10.0. The higher the value, the better
the quality. The default value is @samp{3.0}.

This option is valid only using the @command{ffmpeg} command-line tool.
For library interface users, use @option{global_quality}.

@item cutoff (@emph{--advanced-encode-option lowpass_frequency=N})
Set cutoff bandwidth in Hz, a value of 0 disables cutoff. @command{oggenc}'s
related option is expressed in kHz. The default value is @samp{0} (cutoff
disabled).

@item minrate (@emph{-m})
Set minimum bitrate expressed in bits/s. @command{oggenc} @option{-m} is
expressed in kilobits/s.

@item maxrate (@emph{-M})
Set maximum bitrate expressed in bits/s. @command{oggenc} @option{-M} is
expressed in kilobits/s. This only has effect on ABR mode.

@item iblock (@emph{--advanced-encode-option impulse_noisetune=N})
Set noise floor bias for impulse blocks. The value is a float number from
-15.0 to 0.0. A negative bias instructs the encoder to pay special attention
to the crispness of transients in the encoded audio. The tradeoff for better
transient response is a higher bitrate.

@end table

@anchor{libwavpack}
@section libwavpack

A wrapper providing WavPack encoding through libwavpack.

Only lossless mode using 32-bit integer samples is supported currently.

Requires the presence of the libwavpack headers and library during
configuration. You need to explicitly configure the build with
@code{--enable-libwavpack}.

Note that a libavcodec-native encoder for the WavPack codec exists so users can
encode audios with this codec without using this encoder. See @ref{wavpackenc}.

@subsection Options

@command{wavpack} command line utility's corresponding options are listed in
parentheses, if any.

@table @option
@item frame_size (@emph{--blocksize})
Default is 32768.

@item compression_level
Set speed vs. compression tradeoff. Acceptable arguments are listed below:

@table @samp
@item 0 (@emph{-f})
Fast mode.

@item 1
Normal (default) settings.

@item 2 (@emph{-h})
High quality.

@item 3 (@emph{-hh})
Very high quality.

@item 4-8 (@emph{-hh -x}@var{EXTRAPROC})
Same as @samp{3}, but with extra processing enabled.

@samp{4} is the same as @option{-x2} and @samp{8} is the same as @option{-x6}.

@end table
@end table

@anchor{wavpackenc}
@section wavpack

WavPack lossless audio encoder.

This is a libavcodec-native WavPack encoder. There is also an encoder based on
libwavpack, but there is virtually no reason to use that encoder.

See also @ref{libwavpack}.

@subsection Options

The equivalent options for @command{wavpack} command line utility are listed in
parentheses.

@subsubsection Shared options

The following shared options are effective for this encoder. Only special notes
about this particular encoder will be documented here. For the general meaning
of the options, see @ref{codec-options,,the Codec Options chapter}.

@table @option
@item frame_size (@emph{--blocksize})
For this encoder, the range for this option is between 128 and 131072. Default
is automatically decided based on sample rate and number of channel.

For the complete formula of calculating default, see
@file{libavcodec/wavpackenc.c}.

@item compression_level (@emph{-f}, @emph{-h}, @emph{-hh}, and @emph{-x})
This option's syntax is consistent with @ref{libwavpack}'s.
@end table

@subsubsection Private options

@table @option
@item joint_stereo (@emph{-j})
Set whether to enable joint stereo. Valid values are:

@table @samp
@item on (@emph{1})
Force mid/side audio encoding.
@item off (@emph{0})
Force left/right audio encoding.
@item auto
Let the encoder decide automatically.
@end table

@item optimize_mono
Set whether to enable optimization for mono. This option is only effective for
non-mono streams. Available values:

@table @samp
@item on
enabled
@item off
disabled
@end table

@end table

@c man end AUDIO ENCODERS

@chapter Video Encoders
@c man begin VIDEO ENCODERS

A description of some of the currently available video encoders
follows.

@section libtheora

libtheora Theora encoder wrapper.

Requires the presence of the libtheora headers and library during
configuration. You need to explicitly configure the build with
@code{--enable-libtheora}.

For more information about the libtheora project see
@url{http://www.theora.org/}.

@subsection Options

The following global options are mapped to internal libtheora options
which affect the quality and the bitrate of the encoded stream.

@table @option
@item b
Set the video bitrate in bit/s for CBR (Constant Bit Rate) mode.  In
case VBR (Variable Bit Rate) mode is enabled this option is ignored.

@item flags
Used to enable constant quality mode (VBR) encoding through the
@option{qscale} flag, and to enable the @code{pass1} and @code{pass2}
modes.

@item g
Set the GOP size.

@item global_quality
Set the global quality as an integer in lambda units.

Only relevant when VBR mode is enabled with @code{flags +qscale}. The
value is converted to QP units by dividing it by @code{FF_QP2LAMBDA},
clipped in the [0 - 10] range, and then multiplied by 6.3 to get a
value in the native libtheora range [0-63]. A higher value corresponds
to a higher quality.

@item q
Enable VBR mode when set to a non-negative value, and set constant
quality value as a double floating point value in QP units.

The value is clipped in the [0-10] range, and then multiplied by 6.3
to get a value in the native libtheora range [0-63].

This option is valid only using the @command{ffmpeg} command-line
tool. For library interface users, use @option{global_quality}.
@end table

@subsection Examples

@itemize
@item
Set maximum constant quality (VBR) encoding with @command{ffmpeg}:
@example
ffmpeg -i INPUT -codec:v libtheora -q:v 10 OUTPUT.ogg
@end example

@item
Use @command{ffmpeg} to convert a CBR 1000 kbps Theora video stream:
@example
ffmpeg -i INPUT -codec:v libtheora -b:v 1000k OUTPUT.ogg
@end example
@end itemize

@section libvpx

VP8/VP9 format supported through libvpx.

Requires the presence of the libvpx headers and library during configuration.
You need to explicitly configure the build with @code{--enable-libvpx}.

@subsection Options

Mapping from FFmpeg to libvpx options with conversion notes in parentheses.

@table @option

@item threads
g_threads

@item profile
g_profile

@item vb
rc_target_bitrate

@item g
kf_max_dist

@item keyint_min
kf_min_dist

@item qmin
rc_min_quantizer

@item qmax
rc_max_quantizer

@item bufsize, vb
rc_buf_sz
@code{(bufsize * 1000 / vb)}

rc_buf_optimal_sz
@code{(bufsize * 1000 / vb * 5 / 6)}

@item rc_init_occupancy, vb
rc_buf_initial_sz
@code{(rc_init_occupancy * 1000 / vb)}

@item rc_buffer_aggressivity
rc_undershoot_pct

@item skip_threshold
rc_dropframe_thresh

@item qcomp
rc_2pass_vbr_bias_pct

@item maxrate, vb
rc_2pass_vbr_maxsection_pct
@code{(maxrate * 100 / vb)}

@item minrate, vb
rc_2pass_vbr_minsection_pct
@code{(minrate * 100 / vb)}

@item minrate, maxrate, vb
@code{VPX_CBR}
@code{(minrate == maxrate == vb)}

@item crf
@code{VPX_CQ}, @code{VP8E_SET_CQ_LEVEL}

@item quality
@table @option
@item @var{best}
@code{VPX_DL_BEST_QUALITY}
@item @var{good}
@code{VPX_DL_GOOD_QUALITY}
@item @var{realtime}
@code{VPX_DL_REALTIME}
@end table

@item speed
@code{VP8E_SET_CPUUSED}

@item nr
@code{VP8E_SET_NOISE_SENSITIVITY}

@item mb_threshold
@code{VP8E_SET_STATIC_THRESHOLD}

@item slices
@code{VP8E_SET_TOKEN_PARTITIONS}

@item max-intra-rate
@code{VP8E_SET_MAX_INTRA_BITRATE_PCT}

@item force_key_frames
@code{VPX_EFLAG_FORCE_KF}

@item Alternate reference frame related
@table @option
@item vp8flags altref
@code{VP8E_SET_ENABLEAUTOALTREF}
@item @var{arnr_max_frames}
@code{VP8E_SET_ARNR_MAXFRAMES}
@item @var{arnr_type}
@code{VP8E_SET_ARNR_TYPE}
@item @var{arnr_strength}
@code{VP8E_SET_ARNR_STRENGTH}
@item @var{rc_lookahead}
g_lag_in_frames
@end table

@item vp8flags error_resilient
g_error_resilient

@item aq_mode
@code{VP9E_SET_AQ_MODE}

@end table

For more information about libvpx see:
@url{http://www.webmproject.org/}


@section libwebp

libwebp WebP Image encoder wrapper

libwebp is Google's official encoder for WebP images. It can encode in either
lossy or lossless mode. Lossy images are essentially a wrapper around a VP8
frame. Lossless images are a separate codec developed by Google.

@subsection Pixel Format

Currently, libwebp only supports YUV420 for lossy and RGB for lossless due
to limitations of the format and libwebp. Alpha is supported for either mode.
Because of API limitations, if RGB is passed in when encoding lossy or YUV is
passed in for encoding lossless, the pixel format will automatically be
converted using functions from libwebp. This is not ideal and is done only for
convenience.

@subsection Options

@table @option

@item -lossless @var{boolean}
Enables/Disables use of lossless mode. Default is 0.

@item -compression_level @var{integer}
For lossy, this is a quality/speed tradeoff. Higher values give better quality
for a given size at the cost of increased encoding time. For lossless, this is
a size/speed tradeoff. Higher values give smaller size at the cost of increased
encoding time. More specifically, it controls the number of extra algorithms
and compression tools used, and varies the combination of these tools. This
maps to the @var{method} option in libwebp. The valid range is 0 to 6.
Default is 4.

@item -qscale @var{float}
For lossy encoding, this controls image quality, 0 to 100. For lossless
encoding, this controls the effort and time spent at compressing more. The
default value is 75. Note that for usage via libavcodec, this option is called
@var{global_quality} and must be multiplied by @var{FF_QP2LAMBDA}.

@item -preset @var{type}
Configuration preset. This does some automatic settings based on the general
type of the image.
@table @option
@item none
Do not use a preset.
@item default
Use the encoder default.
@item picture
Digital picture, like portrait, inner shot
@item photo
Outdoor photograph, with natural lighting
@item drawing
Hand or line drawing, with high-contrast details
@item icon
Small-sized colorful images
@item text
Text-like
@end table

@end table

@section libx264, libx264rgb

x264 H.264/MPEG-4 AVC encoder wrapper.

This encoder requires the presence of the libx264 headers and library
during configuration. You need to explicitly configure the build with
@code{--enable-libx264}.

libx264 supports an impressive number of features, including 8x8 and
4x4 adaptive spatial transform, adaptive B-frame placement, CAVLC/CABAC
entropy coding, interlacing (MBAFF), lossless mode, psy optimizations
for detail retention (adaptive quantization, psy-RD, psy-trellis).

Many libx264 encoder options are mapped to FFmpeg global codec
options, while unique encoder options are provided through private
options. Additionally the @option{x264opts} and @option{x264-params}
private options allows one to pass a list of key=value tuples as accepted
by the libx264 @code{x264_param_parse} function.

The x264 project website is at
@url{http://www.videolan.org/developers/x264.html}.

The libx264rgb encoder is the same as libx264, except it accepts packed RGB
pixel formats as input instead of YUV.

@subsection Supported Pixel Formats

x264 supports 8- to 10-bit color spaces. The exact bit depth is controlled at
x264's configure time. FFmpeg only supports one bit depth in one particular
build. In other words, it is not possible to build one FFmpeg with multiple
versions of x264 with different bit depths.

@subsection Options

The following options are supported by the libx264 wrapper. The
@command{x264}-equivalent options or values are listed in parentheses
for easy migration.

To reduce the duplication of documentation, only the private options
and some others requiring special attention are documented here. For
the documentation of the undocumented generic options, see
@ref{codec-options,,the Codec Options chapter}.

To get a more accurate and extensive documentation of the libx264
options, invoke the command @command{x264 --full-help} or consult
the libx264 documentation.

@table @option
@item b (@emph{bitrate})
Set bitrate in bits/s. Note that FFmpeg's @option{b} option is
expressed in bits/s, while @command{x264}'s @option{bitrate} is in
kilobits/s.

@item bf (@emph{bframes})

@item g (@emph{keyint})

@item qmin (@emph{qpmin})
Minimum quantizer scale.

@item qmax (@emph{qpmax})
Maximum quantizer scale.

@item qdiff (@emph{qpstep})
Maximum difference between quantizer scales.

@item qblur (@emph{qblur})
Quantizer curve blur

@item qcomp (@emph{qcomp})
Quantizer curve compression factor

@item refs (@emph{ref})
Number of reference frames each P-frame can use. The range is from @var{0-16}.

@item sc_threshold (@emph{scenecut})
Sets the threshold for the scene change detection.

@item trellis (@emph{trellis})
Performs Trellis quantization to increase efficiency. Enabled by default.

@item nr  (@emph{nr})

@item me_range (@emph{merange})
Maximum range of the motion search in pixels.

@item me_method (@emph{me})
Set motion estimation method. Possible values in the decreasing order
of speed:

@table @samp
@item dia (@emph{dia})
@item epzs (@emph{dia})
Diamond search with radius 1 (fastest). @samp{epzs} is an alias for
@samp{dia}.
@item hex (@emph{hex})
Hexagonal search with radius 2.
@item umh (@emph{umh})
Uneven multi-hexagon search.
@item esa (@emph{esa})
Exhaustive search.
@item tesa (@emph{tesa})
Hadamard exhaustive search (slowest).
@end table

@item subq (@emph{subme})
Sub-pixel motion estimation method.

@item b_strategy (@emph{b-adapt})
Adaptive B-frame placement decision algorithm. Use only on first-pass.

@item keyint_min (@emph{min-keyint})
Minimum GOP size.

@item coder
Set entropy encoder. Possible values:

@table @samp
@item ac
Enable CABAC.

@item vlc
Enable CAVLC and disable CABAC. It generates the same effect as
@command{x264}'s @option{--no-cabac} option.
@end table

@item cmp
Set full pixel motion estimation comparation algorithm. Possible values:

@table @samp
@item chroma
Enable chroma in motion estimation.

@item sad
Ignore chroma in motion estimation. It generates the same effect as
@command{x264}'s @option{--no-chroma-me} option.
@end table

@item threads (@emph{threads})
Number of encoding threads.

@item thread_type
Set multithreading technique. Possible values:

@table @samp
@item slice
Slice-based multithreading. It generates the same effect as
@command{x264}'s @option{--sliced-threads} option.
@item frame
Frame-based multithreading.
@end table

@item flags
Set encoding flags. It can be used to disable closed GOP and enable
open GOP by setting it to @code{-cgop}. The result is similar to
the behavior of @command{x264}'s @option{--open-gop} option.

@item rc_init_occupancy (@emph{vbv-init})

@item preset (@emph{preset})
Set the encoding preset.

@item tune (@emph{tune})
Set tuning of the encoding params.

@item profile (@emph{profile})
Set profile restrictions.

@item fastfirstpass
Enable fast settings when encoding first pass, when set to 1. When set
to 0, it has the same effect of @command{x264}'s
@option{--slow-firstpass} option.

@item crf (@emph{crf})
Set the quality for constant quality mode.

@item crf_max (@emph{crf-max})
In CRF mode, prevents VBV from lowering quality beyond this point.

@item qp (@emph{qp})
Set constant quantization rate control method parameter.

@item aq-mode (@emph{aq-mode})
Set AQ method. Possible values:

@table @samp
@item none (@emph{0})
Disabled.

@item variance (@emph{1})
Variance AQ (complexity mask).

@item autovariance (@emph{2})
Auto-variance AQ (experimental).
@end table

@item aq-strength (@emph{aq-strength})
Set AQ strength, reduce blocking and blurring in flat and textured areas.

@item psy
Use psychovisual optimizations when set to 1. When set to 0, it has the
same effect as @command{x264}'s @option{--no-psy} option.

@item psy-rd  (@emph{psy-rd})
Set strength of psychovisual optimization, in
@var{psy-rd}:@var{psy-trellis} format.

@item rc-lookahead (@emph{rc-lookahead})
Set number of frames to look ahead for frametype and ratecontrol.

@item weightb
Enable weighted prediction for B-frames when set to 1. When set to 0,
it has the same effect as @command{x264}'s @option{--no-weightb} option.

@item weightp (@emph{weightp})
Set weighted prediction method for P-frames. Possible values:

@table @samp
@item none (@emph{0})
Disabled
@item simple (@emph{1})
Enable only weighted refs
@item smart (@emph{2})
Enable both weighted refs and duplicates
@end table

@item ssim (@emph{ssim})
Enable calculation and printing SSIM stats after the encoding.

@item intra-refresh (@emph{intra-refresh})
Enable the use of Periodic Intra Refresh instead of IDR frames when set
to 1.

@item avcintra-class (@emph{class})
Configure the encoder to generate AVC-Intra.
Valid values are 50,100 and 200

@item bluray-compat (@emph{bluray-compat})
Configure the encoder to be compatible with the bluray standard.
It is a shorthand for setting "bluray-compat=1 force-cfr=1".

@item b-bias (@emph{b-bias})
Set the influence on how often B-frames are used.

@item b-pyramid (@emph{b-pyramid})
Set method for keeping of some B-frames as references. Possible values:

@table @samp
@item none (@emph{none})
Disabled.
@item strict (@emph{strict})
Strictly hierarchical pyramid.
@item normal (@emph{normal})
Non-strict (not Blu-ray compatible).
@end table

@item mixed-refs
Enable the use of one reference per partition, as opposed to one
reference per macroblock when set to 1. When set to 0, it has the
same effect as @command{x264}'s @option{--no-mixed-refs} option.

@item 8x8dct
Enable adaptive spatial transform (high profile 8x8 transform)
when set to 1. When set to 0, it has the same effect as
@command{x264}'s @option{--no-8x8dct} option.

@item fast-pskip
Enable early SKIP detection on P-frames when set to 1. When set
to 0, it has the same effect as @command{x264}'s
@option{--no-fast-pskip} option.

@item aud (@emph{aud})
Enable use of access unit delimiters when set to 1.

@item mbtree
Enable use macroblock tree ratecontrol when set to 1. When set
to 0, it has the same effect as @command{x264}'s
@option{--no-mbtree} option.

@item deblock (@emph{deblock})
Set loop filter parameters, in @var{alpha}:@var{beta} form.

@item cplxblur (@emph{cplxblur})
Set fluctuations reduction in QP (before curve compression).

@item partitions (@emph{partitions})
Set partitions to consider as a comma-separated list of. Possible
values in the list:

@table @samp
@item p8x8
8x8 P-frame partition.
@item p4x4
4x4 P-frame partition.
@item b8x8
4x4 B-frame partition.
@item i8x8
8x8 I-frame partition.
@item i4x4
4x4 I-frame partition.
(Enabling @samp{p4x4} requires @samp{p8x8} to be enabled. Enabling
@samp{i8x8} requires adaptive spatial transform (@option{8x8dct}
option) to be enabled.)
@item none (@emph{none})
Do not consider any partitions.
@item all (@emph{all})
Consider every partition.
@end table

@item direct-pred (@emph{direct})
Set direct MV prediction mode. Possible values:

@table @samp
@item none (@emph{none})
Disable MV prediction.
@item spatial (@emph{spatial})
Enable spatial predicting.
@item temporal (@emph{temporal})
Enable temporal predicting.
@item auto (@emph{auto})
Automatically decided.
@end table

@item slice-max-size (@emph{slice-max-size})
Set the limit of the size of each slice in bytes. If not specified
but RTP payload size (@option{ps}) is specified, that is used.

@item stats (@emph{stats})
Set the file name for multi-pass stats.

@item nal-hrd (@emph{nal-hrd})
Set signal HRD information (requires @option{vbv-bufsize} to be set).
Possible values:

@table @samp
@item none (@emph{none})
Disable HRD information signaling.
@item vbr (@emph{vbr})
Variable bit rate.
@item cbr (@emph{cbr})
Constant bit rate (not allowed in MP4 container).
@end table

@item x264opts (N.A.)
Set any x264 option, see @command{x264 --fullhelp} for a list.

Argument is a list of @var{key}=@var{value} couples separated by
":". In @var{filter} and @var{psy-rd} options that use ":" as a separator
themselves, use "," instead. They accept it as well since long ago but this
is kept undocumented for some reason.

For example to specify libx264 encoding options with @command{ffmpeg}:
@example
ffmpeg -i foo.mpg -vcodec libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv
@end example

@item x264-params (N.A.)
Override the x264 configuration using a :-separated list of key=value
parameters.

This option is functionally the same as the @option{x264opts}, but is
duplicated for compatibility with the Libav fork.

For example to specify libx264 encoding options with @command{ffmpeg}:
@example
ffmpeg -i INPUT -c:v libx264 -x264-params level=30:bframes=0:weightp=0:\
cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:\
no-fast-pskip=1:subq=6:8x8dct=0:trellis=0 OUTPUT
@end example
@end table

Encoding ffpresets for common usages are provided so they can be used with the
general presets system (e.g. passing the @option{pre} option).

@section libx265

x265 H.265/HEVC encoder wrapper.

This encoder requires the presence of the libx265 headers and library
during configuration. You need to explicitly configure the build with
@option{--enable-libx265}.

@subsection Options

@table @option
@item preset
Set the x265 preset.

@item tune
Set the x265 tune parameter.

@item x265-params
Set x265 options using a list of @var{key}=@var{value} couples separated
by ":". See @command{x265 --help} for a list of options.

For example to specify libx265 encoding options with @option{-x265-params}:

@example
ffmpeg -i input -c:v libx265 -x265-params crf=26:psy-rd=1 output.mp4
@end example
@end table

@section libxvid

Xvid MPEG-4 Part 2 encoder wrapper.

This encoder requires the presence of the libxvidcore headers and library
during configuration. You need to explicitly configure the build with
@code{--enable-libxvid --enable-gpl}.

The native @code{mpeg4} encoder supports the MPEG-4 Part 2 format, so
users can encode to this format without this library.

@subsection Options

The following options are supported by the libxvid wrapper. Some of
the following options are listed but are not documented, and
correspond to shared codec options. See @ref{codec-options,,the Codec
Options chapter} for their documentation. The other shared options
which are not listed have no effect for the libxvid encoder.

@table @option
@item b

@item g

@item qmin

@item qmax

@item mpeg_quant

@item threads

@item bf

@item b_qfactor

@item b_qoffset

@item flags
Set specific encoding flags. Possible values:

@table @samp

@item mv4
Use four motion vector by macroblock.

@item aic
Enable high quality AC prediction.

@item gray
Only encode grayscale.

@item gmc
Enable the use of global motion compensation (GMC).

@item qpel
Enable quarter-pixel motion compensation.

@item cgop
Enable closed GOP.

@item global_header
Place global headers in extradata instead of every keyframe.

@end table

@item trellis

@item me_method
Set motion estimation method. Possible values in decreasing order of
speed and increasing order of quality:

@table @samp
@item zero
Use no motion estimation (default).

@item phods
@item x1
@item log
Enable advanced diamond zonal search for 16x16 blocks and half-pixel
refinement for 16x16 blocks. @samp{x1} and @samp{log} are aliases for
@samp{phods}.

@item epzs
Enable all of the things described above, plus advanced diamond zonal
search for 8x8 blocks, half-pixel refinement for 8x8 blocks, and motion
estimation on chroma planes.

@item full
Enable all of the things described above, plus extended 16x16 and 8x8
blocks search.
@end table

@item mbd
Set macroblock decision algorithm. Possible values in the increasing
order of quality:

@table @samp
@item simple
Use macroblock comparing function algorithm (default).

@item bits
Enable rate distortion-based half pixel and quarter pixel refinement for
16x16 blocks.

@item rd
Enable all of the things described above, plus rate distortion-based
half pixel and quarter pixel refinement for 8x8 blocks, and rate
distortion-based search using square pattern.
@end table

@item lumi_aq
Enable lumi masking adaptive quantization when set to 1. Default is 0
(disabled).

@item variance_aq
Enable variance adaptive quantization when set to 1. Default is 0
(disabled).

When combined with @option{lumi_aq}, the resulting quality will not
be better than any of the two specified individually. In other
words, the resulting quality will be the worse one of the two
effects.

@item ssim
Set structural similarity (SSIM) displaying method. Possible values:

@table @samp
@item off
Disable displaying of SSIM information.

@item avg
Output average SSIM at the end of encoding to stdout. The format of
showing the average SSIM is:

@example
Average SSIM: %f
@end example

For users who are not familiar with C, %f means a float number, or
a decimal (e.g. 0.939232).

@item frame
Output both per-frame SSIM data during encoding and average SSIM at
the end of encoding to stdout. The format of per-frame information
is:

@example
       SSIM: avg: %1.3f min: %1.3f max: %1.3f
@end example

For users who are not familiar with C, %1.3f means a float number
rounded to 3 digits after the dot (e.g. 0.932).

@end table

@item ssim_acc
Set SSIM accuracy. Valid options are integers within the range of
0-4, while 0 gives the most accurate result and 4 computes the
fastest.

@end table

@section mpeg2

MPEG-2 video encoder.

@subsection Options

@table @option
@item seq_disp_ext @var{integer}
Specifies if the encoder should write a sequence_display_extension to the
output.
@table @option
@item -1
@itemx auto
Decide automatically to write it or not (this is the default) by checking if
the data to be written is different from the default or unspecified values.
@item 0
@itemx never
Never write it.
@item 1
@itemx always
Always write it.
@end table
@end table

@section png

PNG image encoder.

@subsection Private options

@table @option
@item dpi @var{integer}
Set physical density of pixels, in dots per inch, unset by default
@item dpm @var{integer}
Set physical density of pixels, in dots per meter, unset by default
@end table

@section ProRes

Apple ProRes encoder.

FFmpeg contains 2 ProRes encoders, the prores-aw and prores-ks encoder.
The used encoder can be chosen with the @code{-vcodec} option.

@subsection Private Options for prores-ks

@table @option
@item profile @var{integer}
Select the ProRes profile to encode
@table @samp
@item proxy
@item lt
@item standard
@item hq
@item 4444
@end table

@item quant_mat @var{integer}
Select quantization matrix.
@table @samp
@item auto
@item default
@item proxy
@item lt
@item standard
@item hq
@end table
If set to @var{auto}, the matrix matching the profile will be picked.
If not set, the matrix providing the highest quality, @var{default}, will be
picked.

@item bits_per_mb @var{integer}
How many bits to allot for coding one macroblock. Different profiles use
between 200 and 2400 bits per macroblock, the maximum is 8000.

@item mbs_per_slice @var{integer}
Number of macroblocks in each slice (1-8); the default value (8)
should be good in almost all situations.

@item vendor @var{string}
Override the 4-byte vendor ID.
A custom vendor ID like @var{apl0} would claim the stream was produced by
the Apple encoder.

@item alpha_bits @var{integer}
Specify number of bits for alpha component.
Possible values are @var{0}, @var{8} and @var{16}.
Use @var{0} to disable alpha plane coding.

@end table

@subsection Speed considerations

In the default mode of operation the encoder has to honor frame constraints
(i.e. not produce frames with size bigger than requested) while still making
output picture as good as possible.
A frame containing a lot of small details is harder to compress and the encoder
would spend more time searching for appropriate quantizers for each slice.

Setting a higher @option{bits_per_mb} limit will improve the speed.

For the fastest encoding speed set the @option{qscale} parameter (4 is the
recommended value) and do not set a size constraint.

@c man end VIDEO ENCODERS

@chapter Subtitles Encoders
@c man begin SUBTITLES ENCODERS

@section dvdsub

This codec encodes the bitmap subtitle format that is used in DVDs.
Typically they are stored in VOBSUB file pairs (*.idx + *.sub),
and they can also be used in Matroska files.

@subsection Options

@table @option
@item even_rows_fix
When set to 1, enable a work-around that makes the number of pixel rows
even in all subtitles.  This fixes a problem with some players that
cut off the bottom row if the number is odd.  The work-around just adds
a fully transparent row if needed.  The overhead is low, typically
one byte per subtitle on average.

By default, this work-around is disabled.
@end table

@c man end SUBTITLES ENCODERS
