diff options
Diffstat (limited to 'doc/encoders.texi')
-rw-r--r-- | doc/encoders.texi | 2256 |
1 files changed, 2031 insertions, 225 deletions
diff --git a/doc/encoders.texi b/doc/encoders.texi index 41b8398127..431777c457 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -1,10 +1,10 @@ @chapter Encoders @c man begin ENCODERS -Encoders are configured elements in Libav which allow the encoding of +Encoders are configured elements in FFmpeg which allow the encoding of multimedia streams. -When you configure your Libav build, all the supported native encoders +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}. @@ -14,7 +14,7 @@ You can disable all the encoders with the configure option with the options @code{--enable-encoder=@var{ENCODER}} / @code{--disable-encoder=@var{ENCODER}}. -The option @code{-encoders} of the av* tools will display the list of +The option @code{-encoders} of the ff* tools will display the list of enabled encoders. @c man end ENCODERS @@ -25,6 +25,127 @@ enabled encoders. A description of some of the currently available audio encoders follows. +@anchor{aacenc} +@section aac + +Advanced Audio Coding (AAC) encoder. + +This encoder is the default AAC encoder, natively implemented into FFmpeg. Its +quality is on par or better than libfdk_aac at the default bitrate of 128kbps. +This encoder also implements more options, profiles and samplerates than +other encoders (with only the AAC-HE profile pending to be implemented) so this +encoder has become the default and is the recommended choice. + +@subsection Options + +@table @option +@item b +Set bit rate in bits/s. Setting this automatically activates constant bit rate +(CBR) mode. If this option is unspecified it is set to 128kbps. + +@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 cutoff +Set cutoff frequency. If unspecified will allow the encoder to dynamically +adjust the cutoff to improve clarity on low bitrates. + +@item aac_coder +Set AAC encoder coding method. Possible values: + +@table @samp +@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. Will tune +itself based on whether @option{aac_is}, @option{aac_ms} and @option{aac_pns} +are enabled. +This is the default choice for a coder. + +@item anmr +Average noise to mask ratio (ANMR) trellis-based solution. + +This is an experimental coder which currently produces a lower quality, is more +unstable and is slower than the default twoloop coder but has potential. +Currently has no support for the @option{aac_is} or @option{aac_pns} options. +Not currently recommended. + +@item fast +Constant quantizer method. + +This method sets a constant quantizer for all bands. This is the fastest of all +the methods and has no rate control or support for @option{aac_is} or +@option{aac_pns}. +Not recommended. + +@end table + +@item aac_ms +Sets mid/side coding mode. The default value of "auto" will automatically use +M/S with bands which will benefit from such coding. Can be forced for all bands +using the value "enable", which is mainly useful for debugging or disabled using +"disable". + +@item aac_is +Sets intensity stereo coding tool usage. By default, it's enabled and will +automatically toggle IS for similar pairs of stereo bands if it's beneficial. +Can be disabled for debugging by setting the value to "disable". + +@item aac_pns +Uses perceptual noise substitution to replace low entropy high frequency bands +with imperceptible white noise during the decoding process. By default, it's +enabled, but can be disabled for debugging purposes by using "disable". + +@item aac_tns +Enables the use of a multitap FIR filter which spans through the high frequency +bands to hide quantization noise during the encoding process and is reverted +by the decoder. As well as decreasing unpleasant artifacts in the high range +this also reduces the entropy in the high bands and allows for more bits to +be used by the mid-low bands. By default it's enabled but can be disabled for +debugging by setting the option to "disable". + +@item aac_ltp +Enables the use of the long term prediction extension which increases coding +efficiency in very low bandwidth situations such as encoding of voice or +solo piano music by extending constant harmonic peaks in bands throughout +frames. This option is implied by profile:a aac_low and is incompatible with +aac_pred. Use in conjunction with @option{-ar} to decrease the samplerate. + +@item aac_pred +Enables the use of a more traditional style of prediction where the spectral +coefficients transmitted are replaced by the difference of the current +coefficients minus the previous "predicted" coefficients. In theory and sometimes +in practice this can improve quality for low to mid bitrate audio. +This option implies the aac_main profile and is incompatible with aac_ltp. + +@item profile +Sets the encoding profile, possible values: + +@table @samp +@item aac_low +The default, AAC "Low-complexity" profile. Is the most compatible and produces +decent quality. + +@item mpeg2_aac_low +Equivalent to @code{-profile:a aac_low -aac_pns 0}. PNS was introduced with the +MPEG4 specifications. + +@item aac_ltp +Long term prediction profile, is enabled by and will enable the @option{aac_ltp} +option. Introduced in MPEG4. + +@item aac_main +Main-type prediction profile, is enabled by and will enable the @option{aac_pred} +option. Introduced in MPEG2. + +@end table +If this option is unspecified it is set to @samp{aac_low}. +@end table + @section ac3 and ac3_fixed AC-3 audio encoders. @@ -38,7 +159,7 @@ 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{-c:a ac3_fixed} in order to use it. +using the option @code{-acodec ac3_fixed} in order to use it. @subsection AC-3 Metadata @@ -367,9 +488,13 @@ 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. +@item cutoff @var{frequency} +Set lowpass cutoff frequency. If unspecified, the encoder selects a default +determined by various other encoding parameters. + @end table -@subheading Floating-Point-Only AC-3 Encoding Options +@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 @@ -412,32 +537,770 @@ Selected by Encoder (default) @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. Valid values are from 0 to 12, 5 is the +default. + +@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 +Channels 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{opusenc} +@section opus + +Opus encoder. + +This is a native FFmpeg encoder for the Opus format. Currently its in development and +only implements the CELT part of the codec. Its quality is usually worse and at best +is equal to the libopus encoder. + +@subsection Options + +@table @option +@item b +Set bit rate in bits/s. If unspecified it uses the number of channels and the layout +to make a good guess. + +@item opus_delay +Sets the maximum delay in milliseconds. Lower delays than 20ms will very quickly +decrease quality. +@end table + +@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 produce output on par or worse at 128kbps to the +@ref{aacenc,,the native FFmpeg AAC encoder} but can often produce better +sounding audio at identical or lower bitrates and has support for the +AAC-HE profiles. + +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 cutoff (@emph{--lowpass}) +Set lowpass cutoff frequency. If unspecified, the encoder dynamically +adjusts the cutoff. + +@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 + +@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 @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). + +@item mapping_family (@emph{mapping_family}) +Set channel mapping family to be used by the encoder. The default value of -1 +uses mapping family 0 for mono and stereo inputs, and mapping family 1 +otherwise. The default also disables the surround masking and LFE bandwidth +optimzations in libopus, and requires that the input contains 8 channels or +fewer. + +Other values include 0 for mono and stereo, 1 for surround sound with masking +and LFE bandwidth optimizations, and 255 for independent streams with an +unspecified channel layout. + +@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 + +@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 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. -The @option{compression_level} option can be used to control speed vs. -compression tradeoff, with the values mapped to libwavpack as follows: + +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 0 -Fast mode - corresponding to the wavpack @option{-f} option. +@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 -High quality - corresponding to the wavpack @option{-h} option. +@item 2 (@emph{-h}) +High quality. -@item 3 -Very high quality - corresponding to the wavpack @option{-hh} option. +@item 3 (@emph{-hh}) +Very high quality. -@item 4-8 -Same as 3, but with extra processing enabled - corresponding to the wavpack -@option{-x} option. I.e. 4 is the same as @option{-x2} and 8 is the same as -@option{-x6}. +@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{mjpegenc} +@section mjpeg + +Motion JPEG encoder. + +@subsection Options + +@table @option +@item huffman +Set the huffman encoding strategy. Possible values: + +@table @samp +@item default +Use the default huffman tables. This is the default strategy. + +@item optimal +Compute and use optimal huffman tables. + +@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 @@ -446,6 +1309,385 @@ Same as 3, but with extra processing enabled - corresponding to the wavpack @chapter Video Encoders @c man begin VIDEO ENCODERS +A description of some of the currently available video encoders +follows. + +@section Hap + +Vidvox Hap video encoder. + +@subsection Options + +@table @option +@item format @var{integer} +Specifies the Hap format to encode. + +@table @option +@item hap +@item hap_alpha +@item hap_q +@end table + +Default value is @option{hap}. + +@item chunks @var{integer} +Specifies the number of chunks to split frames into, between 1 and 64. This +permits multithreaded decoding of large frames, potentially at the cost of +data-rate. The encoder may modify this value to divide frames evenly. + +Default value is @var{1}. + +@item compressor @var{integer} +Specifies the second-stage compressor to use. If set to @option{none}, +@option{chunks} will be limited to 1, as chunked uncompressed frames offer no +benefit. + +@table @option +@item none +@item snappy +@end table + +Default value is @option{snappy}. + +@end table + +@section jpeg2000 + +The native jpeg 2000 encoder is lossy by default, the @code{-q:v} +option can be used to set the encoding quality. Lossless encoding +can be selected with @code{-pred 1}. + +@subsection Options + +@table @option +@item format +Can be set to either @code{j2k} or @code{jp2} (the default) that +makes it possible to store non-rgb pix_fmts. + +@end table + +@section libkvazaar + +Kvazaar H.265/HEVC encoder. + +Requires the presence of the libkvazaar headers and library during +configuration. You need to explicitly configure the build with +@option{--enable-libkvazaar}. + +@subsection Options + +@table @option + +@item b +Set target video bitrate in bit/s and enable rate control. + +@item kvazaar-params +Set kvazaar parameters as a list of @var{name}=@var{value} pairs separated +by commas (,). See kvazaar documentation for a list of options. + +@end table + +@section libopenh264 + +Cisco libopenh264 H.264/MPEG-4 AVC encoder wrapper. + +This encoder requires the presence of the libopenh264 headers and +library during configuration. You need to explicitly configure the +build with @code{--enable-libopenh264}. The library is detected using +@command{pkg-config}. + +For more information about the library see +@url{http://www.openh264.org}. + +@subsection Options + +The following FFmpeg global options affect the configurations of the +libopenh264 encoder. + +@table @option +@item b +Set the bitrate (as a number of bits per second). + +@item g +Set the GOP size. + +@item maxrate +Set the max bitrate (as a number of bits per second). + +@item flags +global_header +Set global header in the bitstream. + +@item slices +Set the number of slices, used in parallelized encoding. Default value +is 0. This is only used when @option{slice_mode} is set to +@samp{fixed}. + +@item slice_mode +Set slice mode. Can assume one of the following possible values: + +@table @samp +@item fixed +a fixed number of slices +@item rowmb +one slice per row of macroblocks +@item auto +automatic number of slices according to number of threads +@item dyn +dynamic slicing +@end table + +Default value is @samp{auto}. + +@item loopfilter +Enable loop filter, if set to 1 (automatically enabled). To disable +set a value of 0. + +@item profile +Set profile restrictions. If set to the value of @samp{main} enable +CABAC (set the @code{SEncParamExt.iEntropyCodingModeFlag} flag to 1). + +@item max_nal_size +Set maximum NAL size in bytes. + +@item allow_skip_frames +Allow skipping frames to hit the target bitrate if set to 1. +@end table + +@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 + +The following options are supported by the libvpx wrapper. The +@command{vpxenc}-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 more documentation of the libvpx options, invoke the command +@command{ffmpeg -h encoder=libvpx}, @command{ffmpeg -h encoder=libvpx-vp9} or +@command{vpxenc --help}. Further information is available in the libvpx API +documentation. + +@table @option + +@item b (@emph{target-bitrate}) +Set bitrate in bits/s. Note that FFmpeg's @option{b} option is +expressed in bits/s, while @command{vpxenc}'s @option{target-bitrate} is in +kilobits/s. + +@item g (@emph{kf-max-dist}) + +@item keyint_min (@emph{kf-min-dist}) + +@item qmin (@emph{min-q}) + +@item qmax (@emph{max-q}) + +@item bufsize (@emph{buf-sz}, @emph{buf-optimal-sz}) +Set ratecontrol buffer size (in bits). Note @command{vpxenc}'s options are +specified in milliseconds, the libvpx wrapper converts this value as follows: +@code{buf-sz = bufsize * 1000 / bitrate}, +@code{buf-optimal-sz = bufsize * 1000 / bitrate * 5 / 6}. + +@item rc_init_occupancy (@emph{buf-initial-sz}) +Set number of bits which should be loaded into the rc buffer before decoding +starts. Note @command{vpxenc}'s option is specified in milliseconds, the libvpx +wrapper converts this value as follows: +@code{rc_init_occupancy * 1000 / bitrate}. + +@item undershoot-pct +Set datarate undershoot (min) percentage of the target bitrate. + +@item overshoot-pct +Set datarate overshoot (max) percentage of the target bitrate. + +@item skip_threshold (@emph{drop-frame}) + +@item qcomp (@emph{bias-pct}) + +@item maxrate (@emph{maxsection-pct}) +Set GOP max bitrate in bits/s. Note @command{vpxenc}'s option is specified as a +percentage of the target bitrate, the libvpx wrapper converts this value as +follows: @code{(maxrate * 100 / bitrate)}. + +@item minrate (@emph{minsection-pct}) +Set GOP min bitrate in bits/s. Note @command{vpxenc}'s option is specified as a +percentage of the target bitrate, the libvpx wrapper converts this value as +follows: @code{(minrate * 100 / bitrate)}. + +@item minrate, maxrate, b @emph{end-usage=cbr} +@code{(minrate == maxrate == bitrate)}. + +@item crf (@emph{end-usage=cq}, @emph{cq-level}) + +@item tune (@emph{tune}) +@table @samp +@item psnr (@emph{psnr}) +@item ssim (@emph{ssim}) +@end table + +@item quality, deadline (@emph{deadline}) +@table @samp +@item best +Use best quality deadline. Poorly named and quite slow, this option should be +avoided as it may give worse quality output than good. +@item good +Use good quality deadline. This is a good trade-off between speed and quality +when used with the @option{cpu-used} option. +@item realtime +Use realtime quality deadline. +@end table + +@item speed, cpu-used (@emph{cpu-used}) +Set quality/speed ratio modifier. Higher values speed up the encode at the cost +of quality. + +@item nr (@emph{noise-sensitivity}) + +@item static-thresh +Set a change threshold on blocks below which they will be skipped by the +encoder. + +@item slices (@emph{token-parts}) +Note that FFmpeg's @option{slices} option gives the total number of partitions, +while @command{vpxenc}'s @option{token-parts} is given as +@code{log2(partitions)}. + +@item max-intra-rate +Set maximum I-frame bitrate as a percentage of the target bitrate. A value of 0 +means unlimited. + +@item force_key_frames +@code{VPX_EFLAG_FORCE_KF} + +@item Alternate reference frame related +@table @option +@item auto-alt-ref +Enable use of alternate reference frames (2-pass only). +@item arnr-max-frames +Set altref noise reduction max frame count. +@item arnr-type +Set altref noise reduction filter type: backward, forward, centered. +@item arnr-strength +Set altref noise reduction filter strength. +@item rc-lookahead, lag-in-frames (@emph{lag-in-frames}) +Set number of frames to look ahead for frametype and ratecontrol. +@end table + +@item error-resilient +Enable error resiliency features. + +@item VP9-specific options +@table @option +@item lossless +Enable lossless mode. +@item tile-columns +Set number of tile columns to use. Note this is given as +@code{log2(tile_columns)}. For example, 8 tile columns would be requested by +setting the @option{tile-columns} option to 3. +@item tile-rows +Set number of tile rows to use. Note this is given as @code{log2(tile_rows)}. +For example, 4 tile rows would be requested by setting the @option{tile-rows} +option to 2. +@item frame-parallel +Enable frame parallel decodability features. +@item aq-mode +Set adaptive quantization mode (0: off (default), 1: variance 2: complexity, 3: +cyclic refresh, 4: equator360). +@item colorspace @emph{color-space} +Set input color space. The VP9 bitstream supports signaling the following +colorspaces: +@table @option +@item @samp{rgb} @emph{sRGB} +@item @samp{bt709} @emph{bt709} +@item @samp{unspecified} @emph{unknown} +@item @samp{bt470bg} @emph{bt601} +@item @samp{smpte170m} @emph{smpte170} +@item @samp{smpte240m} @emph{smpte240} +@item @samp{bt2020_ncl} @emph{bt2020} +@end table +@item row-mt @var{boolean} +Enable row based multi-threading. +@end table + +@end table + +For more information about libvpx see: +@url{http://www.webmproject.org/} + @section libwebp libwebp WebP Image encoder wrapper @@ -505,6 +1747,533 @@ Small-sized colorful images 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 --fullhelp} 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 forced-idr +Normally, when forcing a I-frame type, the encoder can select any type +of I-frame. This option forces it to choose an IDR-frame. + +@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 comparison 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 -c:v libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv +@end example + +@item a53cc @var{boolean} +Import closed captions (which must be ATSC compatible format) into output. +Only the mpeg2 and h264 decoders provide these. Default is 1 (on). + +@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 forced-idr +Normally, when forcing a I-frame type, the encoder can select any type +of I-frame. This option forces it to choose an IDR-frame. + +@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). @@ -557,203 +2326,51 @@ fastest. @end table -@section libx264 - -x264 H.264/MPEG-4 AVC encoder wrapper - -x264 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). - -The Libav wrapper provides a mapping for most of them using global options -that match those of the encoders and provides private options for the unique -encoder options. Additionally an expert override is provided to directly pass -a list of key=value tuples as accepted by x264_param_parse. - -@subsection Option Mapping - -The following options are supported by the x264 wrapper, the x264-equivalent -options follow the Libav ones. - -@multitable { } { } { } -@item b @tab bitrate -@tab Libav @code{b} option is expressed in bits/s, x264 @code{bitrate} in kilobits/s. -@item bf @tab bframes -@tab Maximum number of B-frames. -@item g @tab keyint -@tab Maximum GOP size. -@item qmin @tab qpmin -@tab Minimum quantizer scale. -@item qmax @tab qpmax -@tab Maximum quantizer scale. -@item qdiff @tab qpstep -@tab Maximum difference between quantizer scales. -@item qblur @tab qblur -@tab Quantizer curve blur -@item qcomp @tab qcomp -@tab Quantizer curve compression factor -@item refs @tab ref -@tab Number of reference frames each P-frame can use. The range is from @var{0-16}. -@item sc_threshold @tab scenecut -@tab Sets the threshold for the scene change detection. -@item trellis @tab trellis -@tab Performs Trellis quantization to increase efficiency. Enabled by default. -@item nr @tab nr -@tab Noise reduction. -@item me_range @tab merange -@tab Maximum range of the motion search in pixels. -@item subq @tab subme -@tab Sub-pixel motion estimation method. -@item b_strategy @tab b-adapt -@tab Adaptive B-frame placement decision algorithm. Use only on first-pass. -@item keyint_min @tab min-keyint -@tab Minimum GOP size. -@item coder @tab cabac -@tab Set coder to @code{ac} to use CABAC. -@item cmp @tab chroma-me -@tab Set to @code{chroma} to use chroma motion estimation. -@item threads @tab threads -@tab Number of encoding threads. -@item thread_type @tab sliced_threads -@tab Set to @code{slice} to use sliced threading instead of frame threading. -@item flags -cgop @tab open-gop -@tab Set @code{-cgop} to use recovery points to close GOPs. -@item rc_init_occupancy @tab vbv-init -@tab Initial buffer occupancy. -@end multitable - -@subsection Private Options -@table @option -@item -preset @var{string} -Set the encoding preset (cf. x264 --fullhelp). -@item -tune @var{string} -Tune the encoding params (cf. x264 --fullhelp). -@item -profile @var{string} -Set profile restrictions (cf. x264 --fullhelp). -@item -fastfirstpass @var{integer} -Use fast settings when encoding first pass. -@item -crf @var{float} -Select the quality for constant quality mode. -@item -crf_max @var{float} -In CRF mode, prevents VBV from lowering quality beyond this point. -@item -qp @var{integer} -Constant quantization parameter rate control method. -@item -aq-mode @var{integer} -AQ method - -Possible values: -@table @samp -@item none - -@item variance -Variance AQ (complexity mask). -@item autovariance -Auto-variance AQ (experimental). -@end table -@item -aq-strength @var{float} -AQ strength, reduces blocking and blurring in flat and textured areas. -@item -psy @var{integer} -Use psychovisual optimizations. -@item -psy-rd @var{string} -Strength of psychovisual optimization, in <psy-rd>:<psy-trellis> format. -@item -rc-lookahead @var{integer} -Number of frames to look ahead for frametype and ratecontrol. -@item -weightb @var{integer} -Weighted prediction for B-frames. -@item -weightp @var{integer} -Weighted prediction analysis method. - -Possible values: -@table @samp -@item none - -@item simple +@section mpeg2 -@item smart +MPEG-2 video encoder. -@end table -@item -ssim @var{integer} -Calculate and print SSIM stats. -@item -intra-refresh @var{integer} -Use Periodic Intra Refresh instead of IDR frames. -@item -bluray-compat @var{integer} -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 @var{integer} -Influences how often B-frames are used. -@item -b-pyramid @var{integer} -Keep some B-frames as references. - -Possible values: -@table @samp -@item none +@subsection Options -@item strict -Strictly hierarchical pyramid. -@item normal -Non-strict (not Blu-ray compatible). +@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 -@item -mixed-refs @var{integer} -One reference per partition, as opposed to one reference per macroblock. -@item -8x8dct @var{integer} -High profile 8x8 transform. -@item -fast-pskip @var{integer} -@item -aud @var{integer} -Use access unit delimiters. -@item -mbtree @var{integer} -Use macroblock tree ratecontrol. -@item -deblock @var{string} -Loop filter parameters, in <alpha:beta> form. -@item -cplxblur @var{float} -Reduce fluctuations in QP (before curve compression). -@item -partitions @var{string} -A comma-separated list of partitions to consider, possible values: p8x8, p4x4, b8x8, i8x8, i4x4, none, all. -@item -direct-pred @var{integer} -Direct MV prediction mode - -Possible values: -@table @samp -@item none - -@item spatial - -@item temporal - -@item auto - @end table -@item -slice-max-size @var{integer} -Limit the size of each slice in bytes. -@item -stats @var{string} -Filename for 2 pass stats. -@item -nal-hrd @var{integer} -Signal HRD information (requires vbv-bufsize; cbr not allowed in .mp4). -Possible values: -@table @samp -@item none +@section png -@item vbr +PNG image encoder. -@item cbr +@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 -@item -x264-params @var{string} -Override the x264 configuration using a :-separated list of key=value parameters. -@example --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 -@end example -@end table - -Encoding avpresets for common usages are provided so they can be used with the -general presets system (e.g. passing the @code{-pre} option). @section ProRes Apple ProRes encoder. -@subsection Private Options +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} @@ -764,6 +2381,7 @@ Select the ProRes profile to encode @item standard @item hq @item 4444 +@item 4444xq @end table @item quant_mat @var{integer} @@ -803,8 +2421,8 @@ Use @var{0} to disable alpha plane coding. @subsection Speed considerations In the default mode of operation the encoder has to honor frame constraints -(i.e. not produce frames with a size larger than requested) while still making -the output picture as good as possible. +(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. @@ -813,27 +2431,6 @@ 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. -@section libkvazaar - -Kvazaar H.265/HEVC encoder. - -Requires the presence of the libkvazaar headers and library during -configuration. You need to explicitly configure the build with -@option{--enable-libkvazaar}. - -@subsection Options - -@table @option - -@item b -Set target video bitrate in bit/s and enable rate control. - -@item kvazaar-params -Set kvazaar parameters as a list of @var{name}=@var{value} pairs separated -by commas (,). See kvazaar documentation for a list of options. - -@end table - @section QSV encoders The family of Intel QuickSync Video encoders (MPEG-2, H.264 and HEVC) @@ -847,11 +2444,11 @@ Specifically this means either @itemize @minus @item @var{CQP} - constant quantizer scale, when the @option{qscale} codec flag is -also set (the @option{-qscale} avconv option). +also set (the @option{-qscale} ffmpeg option). @item @var{LA_ICQ} - intelligent constant quality with lookahead, when the -@option{la_depth} option is also set. +@option{look_ahead} option is also set. @item @var{ICQ} -- intelligent constant quality otherwise. @@ -862,7 +2459,7 @@ Otherwise, a bitrate-based mode is used. For all of those, you should specify at least the desired average bitrate with the @option{b} option. @itemize @minus @item -@var{LA} - VBR with lookahead, when the @option{la_depth} option is specified. +@var{LA} - VBR with lookahead, when the @option{look_ahead} option is specified. @item @var{VCM} - video conferencing mode, when the @option{vcm} option is set. @@ -922,4 +2519,213 @@ encoder use CAVLC instead of CABAC. @end itemize +@section snow + +@subsection Options + +@table @option +@item iterative_dia_size +dia size for the iterative motion estimation +@end table + +@section VAAPI encoders + +Wrappers for hardware encoders accessible via VAAPI. + +These encoders only accept input in VAAPI hardware surfaces. If you have input +in software frames, use the @option{hwupload} filter to upload them to the GPU. + +The following standard libavcodec options are used: +@itemize +@item +@option{g} / @option{gop_size} +@item +@option{bf} / @option{max_b_frames} +@item +@option{profile} +@item +@option{level} +@item +@option{b} / @option{bit_rate} +@item +@option{maxrate} / @option{rc_max_rate} +@item +@option{bufsize} / @option{rc_buffer_size} +@item +@option{rc_init_occupancy} / @option{rc_initial_buffer_occupancy} +@item +@option{compression_level} + +Speed / quality tradeoff: higher values are faster / worse quality. +@item +@option{q} / @option{global_quality} + +Size / quality tradeoff: higher values are smaller / worse quality. +@item +@option{qmin} +(only: @option{qmax} is not supported) +@item +@option{i_qfactor} / @option{i_quant_factor} +@item +@option{i_qoffset} / @option{i_quant_offset} +@item +@option{b_qfactor} / @option{b_quant_factor} +@item +@option{b_qoffset} / @option{b_quant_offset} +@end itemize + +@table @option + +@item h264_vaapi +@option{profile} sets the value of @emph{profile_idc} and the @emph{constraint_set*_flag}s. +@option{level} sets the value of @emph{level_idc}. + +@table @option +@item low_power +Use low-power encoding mode. +@item coder +Set entropy encoder (default is @emph{cabac}). Possible values: + +@table @samp +@item ac +@item cabac +Use CABAC. + +@item vlc +@item cavlc +Use CAVLC. +@end table +@end table + +@item hevc_vaapi +@option{profile} and @option{level} set the values of +@emph{general_profile_idc} and @emph{general_level_idc} respectively. + +@item mjpeg_vaapi +Always encodes using the standard quantisation and huffman tables - +@option{global_quality} scales the standard quantisation table (range 1-100). + +@item mpeg2_vaapi +@option{profile} and @option{level} set the value of @emph{profile_and_level_indication}. + +No rate control is supported. + +@item vp8_vaapi +B-frames are not supported. + +@option{global_quality} sets the @emph{q_idx} used for non-key frames (range 0-127). + +@table @option +@item loop_filter_level +@item loop_filter_sharpness +Manually set the loop filter parameters. +@end table + +@item vp9_vaapi +@option{global_quality} sets the @emph{q_idx} used for P-frames (range 0-255). + +@table @option +@item loop_filter_level +@item loop_filter_sharpness +Manually set the loop filter parameters. +@end table + +B-frames are supported, but the output stream is always in encode order rather than display +order. If B-frames are enabled, it may be necessary to use the @option{vp9_raw_reorder} +bitstream filter to modify the output stream to display frames in the correct order. + +Only normal frames are produced - the @option{vp9_superframe} bitstream filter may be +required to produce a stream usable with all decoders. + +@end table + +@section vc2 + +SMPTE VC-2 (previously BBC Dirac Pro). This codec was primarily aimed at +professional broadcasting but since it supports yuv420, yuv422 and yuv444 at +8 (limited range or full range), 10 or 12 bits, this makes it suitable for +other tasks which require low overhead and low compression (like screen +recording). + +@subsection Options + +@table @option + +@item b +Sets target video bitrate. Usually that's around 1:6 of the uncompressed +video bitrate (e.g. for 1920x1080 50fps yuv422p10 that's around 400Mbps). Higher +values (close to the uncompressed bitrate) turn on lossless compression mode. + +@item field_order +Enables field coding when set (e.g. to tt - top field first) for interlaced +inputs. Should increase compression with interlaced content as it splits the +fields and encodes each separately. + +@item wavelet_depth +Sets the total amount of wavelet transforms to apply, between 1 and 5 (default). +Lower values reduce compression and quality. Less capable decoders may not be +able to handle values of @option{wavelet_depth} over 3. + +@item wavelet_type +Sets the transform type. Currently only @var{5_3} (LeGall) and @var{9_7} +(Deslauriers-Dubuc) +are implemented, with 9_7 being the one with better compression and thus +is the default. + +@item slice_width +@item slice_height +Sets the slice size for each slice. Larger values result in better compression. +For compatibility with other more limited decoders use @option{slice_width} of +32 and @option{slice_height} of 8. + +@item tolerance +Sets the undershoot tolerance of the rate control system in percent. This is +to prevent an expensive search from being run. + +@item qm +Sets the quantization matrix preset to use by default or when @option{wavelet_depth} +is set to 5 +@itemize @minus +@item +@var{default} +Uses the default quantization matrix from the specifications, extended with +values for the fifth level. This provides a good balance between keeping detail +and omitting artifacts. + +@item +@var{flat} +Use a completely zeroed out quantization matrix. This increases PSNR but might +reduce perception. Use in bogus benchmarks. + +@item +@var{color} +Reduces detail but attempts to preserve color at extremely low bitrates. +@end itemize + +@end table + @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 |