Skip to content

aom-psy101

currentMigrated from docs/encoders/aom-psy101.mdx at 37c3317fd058; modified for Encode Wiki · CC BY-SA 4.0
Latest release
2023-12-03
Last commit
License
BSD-2-Clause
Stars
7

aom-psy101 is a fork of libaom/aomenc maintained by Damian Höster (damian101) at gitlab.com/damian101/aom-psy101. It combines selected patches from aom-av1-psy and aom-av1-lavish with its own changes, and it keeps tracking current libaom.

Status: the default psy101 branch last merged upstream libaom on 2 June 2026, and the binary reports 3.14.1-174-g74890d72b. The fork’s own changes were last updated on 21 February 2025. The project has no release builds and no usage documentation beyond --help.

This page covers only what the fork changes. For rate control, presets, Av1an usage, grain synthesis and the other mainline options, see aomenc.

Terminal window
git clone https://gitlab.com/damian101/aom-psy101.git
cmake -S aom-psy101 -B psy101_build -DCMAKE_BUILD_TYPE=Release -DENABLE_TESTS=0 -DENABLE_DOCS=0
cmake --build psy101_build -j"$(nproc)"

psy101_build/aomenc --help should list AOMedia Project AV1 Encoder Psy101. Av1an runs whichever aomenc comes first in PATH, so put the fork’s binary there or in a directory you prepend. FFmpeg’s libaom-av1 uses the fork only if FFmpeg is built against the fork’s libaom.

The fork’s defaults are already perceptually oriented, so a plain constant-quality command is a good start:

Terminal window
aomenc --end-usage=q --cq-level=24 --bit-depth=10 -o output.webm input.y4m

Add --tune-content=psy101 to use the fork’s preset (described below). Everything else works as in mainline: piping, two-pass behaviour and Av1an usage are described on the aomenc page.

Optionpsy101Mainline 3.15.1
--cpu-used4 (good-quality range 0–9)0 (0–6)
--tunessimpsnr
--enable-qm, --qm-min1, 0 (4 in all-intra)0, 5
--kf-min-dist120
--enable-chroma-deltaq10
--quant-b-adapt10
--enable-cdef0 (off)1
--arnr-strength, --arnr-maxframes2 (range 0–4), 155 (0–6), 7
--lag-in-frames maximum12848
--denoise-block-size1632
Automatic tiling--auto-tiling=3--auto-tiles=0

CDEF, AV1’s deringing filter, is off by default. If ringing or mosquito noise shows up around edges at lower bitrates, turn it back on with --enable-cdef=1, or use --enable-cdef=3 for CDEF that adapts to the frame qindex.

OptionDefaultWhat it does
--tune-content=psy101—Applies the fork’s preset. It disables loop restoration and 64-point transforms, forces 64×64 superblocks and caps the GF pyramid height at 4. It uses perceptual delta-q (--deltaq-mode=2) in two-pass encodes and Variance Boost (--deltaq-mode=6) in all-intra mode, whatever --deltaq-mode says.
--tune-content=psy—Perceptual adjustments to intra-mode, partition and RD decisions without the psy101 tool restrictions. It was retuned for low-bitrate encoding in January 2025.
--tune=image_perceptual_quality—An SSIM-style tune that scales rate–distortion decisions with libaom’s user-rating variance model, adjusted by cq-level. Mainline’s iq and ssimulacra2 tunes are also available.
--luma-bias00–15. Lowers the RD multiplier in dark blocks so they get more bits, which counters crushed or blocky shadows. It is ignored for PQ (smpte2084) and log transfer characteristics.
--auto-tiling30–7. Sets the minimum tile size: higher values pick more, smaller tiles for better encoder and decoder threading, so the default already tiles larger frames. Values above 5 also force 64×64 superblocks. Explicit --tile-columns and --tile-rows take precedence. With Av1an, set --auto-tiling=0 to avoid tiles.
--fast-decode00–3. Trades efficiency for easier decoding. Level 1 and above cap the GF pyramid height, 2 and above also disable loop restoration, and 3 also enables frame-parallel decoding mode.
--ssim-rd-mult100Scales the SSIM-based RD multiplier used by --tune=ssim, iq, ssimulacra2 and image_perceptual_quality.
--ssim-vmaf-rd, --vmaf-rd-resize0, 1Mix SSIM RD into VMAF RD (percent) and set the VMAF RD downscale. They need a build with -DCONFIG_TUNE_VMAF=1.

Every option aomenc accepts at psy101 commit 74890d72 (libaom 3.14.1 plus later upstream commits), including those that need optional build features. Defaults are for good-quality mode; rows note where the fork changes a default or behaviour, or where its --help text is wrong.

Application and output (19 options)
OptionDefaultDescription
--help—Print the full option list and exit.
--cfg, -cunsetRead low-level tool settings from a key–value file in the format of libaom’s Sample.cfg. Only the first --cfg is used.
--debug, -DoffLeave the application version out of the WebM tags so that repeated encodes are byte-identical.
--output, -orequiredOutput file. A .ivf or .obu extension selects that format unless --webm is given; any other name gets WebM.
--codecav1Encoder to use. libaom builds contain only av1.
--limit0 (all frames)Stop after this many input frames.
--skip0Skip this many input frames before encoding.
--quiet, -qoffDo not print progress.
--verbose, -voffPrint the encoder configuration before encoding.
--psnr0 (off)Report PSNR: 1 at the input bit depth, 2 at the stream bit depth. --psnr without a value means 1.
--test-decodeoffDecode every frame while encoding and compare it with the encoder’s reconstruction: warn reports a mismatch, fatal stops the encode.
--webmonWebM output. Requires a build with WebM I/O (CONFIG_WEBM_IO, on by default); without it the default output is raw OBU.
--ivfoffIVF output, the minimal frame container used by libaom’s own tools and test vectors.
--obuoffRaw low-overhead OBU stream (AV1 Section 5) with no container.
--annexb0 (off)Write the length-delimited Annex B bitstream format instead of Section 5 OBUs. Range 0–1.
--q-hist0 (off)After encoding, print a histogram of frame quantisers with this many buckets.
--rate-hist0 (off)After encoding, print a histogram of frame bitrates with this many buckets.
--disable-warningsoffSuppress the warnings about questionable settings.
--disable-warning-prompt, -yoffPrint those warnings but do not stop to ask whether to continue.
Usage modes and passes (12 options)
OptionDefaultDescription
--goodselectedGood-quality mode (--usage=0), the normal mode for offline video.
--rtoffRealtime mode (--usage=1): one pass, no lookahead, speeds 5–12, for low-latency streaming and conferencing.
--allintraoffAll-intra mode (--usage=2): every frame is a keyframe, no lookahead, speeds 0–9. Meant for still images and image sequences; it also turns CDEF off and changes the QM range and screen-content detection defaults.
--usage, -u0 (good)Usage mode by number: 0 good quality, 1 realtime, 2 all-intra. Same as --good, --rt and --allintra.
--passes, -p2 (1 in realtime and all-intra)Number of passes, 1–3. Two-pass good-quality encodes use the first-pass statistics even in q mode; realtime and all-intra always run one pass. Three passes add a half-resolution second pass whose decisions guide the final pass.
--passall passesRun only pass 1, 2 or 3 of a multi-pass encode, so that the passes can run as separate processes (each needs the same --fpf).
--fpfin memoryFirst-pass statistics file. Needed when passes run as separate processes; otherwise the statistics stay in memory.
--two-pass-output<output>_pass2_<n>.ivfThree-pass encoding: IVF file that receives the second (downscaled) pass.
--second-pass-log, -spfunsetThree-pass encoding: file in which the second pass stores its GOP and TPL decisions for the third pass.
--two-pass-inputunsetThree-pass encoding: an already-downscaled source to read in the second pass instead of scaling the input to half size.
--two-pass-width0 (half the input)Three-pass encoding: frame width of the second pass (and of raw --two-pass-input).
--two-pass-height0 (half the input)Three-pass encoding: frame height of the second pass (and of raw --two-pass-input).
Input format (20 options)
OptionDefaultDescription
--i420on for raw inputRaw input is 4:2:0 planar (I420). Y4M input takes its format from the header.
--yv12offRaw input is YV12 (4:2:0 planar with V before U).
--nv12offRaw input is NV12 (4:2:0 with interleaved U and V).
--i422offRaw input is 4:2:2 planar.
--i444offRaw input is 4:4:4 planar.
--width, -wfrom Y4MFrame width in pixels. Required for raw input.
--height, -hfrom Y4MFrame height in pixels. Required for raw input.
--fpsfrom Y4M (raw: 30/1)Frame rate as a fraction, e.g. 24000/1001.
--timebase1/fpsTimestamp precision in fractional seconds. aomenc overwrites it with the inverse frame rate before encoding, so setting it has no effect.
--bit-depth, -b8 (or the input’s, if higher)Bit depth of the encoded stream: 8, 10 or 12. Encoding 8-bit sources at 10 bits reduces banding and usually improves efficiency.
--input-bit-depthfrom Y4M (raw: --bit-depth)Bit depth of raw input when it differs from the stream bit depth.
--input-chroma-subsampling-x0Horizontal chroma subsampling (0 or 1) of 12-bit raw input in profile 2. Y4M input supplies it from the header.
--input-chroma-subsampling-y0Vertical chroma subsampling (0 or 1) of 12-bit raw input in profile 2.
--profile0 (Main)AV1 profile: 0 Main (4:2:0 and monochrome, 8–10 bit), 1 High (adds 4:4:4), 2 Professional (adds 4:2:2 and 12 bit). aomenc raises it when the input needs a higher profile.
--monochromeoffEncode luma only, with no chroma planes.
--use-16bit-internaloff (on above 8 bit)Use the high-bit-depth (16-bit) pipeline for an 8-bit encode.
--validate-hbd-input1 (on)Check that every high-bit-depth input sample lies within the range of the bit depth. Range 0–1.
--stereo-modemonoStereo 3D layout written to the WebM header: mono, left-right, bottom-top, top-bottom or right-left. Requires a build with WebM I/O.
--forced_max_frame_width0 (first frame)Maximum frame width written to the sequence header, so that later frames (for example after a resize) may be wider than the first.
--forced_max_frame_height0 (first frame)Maximum frame height written to the sequence header.
Rate control (24 options)
OptionDefaultDescription
--end-usagevbr (q in all-intra, cbr in realtime)Rate-control mode: vbr, cbr, cq (constrained quality: --cq-level capped by --target-bitrate) or q (constant quality at --cq-level). Quality-targeted encodes use q.
--target-bitrate256Target bitrate in kbit/s for vbr and cbr, and the bitrate cap in cq mode.
--cq-level10Quality level for q and cq modes, 0–63; lower is better. It maps to qindex 4×N (255 at 63). The scale does not match x264, x265 or SVT-AV1 CRF values.
--min-q0Best (lowest) quantiser rate control may use, 0–63. In q mode --cq-level must not be below it.
--max-q63Worst (highest) quantiser rate control may use, 0–63.
--lossless0 (off)Mathematically lossless coding (qindex 0 with the lossless transform). Range 0–1.
--undershoot-pct25 (50 in realtime)How far below the target bitrate a GOP may fall, in percent (0–100), before rate control compensates.
--overshoot-pct25 (50 in realtime)How far above the target bitrate a GOP may go, in percent (0–100), before rate control compensates.
--buf-sz6000 (1000 in realtime)Decoder buffer size in milliseconds at the target bitrate, for the rate-control buffer model.
--buf-initial-sz4000 (600 in realtime)Initial decoder buffer fill in milliseconds.
--buf-optimal-sz5000 (600 in realtime)Target decoder buffer fill in milliseconds.
--bias-pct50Two-pass VBR bit distribution, 0–100: 0 spreads bits evenly like CBR, 100 follows frame complexity fully. Ignored in one pass.
--minsection-pct0Lowest bitrate a GOP may get in two-pass VBR, as a percentage of the target. Ignored in one pass.
--maxsection-pct2000Highest bitrate a GOP may get in two-pass VBR, as a percentage of the target. Ignored in one pass.
--drop-frame0 (off)Drop frames when the rate buffer falls below this fill level (percent, 0–100). Used with CBR.
--max-intra-rate0 (unlimited)Cap on keyframe size as a percentage of the average frame size (450 allows 4.5 frames’ worth).
--max-inter-rate0 (unlimited)Cap on inter-frame size as a percentage of the average frame size.
--gf-cbr-boost0 (off)Extra bits for golden frames in CBR mode, as a percentage of the average frame bitrate.
--frame-boost0 (off)Periodic quantiser boost (0–1). The setting is accepted but the AV1 encoder does not use it.
--vbr-corpus-complexity-lap0 (off)One-pass VBR with lookahead only: average complexity per macroblock of the content corpus (0–10000), used to distribute bits.
--min-cr0 (off)Minimum compression ratio per frame ×100 (850 means 8.5:1), used to stay within level limits.
--use-fixed-qp-offsets0 (adaptive)q mode only: 0 derives per-layer quantiser offsets from --cq-level adaptively, 1 uses fixed offsets, 2 codes every frame at --cq-level with no offsets.
--fixed-qp-offsetsunsetMeant to give five offsets (keyframe, ALTREF and three internal alt-ref levels). aomenc only uses it to switch on --use-fixed-qp-offsets=1 and ignores the values.
--sb-qp-sweep0 (off)Try several quantisers per superblock and keep the one with the lowest RD cost. Intended for libaom’s unit tests; very slow.
Keyframes and GOP structure (12 options)
OptionDefaultDescription
--kf-min-dist12Minimum keyframe interval in frames. Set it equal to --kf-max-dist for a fixed interval. Mainline defaults to 0.
--kf-max-dist9999 (0 in all-intra)Maximum keyframe interval in frames; scene-cut keyframes can come sooner. For standalone encodes set it to the seek granularity you want, e.g. ten seconds of frames.
--disable-kfoffPlace no keyframes after the first frame. Av1an sets this for each chunk.
--enable-fwd-kf0 (off)Forward keyframes (open GOP): the keyframe is coded early as an alt-ref, so frames shown before it can reference it. Range 0–1.
--fwd-kf-dist-1 (off)Distance in frames between repeated forward keyframes.
--sframe-dist0 (off)Insert a switch frame (S-frame, a point where a player can switch between streams) every N frames.
--sframe-mode1S-frame placement, 1–2: 1 turns the frame into an S-frame only if it is an alt-ref, 2 uses the next alt-ref.
--min-gf-interval0 (auto)Shortest golden-frame group (distance between alt-refs) in frames, up to 127.
--max-gf-interval0 (auto)Longest golden-frame group in frames, 2–127.
--gf-min-pyr-height0Minimum depth of the hierarchical reference pyramid in a GF group, 0–5.
--gf-max-pyr-height5Maximum depth of the hierarchical reference pyramid in a GF group, 0–5. Lower values mean fewer reference layers and less temporal quality variation. --tune-content=psy101 and --fast-decode lower the default 5 to 4.
--kf-max-pyr-height-1 (off)Maximum pyramid depth for the GF group that starts at a keyframe, −1–5; the smaller of this and --gf-max-pyr-height applies.
Lookahead, alt-refs and temporal filtering (7 options)
OptionDefaultDescription
--lag-in-frames35 (0 in realtime and all-intra)Lookahead in frames for frame-type, alt-ref and rate-control decisions, 0–128 (mainline allows 48). Larger values use more memory.
--auto-alt-ref1 (on)Use alternate reference frames: hidden, temporally filtered frames that the frames around them predict from. Values above 1 are treated as 1.
--enable-overlay1 (on)Code an overlay frame where a filtered alt-ref is displayed. With 0 the filtered alt-ref is shown as it is.
--enable-tpl-model1 (on)Temporal dependency model (TPL): estimates how much later frames reference each block and spends bits accordingly. Required by --deltaq-mode=1.
--enable-keyframe-filtering1Temporal filtering of keyframes: 0 off, 1 on, 2 on with an overlay frame (experimental; can break seeking in players).
--arnr-maxframes15Number of frames, 0–15, that the alt-ref temporal filter averages; 0 or 1 disables filtering. Mainline defaults to 7.
--arnr-strength2Alt-ref temporal filter strength, 0–4 (mainline allows 0–6 and defaults to 5). Lower values keep more fine detail.
Speed and tuning (11 options)
OptionDefaultDescription
--cpu-used4Speed preset; lower is slower and more efficient. Good-quality mode accepts 0–9, but as in mainline its speed features stop at 6; realtime uses 5–12 and all-intra 0–9. Mainline defaults to 0.
--tunessimMetric that RD decisions optimise: ssim, psnr, image_perceptual_quality (the fork’s SSIM-based tune, scaled by libaom’s user-rating variance model and adjusted by --cq-level), mainline’s iq and ssimulacra2, butteraugli (requires -DCONFIG_TUNE_BUTTERAUGLI=1), the vmaf* tunes (require -DCONFIG_TUNE_VMAF=1 and --vmaf-model-path) and vmaf_saliency_map (requires -DCONFIG_SALIENCY_MAP=1). Mainline defaults to psnr.
--tune-contentdefaultContent type: screen, film (synthesised grain with a fixed pattern), psy (perceptual intra-mode, partition and RD adjustments) and psy101, the fork’s preset: it also disables loop restoration and 64-point transforms, forces 64×64 superblocks, caps the GF pyramid at 4 and uses --deltaq-mode=2 in two-pass encodes and 6 in all-intra, whatever --deltaq-mode says.
--dist-metricpsnrDistortion measure inside block decisions: psnr, or qm-psnr, which weights errors by the quantisation matrices (set by --tune=iq and ssimulacra2).
--sharpness0Bias, 0–7, of coefficient RD decisions towards keeping block detail. In all-intra mode it also sets the bitstream’s loop-filter sharpness, which weakens deblocking on block edges.
--enable-adaptive-sharpness0 (off)Vary the effective sharpness with the frame quantiser, using --sharpness as the maximum; reduces blocking at low and medium quality. No effect while --sharpness is 0. --tune=iq turns it on.
--screen-detection-mode1 (2 in all-intra)Screen-content detection: 1 standard, 2 also recognises anti-aliased text and graphics.
--enable-low-complexity-decode0 (off)Restrict tools so the stream is cheaper to decode. It only applies to good-quality speeds 1–3 when the shorter frame side is 608–1080 pixels.
--static-thresh0Motion threshold inherited from VP8/VP9. The setting is accepted but the AV1 encoder does not use it.
--noise-sensitivity0 (off)Temporal denoiser strength, 0–6, for realtime encodes. Requires a build with -DCONFIG_AV1_TEMPORAL_DENOISING=1 and only acts on 8-bit encodes at speed 8 and above.
--vmaf-model-path/usr/local/share/model/vmaf_v0.6.1.jsonVMAF model file used by the vmaf* tunes. Requires a build with -DCONFIG_TUNE_VMAF=1.
Adaptive quantisation and delta-q (8 options)
OptionDefaultDescription
--deltaq-mode1 (objective)Per-superblock quantiser modulation: 0 off; 1 objective, from the TPL model; 2 perceptual (wavelet energy); 3 perceptual for all-intra; 4 user-rating-based (all-intra); 5 HDR (BT.2020 input); 6 Variance Boost, which gives flat, low-variance areas more bits. Modes 1 and 2 need --enable-tpl-model=1. --tune-content=psy101 overrides it.
--deltaq-strength100Strength of --deltaq-mode=4 and 6, in percent (0–1000).
--delta-lf-mode0 (off)Also vary the loop-filter level per superblock. Only works with a non-zero --deltaq-mode. Range 0–1.
--aq-mode0 (off)Segment-based adaptive quantisation, separate from delta-q: 0 off, 1 variance, 2 complexity, 3 cyclic refresh (realtime).
--enable-chroma-deltaq1 (on)Chroma quantiser offsets. In all-intra mode with --tune=iq or ssimulacra2 they follow mainline’s subsampling-dependent values; otherwise 4:2:0 gets no offset and 4:2:2 and 4:4:4 get +3 and +6 qindex (coarser chroma). Mainline defaults to 0.
--enable-rate-guide-deltaq0 (off)All-intra only: rate-guided delta-q from a per-16×16-block rate file given with --rate-distribution-info. Needs --deltaq-mode=3.
--rate-distribution-info./rate_map.txtRate-distribution file for --enable-rate-guide-deltaq.
--auto-intra-tools-off0 (off)All-intra with --deltaq-mode=3: let the encoder switch off intra tools that rarely pay off.
Quantisation (5 options)
OptionDefaultDescription
--enable-qm1 (on)Quantisation matrices: quantise high frequencies more coarsely than low ones. Commonly enabled for perceptual encodes. Mainline defaults to 0.
--qm-min0 (4 in all-intra)Lowest QM level, 0–15 (15 is flat, lower levels weight frequencies more strongly). The level used rises with the quantiser from --qm-min to --qm-max. Mainline defaults to 5.
--qm-max9 (10 in all-intra)Highest QM level, 0–15.
--quant-b-adapt1 (on)Adaptive quantiser: a wider dead zone for the trailing (highest-frequency) coefficients of each block, and a lone ±1 coefficient is dropped. Saves bits on fine noise. Mainline defaults to 0.
--disable-trellis-quant3Trellis (RD-optimised) coefficient quantisation: 0 always, 1 never, 2 not during the RD search, 3 not in the fast luma RD estimate.
Threads and tiles (10 options)
OptionDefaultDescription
--threads, -t0 (one thread)Maximum number of worker threads. aomenc stays single-threaded unless this is set.
--row-mt1 (on)Row-based multithreading inside tiles; needs --threads above 1. Range 0–1.
--fp-mt0 (off)Frame-parallel multithreading: encode several frames at once for more speed with many threads, at a small efficiency cost. Range 0–1.
--tile-columns0Number of tile columns as log2, 0–6 (2 means four columns). Tiles let encoder and decoder work in parallel but cost some efficiency; the frame width limits how many are possible. A non-zero value takes precedence over --auto-tiling.
--tile-rows0Number of tile rows as log2, 0–6. A non-zero value takes precedence over --auto-tiling.
--tile-widthunset (uniform)Non-uniform tile widths in superblocks, comma-separated; the list repeats across the frame. Needs --tile-height as well.
--tile-heightunset (uniform)Non-uniform tile heights in superblocks, comma-separated; the list repeats down the frame.
--large-scale-tile0 (off)Large-scale tile coding for random access to individual tiles (light-field and VR use). IVF output only. Range 0–1.
--num-tile-groups1Maximum number of tile groups (OBUs) per frame. --mtu-size overrides it.
--mtu-size0 (off)Maximum bytes per tile group, for packetised transport. A single tile larger than this still goes in one group.
Partitioning and superblocks (7 options)
OptionDefaultDescription
--sb-sizedynamicSuperblock size: dynamic (the encoder picks 64×64 or 128×128 from resolution and speed), 64 or 128. --tune-content=psy101 and --auto-tiling above 5 force 64.
--enable-rect-partitions1 (on)Rectangular partitions (horizontal and vertical halves).
--enable-ab-partitions1 (on)AB partitions: a split into one half and two quarters.
--enable-1to4-partitions1 (on)1:4 and 4:1 partitions (four horizontal or vertical strips).
--min-partition-size4Smallest block size searched: 4, 8, 16, 32, 64 or 128. At 4K and above, or at faster speeds, it is at least 8.
--max-partition-size128Largest block size searched: 4, 8, 16, 32, 64 or 128.
--partition-info-path.Directory for partition statistics read and written by libaom’s partition experiments.
Intra prediction (11 options)
OptionDefaultDescription
--enable-directional-intra1 (on)Directional (angular) intra modes.
--enable-diagonal-intra1 (on)The diagonal subset of directional modes (D45 to D203). No effect when directional modes are off.
--enable-angle-delta1 (on)Fine angle offsets (up to ±3 steps of 3°) on directional modes.
--enable-intra-edge-filter1 (on)Smoothing and upsampling of the reference edge used for directional prediction.
--enable-smooth-intra1 (on)Smooth, smooth-horizontal and smooth-vertical intra modes, which interpolate between edges.
--enable-paeth-intra1 (on)Paeth intra predictor, which picks the left, top or top-left neighbour per pixel.
--enable-filter-intra1 (on)Filter-intra modes: recursive filtered prediction in 4×2 cells, for smooth texture.
--enable-cfl-intra1 (on)Chroma from luma: chroma predicted from the reconstructed luma.
--enable-palette1 (on)Palette mode, which codes a block as up to eight colours. Used only when screen-content tools are active.
--enable-intrabc1 (on)Intra block copy from an already coded area of the same frame. Used only in intra frames with screen-content tools.
--force-video-mode0 (off)Use video coding settings even when only one frame is encoded, instead of still-picture settings.
Inter prediction (16 options)
OptionDefaultDescription
--max-reference-frames7Maximum number of reference frames searched per frame, 3–7.
--reduced-reference-set0 (off)Search a reduced set of single and compound references, which is faster.
--enable-order-hint1 (on)Frame order hints. Distance-weighted compound, temporal motion-vector projection and reference sign bias depend on them.
--enable-ref-frame-mvs1 (on)Temporal motion-vector prediction from the motion fields of reference frames.
--enable-dual-filter1 (on)Separate interpolation filters for horizontal and vertical sub-pixel motion.
--enable-global-motion1 (on)Frame-level global motion models for camera pans, zooms and rotation.
--enable-warped-motion1 (on)Local warped motion: a per-block affine model derived from neighbouring motion vectors.
--enable-obmc1 (on)Overlapped block motion compensation: blends in predictions made with neighbouring blocks’ motion to soften block edges.
--enable-dist-wtd-comp1 (on)Distance-weighted compound prediction, weighting two references by their temporal distance. Off when order hints are off.
--enable-onesided-comp1 (on)Compound prediction from two references on the same side (both past or both future).
--enable-masked-comp1 (on)Masked compound prediction (wedge and difference-weighted); 0 turns both off.
--enable-diff-wtd-comp1 (on)Difference-weighted compound, with a mask derived from the difference between the two predictions.
--enable-interinter-wedge1 (on)Wedge-shaped masks for compound prediction from two references.
--enable-interintra-comp1 (on)Inter-intra prediction: an inter prediction blended with an intra prediction.
--enable-smooth-interintra1 (on)Smooth (gradual) blending for inter-intra prediction.
--enable-interintra-wedge1 (on)Wedge-shaped masks for inter-intra prediction.
Transforms (8 options)
OptionDefaultDescription
--enable-tx641 (on)64-point transforms for blocks of 64 pixels and larger. --tune-content=psy101 turns it off.
--enable-flip-idtx1 (on)Extended transform types: flipped ADST, identity and one-dimensional (horizontal or vertical) transforms.
--enable-rect-tx1 (on)Rectangular transforms. They need rectangular partitions.
--enable-tx-size-search1 (on)Search the transform size per block. With 0 each block uses its largest possible transform.
--reduced-tx-type-set0 (off)Search a reduced set of transform types, which is faster.
--use-intra-dct-only0 (off)Use only the DCT for intra blocks.
--use-inter-dct-only0 (off)Use only the DCT for inter blocks.
--use-intra-default-tx-only0 (off)Use only the default transform type of each intra mode.
Loop filters (3 options)
OptionDefaultDescription
--loopfilter-control1 (all frames)Deblocking filter: 0 off, 1 all frames, 2 skip non-reference frames, 3 skip low-motion frames.
--enable-cdef0 (off)CDEF, the constrained directional enhancement (deringing) filter: 0 off, 1 all frames, 2 reference frames only, 3 adaptive, which weakens it at high quality. Mainline enables it; turn it back on with 1 or 3 if ringing shows around edges at low bitrates.
--enable-restoration1 (0 in realtime)Loop restoration (Wiener and self-guided filters). It is slow to search and is always off in realtime mode. --tune-content=psy101 and --fast-decode=2 or higher turn it off.
Resize and super-resolution (8 options)
OptionDefaultDescription
--resize-mode0 (off)Code frames at a lower resolution while the render size keeps the original: 0 off, 1 fixed (--resize-denominator), 2 random (testing), 3 dynamic (realtime CBR).
--resize-denominator8Resize factor 8/N for non-key frames, N = 8–16 (16 halves both dimensions).
--resize-kf-denominator8Resize factor 8/N for keyframes, N = 8–16.
--superres-mode0 (off)Super-resolution: code frames at reduced width and let the decoder upscale them in-loop: 0 off, 1 fixed, 2 random, 3 above a quantiser threshold, 4 automatic.
--superres-denominator8Horizontal super-resolution factor 8/N for non-key frames, N = 8–16.
--superres-kf-denominator8Horizontal super-resolution factor 8/N for keyframes, N = 8–16.
--superres-qthresh63Mode 3: use super-resolution on non-key frames whose quantiser (1–63) exceeds this.
--superres-kf-qthresh32Mode 3: the same threshold for keyframes.
Film grain and denoising (5 options)
OptionDefaultDescription
--denoise-noise-level0 (off)Film-grain synthesis: estimate the source grain, denoise before encoding and signal grain for the decoder to add back. 0–50; keep it low (single digits to about 10) to avoid patterned grain.
--denoise-block-size16Block size in pixels for the grain estimator. Mainline defaults to 32.
--enable-dnl-denoising1 (on)Encode the denoised frame. With 0 the original frame is encoded and only the estimated grain parameters are added, which avoids the denoiser’s smearing. --help claims 0, but the default in normal builds is 1.
--film-grain-tableunsetRead film-grain parameters from a table file, such as a photon-noise table from Av1an or grav1synth, instead of estimating them.
--film-grain-test0 (off)Use one of libaom’s 16 built-in film-grain test parameter sets (1–16).
Entropy coding and cost updates (5 options)
OptionDefaultDescription
--cdf-update-mode1Adaptation of the entropy-coding probabilities (CDFs): 0 never, 1 every frame, 2 selectively.
--coeff-cost-upd-freq0 (superblock)How often the encoder refreshes its coefficient rate estimates: 0 each superblock, 1 each superblock row, 2 each tile, 3 never. Higher values are faster.
--mode-cost-upd-freq0 (superblock)Refresh interval for mode rate estimates, with the same values.
--mv-cost-upd-freq0 (superblock)Refresh interval for motion-vector rate estimates, with the same values.
--dv-cost-upd-freq0 (superblock)Refresh interval for intra-block-copy vector rate estimates, with the same values.
Signalling, levels and error resilience (12 options)
OptionDefaultDescription
--color-primariesunspecifiedColour primaries (CICP) written to the sequence header; signalling only, no conversion. Values: bt709, unspecified, bt601, bt470m, bt470bg, smpte240, film, bt2020, xyz, smpte431, smpte432, ebu3213.
--transfer-characteristicsunspecifiedTransfer characteristics (CICP), e.g. bt709, smpte2084 (PQ) or hlg. Values: unspecified, bt709, bt470m, bt470bg, bt601, smpte240, lin, log100, log100sq10, iec61966, bt1361, srgb, bt2020-10bit, bt2020-12bit, smpte2084, hlg, smpte428.
--matrix-coefficientsunspecifiedMatrix coefficients (CICP). Values: identity, bt709, unspecified, fcc73, bt470bg, bt601, smpte240, ycgco, bt2020ncl, bt2020cl, smpte2085, chromncl, chromcl, ictcp, ipt-c2, ycgco-re, ycgco-ro.
--chroma-sample-positionunknown4:2:0 chroma siting: unknown, vertical (left, as MPEG-2) or colocated (top-left, as BT.2020).
--timing-infounspecifiedTiming information in the sequence header: unspecified, constant (fixed frame rate) or model (decoder model; not with hidden frames or super-resolution).
--target-seq-level-idx31 (unconstrained)Target level per operating point, written ABxy: operating point AB, level index xy, where index = (major − 2) × 4 + minor (8 is level 4.0, 19 is 6.3). The encoder limits its decisions to meet it.
--strict-level-conformance0 (off)Stop with an error if the stream cannot meet --target-seq-level-idx.
--set-tier-mask0 (Main)Bit mask of operating points that use the High tier instead of Main (bit n is point n).
--full-still-picture-hdroffFor single-frame encodes, write the full sequence header instead of the reduced still-picture header.
--error-resilient0 (off)Error-resilient frames, which stay decodable when references are lost. Range 0–1.
--global-error-resilient0 (off)Same effect as --error-resilient, set through the generic encoder configuration (the two are combined).
--frame-parallel0 (off)Disable backward probability adaptation so that a decoder can decode frames in parallel. Range 0–1. --fast-decode=3 turns it on.
Options added by aom-psy101 (8 options)
OptionDefaultDescription
--auto-tiling3Automatic tiling, 0–7 (0 off). Higher values allow smaller tiles: at least 32 superblocks per tile side at 1, down to 4 at 7 (halved with 128×128 superblocks). It fills in only tile columns and rows not set explicitly; values above 5 force 64×64 superblocks. With Av1an, set 0 to avoid tiles. Replaces mainline’s --auto-tiles.
--fast-decode0 (off)Easier decoding at some efficiency cost, 0–3: 1 caps the GF pyramid height at 4, 2 also disables loop restoration, 3 also enables frame-parallel decoding mode.
--luma-bias0 (off)0–15. Lowers the RD multiplier of dark blocks by a perceptual (PQ-slope) weight of their brightness, so shadows get more bits. Ignored for PQ (smpte2084) and log transfer characteristics.
--ssim-rd-mult1000–1000 (%). Scales the SSIM-based RD multiplier used by --tune=ssim, iq, ssimulacra2 and image_perceptual_quality.
--ssim-vmaf-rd0Share of SSIM RD, in percent (0–100), that replaces VMAF RD in the VMAF tunes. Requires a build with -DCONFIG_TUNE_VMAF=1.
--vmaf-rd-resize1 (half)Downscale for VMAF RD calculations: 0 full resolution, 1 half, 2 quarter, 3 eighth. Requires a build with -DCONFIG_TUNE_VMAF=1.
--vmaf-preprocessing0 (off)Force libaom’s VMAF preprocessing (sharpening) whatever the tune: 0 off, 1 block-based VMAF-NEG, 2 block-based, 3 frame-based. Requires a build with -DCONFIG_TUNE_VMAF=1.
--vmaf-quantization0 (off)Force the VMAF tunes’ quantiser adjustment whatever the tune. Range 0–1. Requires a build with -DCONFIG_TUNE_VMAF=1.