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 --enable-lib option. You can list all available encoders using the configure option --list-encoders.

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

The option -codecs of the ff* tools will display the list of enabled encoders.

Audio Encoders
**************

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

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 strict option to experimental or lower.

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

Options
-------

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

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

stereo_mode
     Set stereo encoding mode. Possible values:

     auto
          Automatically selected by the encoder.

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

     ms_force
          Force middle/side encoding.

aac_coder
     Set AAC encoder coding method. Possible values:

     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 descibed below, but somewhat a little better and slower.

     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.

     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.

     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.

Tips and Tricks
---------------

According to some reports (e.g. http://d.hatena.ne.jp/kamedo2/20120729/1343545890), setting the cutoff option to 15000 Hz greatly improves the quality of the output quality. As a result, we encourage you to do the same.

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 AC3 encoder uses floating-point math, while the 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 AC3_FIXED encoder is not the default codec for any of the output formats, so it must be specified explicitly using the option -acodec ac3_fixed in order to use it.

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.

  * A/52:2010 - Digital Audio Compression (AC-3) (E-AC-3) Standard (http://www.atsc.org/cms/standards/a_52-2010.pdf)

  * A/54 - Guide to the Use of the ATSC Digital Television Standard (http://www.atsc.org/cms/standards/a_54a_with_corr_1.pdf)

  * Dolby Metadata Guide (http://www.dolby.com/uploadedFiles/zz-_Shared_Assets/English_PDFs/Professional/18_Metadata.Guide.pdf)

  * Dolby Digital Professional Encoding Guidelines (http://www.dolby.com/uploadedFiles/zz-_Shared_Assets/English_PDFs/Professional/46_DDEncodingGuidelines.pdf)

Metadata Control Options
........................

-per_frame_metadata BOOLEAN
     Allow Per-Frame Metadata. Specifies if the encoder should check for changing metadata for each frame.

     0
          The metadata values set at initialization will be used for every frame in the stream. (default)

     1
          Metadata values can be changed before encoding each frame.

Downmix Levels
..............

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

     0.707
          Apply -3dB gain

     0.595
          Apply -4.5dB gain (default)

     0.500
          Apply -6dB gain

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

     0.707
          Apply -3dB gain

     0.500
          Apply -6dB gain (default)

     0.000
          Silence Surround Channel(s)

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.

-mixing_level 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 room_type option is not the default value, the mixing_level option must not be -1.

-room_type 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 mixing_level option and the room_type option have the default values.

     0
     notindicated
          Not Indicated (default)

     1
     large
          Large Room

     2
     small
          Small Room

Other Metadata Options
......................

-copyright BOOLEAN
     Copyright Indicator. Specifies whether a copyright exists for this audio.

     0
     off
          No Copyright Exists (default)

     1
     on
          Copyright Exists

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

-dsur_mode 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 NOT mean the encoder will actually apply Dolby Surround processing.

     0
     notindicated
          Not Indicated (default)

     1
     off
          Not Dolby Surround Encoded

     2
     on
          Dolby Surround Encoded

-original BOOLEAN
     Original Bit Stream Indicator. Specifies whether this audio is from the original source and not a copy.

     0
     off
          Not Original Source

     1
     on
          Original Source (default)

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 center_mixlev and surround_mixlev options if it supports the Alternate Bit Stream Syntax.

Extended Bitstream Information - Part 1
.......................................

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

     0
     notindicated
          Not Indicated (default)

     1
     ltrt
          Lt/Rt Downmix Preferred

     2
     loro
          Lo/Ro Downmix Preferred

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

     1.414
          Apply +3dB gain

     1.189
          Apply +1.5dB gain

     1.000
          Apply 0dB gain

     0.841
          Apply -1.5dB gain

     0.707
          Apply -3.0dB gain

     0.595
          Apply -4.5dB gain (default)

     0.500
          Apply -6.0dB gain

     0.000
          Silence Center Channel

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

     0.841
          Apply -1.5dB gain

     0.707
          Apply -3.0dB gain

     0.595
          Apply -4.5dB gain

     0.500
          Apply -6.0dB gain (default)

     0.000
          Silence Surround Channel(s)

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

     1.414
          Apply +3dB gain

     1.189
          Apply +1.5dB gain

     1.000
          Apply 0dB gain

     0.841
          Apply -1.5dB gain

     0.707
          Apply -3.0dB gain

     0.595
          Apply -4.5dB gain (default)

     0.500
          Apply -6.0dB gain

     0.000
          Silence Center Channel

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

     0.841
          Apply -1.5dB gain

     0.707
          Apply -3.0dB gain

     0.595
          Apply -4.5dB gain

     0.500
          Apply -6.0dB gain (default)

     0.000
          Silence Surround Channel(s)

Extended Bitstream Information - Part 2
.......................................

-dsurex_mode MODE
     Dolby Surround EX Mode. Indicates whether the stream uses Dolby Surround EX (7.1 matrixed to 5.1). Using this option does NOT mean the encoder will actually apply Dolby Surround EX processing.

     0
     notindicated
          Not Indicated (default)

     1
     on
          Dolby Surround EX Off

     2
     off
          Dolby Surround EX On

-dheadphone_mode 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 NOT mean the encoder will actually apply Dolby Headphone processing.

     0
     notindicated
          Not Indicated (default)

     1
     on
          Dolby Headphone Off

     2
     off
          Dolby Headphone On

-ad_conv_type TYPE
     A/D Converter Type. Indicates whether the audio has passed through HDCD A/D conversion.

     0
     standard
          Standard A/D Converter (default)

     1
     hdcd
          HDCD A/D Converter

Other AC-3 Encoding Options
---------------------------

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

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.

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

     -1
     auto
          Selected by Encoder (default)

     0
     off
          Disable Channel Coupling

     1
     on
          Enable Channel Coupling

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

     -1
     auto
          Selected by Encoder (default)

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 --enable-libmp3lame.

Options
-------

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

b (-b)
     Set bitrate expressed in bits/s for CBR. LAME bitrate is expressed in kilobits/s.

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

compression_level (-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.

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

joint_stereo (-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.

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 --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 strict to unofficial or lower.

Options
-------

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

     4750

     5150

     5900

     6700

     7400

     7950

     10200

     12200

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

libtwolame
==========

TwoLAME MP2 encoder wrapper.

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

Options
-------

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

b (-b)
     Set bitrate expressed in bits/s for CBR. twolame b option is expressed in kilobits/s. Default value is 128k.

q (-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 ffmpeg command-line tool. For library interface users, use global_quality.

mode (--mode)
     Set the mode of the resulting audio. Possible values:

     auto
          Choose mode automatically based on the input. This is the default.

     stereo
          Stereo

     joint_stereo
          Joint stereo

     dual_channel
          Dual channel

     mono
          Mono

psymodel (--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.

energy_levels (--energy)
     Enable energy levels extensions when set to 1. The default value is 0 (disabled).

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

copyright (--copyright)
     Set MPEG audio copyright flag when set to 1. The default value is 0 (disabled).

original (--original)
     Set MPEG audio original flag when set to 1. The default value is 0 (disabled).

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 --enable-libvo-aacenc --enable-version3.

This encoder is considered to be worse than the native experimental FFmpeg AAC encoder, according to multiple sources.

Options
-------

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

b
     Set bit rate in bits/s.

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 --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 strict to unofficial or lower.

Options
-------

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

     6600

     8850

     12650

     14250

     15850

     18250

     19850

     23050

     23850

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

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 --enable-libopus.

Option Mapping
--------------

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

b (bitrate)
     Set the bit rate in bits/s.  FFmpeg's b option is expressed in bits/s, while opusenc's bitrate in kilobits/s.

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

     off (hard-cbr)
          Use constant bit rate encoding.

     on (vbr)
          Use variable bit rate encoding (the default).

     constrained (cvbr)
          Use constrained variable bit rate encoding.

compression_level (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.

frame_duration (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 of FFmpeg is 10ms, but is 20ms in opusenc.

packet_loss (expect-loss)
     Set expected packet loss percentage. The default is 0.

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

     voip
          Favor improved speech intelligibility.

     audio
          Favor faithfulness to the input (the default).

     lowdelay
          Restrict to only the lowest delay modes.

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

libwavpack
==========

A wrapper providing WavPack encoding through libwavpack.

Only lossless mode using 32-bit integer samples is supported currently. The compression_level option can be used to control speed vs. compression tradeoff, with the values mapped to libwavpack as follows:

0
     Fast mode - corresponding to the wavpack -f option.

1
     Normal (default) settings.

2
     High quality - corresponding to the wavpack -h option.

3
     Very high quality - corresponding to the wavpack -hh option.

4-8
     Same as 3, but with extra processing enabled - corresponding to the wavpack -x option. I.e. 4 is the same as -x2 and 8 is the same as -x6.

Video Encoders
**************

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

libtheora
=========

Theora format supported through libtheora.

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

Options
-------

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

b
     Set the video bitrate, only works if the qscale flag in flags is not enabled.

flags
     Used to enable constant quality mode encoding through the qscale flag, and to enable the pass1 and pass2 modes.

g
     Set the GOP size.

global_quality
     Set the global quality in lambda units, only works if the qscale flag in flags is enabled. The value is clipped in the [0 - 10*FF_QP2LAMBDA] range, and then multiplied for 6.3 to get a value in the native libtheora range [0-63]. A higher value corresponds to a higher quality.

     For example, to set maximum constant quality encoding with ffmpeg:

          ffmpeg -i INPUT -flags:v qscale -global_quality:v "10*QP2LAMBDA" -codec:v libtheora OUTPUT.ogg

libvpx
======

VP8 format supported through libvpx.

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

Options
-------

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

threads
     g_threads

profile
     g_profile

vb
     rc_target_bitrate

g
     kf_max_dist

keyint_min
     kf_min_dist

qmin
     rc_min_quantizer

qmax
     rc_max_quantizer

bufsize, vb
     rc_buf_sz (bufsize * 1000 / vb)

     rc_buf_optimal_sz (bufsize * 1000 / vb * 5 / 6)

rc_init_occupancy, vb
     rc_buf_initial_sz (rc_init_occupancy * 1000 / vb)

rc_buffer_aggressivity
     rc_undershoot_pct

skip_threshold
     rc_dropframe_thresh

qcomp
     rc_2pass_vbr_bias_pct

maxrate, vb
     rc_2pass_vbr_maxsection_pct (maxrate * 100 / vb)

minrate, vb
     rc_2pass_vbr_minsection_pct (minrate * 100 / vb)

minrate, maxrate, vb
     VPX_CBR (minrate == maxrate == vb)

crf
     VPX_CQ, VP8E_SET_CQ_LEVEL

quality

     BEST
          VPX_DL_BEST_QUALITY

     GOOD
          VPX_DL_GOOD_QUALITY

     REALTIME
          VPX_DL_REALTIME

speed
     VP8E_SET_CPUUSED

nr
     VP8E_SET_NOISE_SENSITIVITY

mb_threshold
     VP8E_SET_STATIC_THRESHOLD

slices
     VP8E_SET_TOKEN_PARTITIONS

max-intra-rate
     VP8E_SET_MAX_INTRA_BITRATE_PCT

force_key_frames
     VPX_EFLAG_FORCE_KF

Alternate reference frame related

     vp8flags altref
          VP8E_SET_ENABLEAUTOALTREF

     ARNR_MAX_FRAMES
          VP8E_SET_ARNR_MAXFRAMES

     ARNR_TYPE
          VP8E_SET_ARNR_TYPE

     ARNR_STRENGTH
          VP8E_SET_ARNR_STRENGTH

     RC_LOOKAHEAD
          g_lag_in_frames

vp8flags error_resilient
     g_error_resilient

For more information about libvpx see: http://www.webmproject.org/

libx264
=======

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 --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 x264opts and x264-params private options allows to pass a list of key=value tuples as accepted by the libx264 x264_param_parse function.

The x264 project website is at http://www.videolan.org/developers/x264.html.

Options
-------

The following options are supported by the libx264 wrapper. The 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 the Codec Options chapter.

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

b (bitrate)
     Set bitrate in bits/s. Note that FFmpeg's b option is expressed in bits/s, while x264's bitrate is in kilobits/s.

bf (bframes)

g (keyint)

qmax (qpmax)

qmin (qpmin)

qdiff (qpstep)

qblur (qblur)

qcomp (qcomp)

refs (ref)

sc_threshold (scenecut)

trellis (trellis)

nr  (nr)

me_range (merange)

me_method (me)
     Set motion estimation method. Possible values in the decreasing order of speed:

     dia (dia)

     epzs (dia)
          Diamond search with radius 1 (fastest). epzs is an alias for dia.

     hex (hex)
          Hexagonal search with radius 2.

     umh (umh)
          Uneven multi-hexagon search.

     esa (esa)
          Exhaustive search.

     tesa (tesa)
          Hadamard exhaustive search (slowest).

subq (subme)

b_strategy (b-adapt)

keyint_min (min-keyint)

coder
     Set entropy encoder. Possible values:

     ac
          Enable CABAC.

     vlc
          Enable CAVLC and disable CABAC. It generates the same effect as x264's --no-cabac option.

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

     chroma
          Enable chroma in motion estimation.

     sad
          Ignore chroma in motion estimation. It generates the same effect as x264's --no-chroma-me option.

threads (threads)

thread_type
     Set multithreading technique. Possible values:

     slice
          Slice-based multithreading. It generates the same effect as x264's --sliced-threads option.

     frame
          Frame-based multithreading.

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

rc_init_occupancy (vbv-init)

preset (preset)
     Set the encoding preset.

tune (tune)
     Set tuning of the encoding params.

profile (profile)
     Set profile restrictions.

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

crf (crf)
     Set the quality for constant quality mode.

crf_max (crf-max)
     In CRF mode, prevents VBV from lowering quality beyond this point.

qp (qp)
     Set constant quantization rate control method parameter.

aq-mode (aq-mode)
     Set AQ method. Possible values:

     none (0)
          Disabled.

     variance (1)
          Variance AQ (complexity mask).

     autovariance (2)
          Auto-variance AQ (experimental).

aq-strength (aq-strength)
     Set AQ strength, reduce blocking and blurring in flat and textured areas.

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

psy-rd  (psy-rd)
     Set strength of psychovisual optimization, in PSY-RD:PSY-TRELLIS format.

rc-lookahead (rc-lookahead)
     Set number of frames to look ahead for frametype and ratecontrol.

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

weightp (weightp)
     Set weighted prediction method for P-frames. Possible values:

     none (0)
          Disabled

     simple (1)
          Enable only weighted refs

     smart (2)
          Enable both weighted refs and duplicates

ssim (ssim)
     Enable calculation and printing SSIM stats after the encoding.

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

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

b-bias (b-bias)
     Set the influence on how often B-frames are used.

b-pyramid (b-pyramid)
     Set method for keeping of some B-frames as references. Possible values:

     none (none)
          Disabled.

     strict (strict)
          Strictly hierarchical pyramid.

     normal (normal)
          Non-strict (not Blu-ray compatible).

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 x264's --no-mixed-refs option.

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

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

aud (aud)
     Enable use of access unit delimiters when set to 1.

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

deblock (deblock)
     Set loop filter parameters, in ALPHA:BETA form.

cplxblur (cplxblur)
     Set fluctuations reduction in QP (before curve compression).

partitions (partitions)
     Set partitions to consider as a comma-separated list of. Possible values in the list:

     p8x8
          8x8 P-frame partition.

     p4x4
          4x4 P-frame partition.

     b8x8
          4x4 B-frame partition.

     i8x8
          8x8 I-frame partition.

     i4x4
          4x4 I-frame partition. (Enabling p4x4 requires p8x8 to be enabled. Enabling i8x8 requires adaptive spatial transform (8x8dct option) to be enabled.)

     none (none)
          Do not consider any partitions.

     all (all)
          Consider every partition.

direct-pred (direct)
     Set direct MV prediction mode. Possible values:

     none (none)
          Disable MV prediction.

     spatial (spatial)
          Enable spatial predicting.

     temporal (temporal)
          Enable temporal predicting.

     auto (auto)
          Automatically decided.

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

stats (stats)
     Set the file name for multi-pass stats.

nal-hrd (nal-hrd)
     Set signal HRD information (requires vbv-bufsize to be set). Possible values:

     none (none)
          Disable HRD information signaling.

     vbr (vbr)
          Variable bit rate.

     cbr (cbr)
          Constant bit rate (not allowed in MP4 container).

x264opts (N.A.)
     Set any x264 option, see x264 --fullhelp for a list.

     Argument is a list of KEY=VALUE couples separated by ":". In FILTER and 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 ffmpeg:

          ffmpeg -i foo.mpg -vcodec libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv

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

     This option is functionally the same as the x264opts, but is duplicated for compability with the Libav fork.

     For example to specify libx264 encoding options with ffmpeg:

          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

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

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 --enable-libxvid --enable-gpl.

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

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 the Codec Options chapter for their documentation. The other shared options which are not listed have no effect for the libxvid encoder.

b

g

qmin

qmax

mpeg_quant

threads

bf

b_qfactor

b_qoffset

flags
     Set specific encoding flags. Possible values:

     mv4
          Use four motion vector by macroblock.

     aic
          Enable high quality AC prediction.

     gray
          Only encode grayscale.

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

     qpel
          Enable quarter-pixel motion compensation.

     cgop
          Enable closed GOP.

     global_header
          Place global headers in extradata instead of every keyframe.

trellis

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

     zero
          Use no motion estimation (default).

     phods

     x1

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

     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.

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

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

     simple
          Use macroblock comparing function algorithm (default).

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

     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.

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

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

     When combined with 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.

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

     off
          Disable displaying of SSIM information.

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

               Average SSIM: %f

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

     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:

                      SSIM: avg: %1.3f min: %1.3f max: %1.3f

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

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.

png
===

PNG image encoder.

Private options
---------------

dpi INTEGER
     Set physical density of pixels, in dots per inch, unset by default

dpm INTEGER
     Set physical density of pixels, in dots per meter, unset by default

ProRes
======

Apple ProRes encoder.

FFmpeg contains 2 ProRes encoders, the prores-aw and prores-ks encoder. The used encoder can be choosen with the -vcodec option.

Private Options for prores-ks
-----------------------------

profile INTEGER
     Select the ProRes profile to encode

     proxy

     lt

     standard

     hq

     4444

quant_mat INTEGER
     Select quantization matrix.

     auto

     default

     proxy

     lt

     standard

     hq

     If set to AUTO, the matrix matching the profile will be picked. If not set, the matrix providing the highest quality, DEFAULT, will be picked.

bits_per_mb INTEGER
     How many bits to allot for coding one macroblock. Different profiles use between 200 and 2400 bits per macroblock, the maximum is 8000.

mbs_per_slice INTEGER
     Number of macroblocks in each slice (1-8); the default value (8) should be good in almost all situations.

vendor STRING
     Override the 4-byte vendor ID. A custom vendor ID like APL0 would claim the stream was produced by the Apple encoder.

alpha_bits INTEGER
     Specify number of bits for alpha component. Possible values are 0, 8 and 16. Use 0 to disable alpha plane coding.

Speed considerations
--------------------

In the default mode of operation the encoder has to honor frame constraints (i.e. not produc 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 bits_per_mb limit will improve the speed.

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