Skip to content

AVM reference software

currentMigrated from docs/encoders/AVM.mdx at 37c3317fd058; modified for Encode Wiki · CC BY-SA 4.0

AVM (AOM Video Model) is the reference software for AV2 codec from Alliance for Open Media (https://aomedia.org/).

Latest tag
v1.0.0
Last commit
License
BSD-3-Clause-Clear
Stars
232

AVM (AOM Video Model) is the Alliance for Open Media’s reference software for AV2, the successor to AV1. It contains the reference encoder avmenc and decoder avmdec. Use it to experiment with AV2 coding tools, to produce and check conformance streams, or to see roughly what AV2 can do. It is not a production encoder. It is very slow, and almost nothing outside AVM can play its output yet.

AOMedia finalised the AV2 v1.0.0 specification on 28 May 2026 and announced it in June 2026. AVM v1.0.0, tagged the day before the specification (“First released version of AV2”), is the matching reference release. Development continues on the main branch of the GitHub repository; the old GitLab repository is marked deprecated.

Before v1.0.0, AVM went through research-v* tags whose bitstreams changed between versions. Older guides that describe AVM producing AV1 (av01) streams, or binaries named aomenc, are out of date.

You need CMake 3.16+, a C/C++ compiler, Perl, Git, and Yasm or NASM on x86:

Terminal window
git clone --branch v1.0.0 https://github.com/AOMediaCodec/avm.git
cmake -S avm -B avm-build -DCMAKE_BUILD_TYPE=Release -DENABLE_TESTS=0
cmake --build avm-build -j"$(nproc)"

This produces avm-build/avmenc and avm-build/avmdec. The build also compiles Abseil and other dependencies, so the first build takes a while.

avmenc reads Y4M (or raw YUV with explicit dimensions). This encodes a short constant-QP test clip:

Terminal window
avmenc --end-usage=q --qp=160 --cpu-used=6 --limit=60 -o output.ivf input.y4m
avmdec -o decoded.y4m output.ivf

From another source, pipe 10-bit Y4M through FFmpeg:

Terminal window
ffmpeg -i input.mkv -pix_fmt yuv420p10le -strict -1 -f yuv4mpegpipe - | \
avmenc --end-usage=q --qp=160 --cpu-used=6 --limit=60 -o output.ivf -

What matters:

  • Set --end-usage=q. The default rate control is VBR, so --qp on its own does not give a constant-QP encode.
  • --qp is on a 0–255 scale at every bit depth; only --min-qp/--max-qp reach down to −48 at 10-bit. Lower means higher quality. AV1 CRF/cq-level values do not carry over.
  • --cpu-used runs from 0 to 9 and defaults to 0, the slowest setting. Even --cpu-used=6 encodes well under 1 fps at 320×180 on a modern desktop CPU, so test with short clips (--limit) and small resolutions.
  • Only one pass is supported (--passes must be 1).
  • Output format follows the file extension. .ivf writes IVF, .obu writes a raw OBU stream, and anything else writes WebM. No standard container mapping for AV2 exists yet (AOMedia has announced a planned ISO BMFF binding), so stick to IVF or OBU.

To play the result, decode it with avmdec to Y4M and watch that. As of October 2026, no mainstream player, browser or hardware decoder supports AV2. VideoLAN’s dav2d software decoder is in early development.

For codec research, the AV2 common test conditions (CTC) document and test sequences are linked from the repository README.

All 250 option spellings that avmenc accepts at AVM v1.0.0 (commit 966a7d7cd6fc), grouped by purpose. Defaults are those of a plain command line without --cfg. On/off tools take 0 or 1. Options marked “not shown in --help” are parsed but missing from the help text. --qp uses the 0–255 scale at every bit depth; --min-qp and --max-qp extend down to −48 at 10-bit.

Application and output (24 options)
OptionDefaultWhat it does
--helpoffPrint the full option list and exit.
--cfg, -cunsetRead coding-tool settings from a key = value file (format: Sample.cfg in the source tree). Only the first --cfg counts, and command-line options override it. Tools the file leaves out take the config-file defaults, which differ from the command-line ones in two places: global motion on and 256×256 superblocks.
--debug, -DoffDeterministic WebM output: omits the encoder version and settings and uses a fixed track UID, so repeated encodes are byte-identical.
--output, -orequiredOutput file, or - for stdout. The file name can also pick the container; see --webm. WebM needs a seekable output, so pipe IVF or OBU.
--reconunsetAlso write the encoder’s reconstructed frames to this file as headerless planar YUV.
--codecav2Encoder to use. AVM contains only av2.
--passes, -p1Number of passes. Only 1 is accepted.
--pass0 (all passes)Run a single pass. With one pass, 0 and 1 both run it; other values are rejected.
--fpfnot parsedListed in --help, but avmenc never parses it: any use stops with “Unrecognized option”.
--limit0 (all frames)Stop after this many input frames. --limit=1 produces a still picture with the reduced still-picture header.
--skip0Discard this many frames from the start of the input.
--step1Encode only every Nth input frame after --skip. Must be at least 1.
--goodon (usage 0)Good-quality usage, the only usage AVM has. Same as --usage=0.
--quiet, -qoffDon’t print per-frame progress.
--verbose, -voffPrint the input format and the complete coding-tool configuration before encoding.
--psnr0 (off)Report PSNR: 1 at the input bit depth, 2 at the coded bit depth. The bare flag means 2, which falls back to 1 when the two depths are equal.
--webmWebM, unless -o ends in .ivf or .obuWrite WebM. WebM is the default container, but an -o name ending in lowercase .ivf or .obu switches to IVF or a raw OBU stream. After --webm, later -o extensions are ignored. Requires a build with WebM I/O (on by default); without it avmenc writes OBU.
--ivfoffWrite IVF. The container flags and -o are applied left to right, so --obu -o out.ivf writes IVF and -o out.ivf --obu writes OBU.
--obuoffWrite a raw OBU stream with no container, like an .obu output name. Same ordering rule as --ivf.
--q-hist0 (off)At the end, print a histogram of frame quantizers with this many buckets.
--rate-hist0 (off)At the end, print a bitrate histogram with this many buckets.
--disable-warningsoffSkip avmenc’s checks for suspicious settings.
--disable-warning-prompt, -yoffPrint those warnings but don’t stop to ask whether to continue.
--test-decodeoffDecode every frame inside avmenc and compare it with the encoder’s reconstruction: off, warn (report mismatches) or fatal (stop at the first).
Input, profile and bit depth (20 options)
OptionDefaultWhat it does
--i420on for raw inputRaw input is 4:2:0 I420. Y4M input carries its own format, so the four layout flags only matter for raw YUV.
--yv12offRaw input is 4:2:0 with the V plane before U.
--i422offRaw input is 4:2:2; the profile is raised to 3.
--i444offRaw input is 4:4:4; the profile is raised to 4.
--width, -wfrom Y4M headerFrame width in pixels. Required for raw input.
--height, -hfrom Y4M headerFrame height in pixels. Required for raw input.
--fpsfrom Y4M; 30/1 for rawFrame rate as num/den, overriding the Y4M header. It also sets the stream timebase.
--timebase1/frame rateNo effect: avmenc always replaces the timebase with the inverse of the frame rate.
--bit-depth, -b8 (raised to the input depth)Coded bit depth, 8 or 10. 12 is listed but rejected unless the build has test-only 12-bit support.
--input-bit-depthfrom Y4M, else —bit-depthBit depth of raw input samples. If it is lower than --bit-depth, samples are shifted up before encoding.
--input-chroma-subsampling-x0Horizontal chroma subsampling (0–1) for the test-only 12-bit profile. Normal builds take subsampling from the profile.
--input-chroma-subsampling-y0Vertical chroma subsampling (0–1) for the test-only 12-bit profile.
--monochromeoffCode luma only (4:0:0).
--profile0Bitstream profile: 0–2 are the Main 4:2:0 10-bit profiles (MAIN_420_10_IP0–IP2), 3 is 4:2:2 and 4 is 4:4:4. avmenc raises a 4:2:0 profile automatically for 4:2:2 or 4:4:4 input.
--usage, -u0 (good quality)Usage preset. Only 0 exists; other values fail with “Failed to get config”.
--forced_max_frame_width0 (frame width)Signal a larger maximum frame width in the sequence header than the first frame needs. Note the underscores.
--forced_max_frame_height0 (frame height)Same for the maximum frame height.
--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.
--force-video-mode0With --limit=1, code a normal one-frame video stream instead of a still picture.
--full-still-picture-hdroffFor still pictures, write the full sequence header instead of the reduced one.
Threads and tiles (8 options)
OptionDefaultWhat it does
--threads, -t0 (one thread)Maximum worker threads, up to 64. 0 and 1 both run single-threaded. Extra threads need --row-mt or several tiles.
--row-mt1Row-based multithreading inside tiles, 0 or 1.
--tile-columns0Tile columns as log2, 0–6 (1–64 columns), evenly spaced and limited by the frame width.
--tile-rows0Tile rows as log2, 0–6.
--tile-widthunset (uniform tiles)Explicit tile-column widths in superblocks, comma-separated; the list repeats until the frame is covered. Overrides --tile-columns. Not shown in --help.
--tile-heightunset (uniform tiles)Explicit tile-row heights in superblocks, as for --tile-width. Not shown in --help.
--num-tile-groups1Split each frame’s tiles into up to this many tile-group OBUs.
--mtu-size0 (off)Target maximum tile-group size in bytes for packetised transport. Overrides --num-tile-groups.
Rate control and quantizer (28 options)
OptionDefaultWhat it does
--end-usagevbrRate control: vbr, cbr, cq (constrained quality: --qp level under a bitrate cap) or q (constant quality from --qp). Use q for quality-targeted tests.
--qp40Quality level for q and cq, 0–255 at every bit depth; lower is better. At 10-bit the encoder offsets it internally, but unlike --min-qp/--max-qp it rejects negative values.
--target-bitrate256Target bitrate in kbit/s for vbr, cbr and cq.
--min-qp0Best (lowest) quantizer allowed: −48 to 255 at 10-bit, 0 to 255 at 8-bit. Setting --min-qp and --max-qp both to the bottom of the range turns on lossless coding.
--max-qp255Worst (highest) quantizer allowed, same scale as --min-qp.
--cq-levelunsetDeprecated 0–63 form of --qp, mapped to the 0–255 scale with a warning. Not shown in --help.
--min-qunsetDeprecated 0–63 form of --min-qp, mapped with a warning.
--max-qunsetDeprecated 0–63 form of --max-qp, mapped with a warning.
--lossless01 codes losslessly; TCQ, parity hiding, secondary and data-driven transforms are turned off. Requires --aq-mode=0 and --enable-chroma-deltaq=0.
--undershoot-pct25How far below the target bitrate, in percent (0–100), rate control lets the encode run before correcting.
--overshoot-pct25How far above the target, in percent (0–100).
--buf-sz6000Decoder buffer size in ms for cbr, cq and q. VBR uses a fixed 240000 ms model and ignores the three buffer options.
--buf-initial-sz4000Initial buffer fullness in ms (non-VBR).
--buf-optimal-sz5000Target buffer fullness in ms (non-VBR).
--minsection-pct0Minimum bitrate of a frame group as a percentage of the target (VBR). avmenc prints a one-pass warning when it is set.
--maxsection-pct2000Maximum bitrate of a frame group as a percentage of the target (VBR).
--drop-frame0 (off)Drop frames when the rate-control buffer falls below this fullness, in percent (0–100).
--max-intra-rate0 (no cap)Cap a keyframe’s size at this percentage of the average per-frame budget.
--max-inter-rate0 (no cap)Cap an inter frame’s size at this percentage of the average per-frame budget.
--gf-cbr-boost0Extra bits for golden/alt-ref frames in CBR, in percent.
--vbr-corpus-complexity-lap0 (off)VBR only: average corpus complexity per macroblock (0–10000) used by lookahead rate allocation. Other modes reject a non-zero value.
--use-fixed-qp-offsets0 (adaptive)q mode only: use fixed QP offsets per pyramid level instead of adaptive ones. 1 uses modelled offsets, 2 q-dependent modelled offsets. Not shown in --help.
--fixed-qp-offsetsunsetq mode only: comma-separated QP offsets for the keyframe, alt-ref and four deeper pyramid levels. At least two values; missing levels are halved from the previous one. Implies --use-fixed-qp-offsets=1. Not shown in --help.
--min-cr0 (off)Minimum compression ratio ×100: the encoder tries to keep each frame’s compression ratio above value/100.
--frame-boost0Accepted (0–1) but not used by the v1.0.0 encoder.
--resize-mode0 (off)Frame resizing: 0 none, 1 fixed scale, 2 random, 3 dynamic (rate-control driven), 4 the fixed CTC pattern, 5 a bridge-frame test pattern. Resizing turns off TPL and BRU.
--resize-denominator8 (no scaling)Scale for --resize-mode=1 as 8/denominator, 8–16.
--resize-kf-denominator8 (no scaling)Keyframe scale for --resize-mode=1, 8–16.
Speed, tuning and adaptive quantization (11 options)
OptionDefaultWhat it does
--cpu-used0Speed preset, 0–9; higher is faster, 0 is slowest. From 2 up, TCQ is switched off and many searches are pruned.
--tunepsnrDistortion metric for rate–distortion decisions: psnr or ssim. vmaf, vmaf_neg, vmaf_with_preprocessing and vmaf_without_preprocessing require a build with VMAF.
--vmaf-model-path/usr/local/share/model/vmaf_v0.6.1.jsonVMAF model file for the VMAF tunings. Requires a build with VMAF.
--tune-contentdefaultContent type: default or screen (desktop capture, slides, games).
--enable-tpl-model1Temporal dependency model (TPL), which spends more bits on blocks that later frames reference. Required by --deltaq-mode; turned off when resizing.
--deltaq-mode1 (objective)Per-superblock QP modulation: 0 off, 1 objective (TPL-based), 2 perceptual. Needs --enable-tpl-model=1.
--aq-mode0 (off)Segment-based adaptive quantization: 0 off, 1 variance, 2 complexity, 3 cyclic refresh.
--enable-chroma-deltaq0Allow separate delta QP for the chroma planes.
--enable-ext-seg0Allow 16 segments instead of 8.
--noise-sensitivity0Accepted (0–6) but not used by the v1.0.0 encoder.
--static-thresh0Accepted but not used by the v1.0.0 encoder.
Keyframes, frame groups and references (30 options)
OptionDefaultWhat it does
--kf-max-dist9999Maximum keyframe interval in frames. 0 makes every frame a keyframe (all-intra), which also disables TIP, optical-flow refinement, BRU and sub-block deblocking.
--kf-min-dist0Minimum keyframe interval in frames. Equal to --kf-max-dist gives keyframes at a fixed interval.
--disable-kfoffNo automatic keyframes; only the first frame is a keyframe.
--enable-fwd-kf0Forward keyframes: the keyframe is coded early as a hidden alt-ref and shown later, so the frames before it can reference it (open GOP).
--lag-in-frames19Lookahead in frames; values up to 70 are accepted but capped at 35. 0 gives low-delay coding without alt-refs and also disables optical-flow refinement.
--auto-alt-ref1Use alt-reference frames: hidden, temporally filtered future frames that later frames predict from. Values above 1 are reset to 1.
--arnr-maxframes7Maximum number of frames in the alt-ref temporal filter, 0–15.
--arnr-strength5Alt-ref temporal filter strength, 0–6.
--enable-keyframe-filtering2Temporally filter keyframes: 0 off, 1 filter without an overlay, 2 filter and code an overlay frame.
--enable-overlay0Code overlay frames after filtered alt-refs.
--min-gf-interval0 (auto)Minimum distance between alt-ref/golden frames, 0–34.
--max-gf-interval0 (auto)Maximum distance between alt-ref/golden frames, 2–34 when set.
--gf-min-pyr-height0Minimum depth of the frame-group pyramid, 0–5.
--gf-max-pyr-height5Maximum depth of the frame-group pyramid, 0–5; must be at least the minimum.
--subgop-config-strunset (built-in structure)Explicit sub-GOP structures as a string, or a preset name: def, enh, asym, ts (temporally scalable) or ld (low delay).
--subgop-config-pathunset (built-in structure)Read the sub-GOP structures from a file.
--max-reference-frames7References a frame may use, 1–7; capped at --dpb-size.
--reduced-reference-set0Search a smaller set of single and compound reference combinations.
--dpb-size8Decoded picture buffer slots, 1–16.
--explicit-ref-frame-map0Signal the reference-slot mapping explicitly instead of letting the decoder derive it.
--add-sef-for-output0Show hidden frames with show-existing-frame (SEF) OBUs that carry no order hint.
--monotonic-output-order0Set the monotonic-output-order flag, so hidden frames are shown with SEF OBUs as in AV1. Implies --add-sef-for-output=1 and requires --enable-keyframe-filtering=0.
--enable-bru0Backward reference update: 1 for the regular decoder, 2 for an optimised decoder. Takes effect only with --lag-in-frames=0, no resizing and not all-intra.
--enable-short-refresh-frame-flags1Signal reference refresh flags with 3 bits instead of 8.
--enable-sframe0Allow S-frames (switch frames), inter frames that serve as stream-switching points. Place them with --sframe-dist and --sframe-mode.
--sframe-dist0 (off)S-frame interval in frames.
--sframe-mode1S-frame placement, 0–2: 0 turns every alt-ref into an S-frame; 1 and 2 insert them at the --sframe-dist interval, aligned to alt-ref frames.
--sframe-type0 (regular S-frame)0 regular S-frame, 1 RAS frame.
--global-error-resilient0Error-resilient mode: non-key frames are coded as S-frames, so decoding can recover after loss at a cost in efficiency.
--frame-parallel0Frame-parallel decoding mode: frames don’t inherit entropy-coder state from earlier frames.
Partitioning (12 options)
OptionDefaultWhat it does
--sb-sizedynamicSuperblock size: 64, 128, 256 or dynamic. Dynamic picks 256 when the shorter side is at least 720 pixels, otherwise 128; at --cpu-used 2 and up it picks 128 above 480 pixels, otherwise 64.
--min-partition-size4Smallest block size: 4, 8, 16, 32, 64 or 128. 4K frames and faster presets use at least 8.
--max-partition-size256Largest block size, 4–256 (at least 8 with SDP).
--enable-rect-partitions1Allow rectangular (horizontal and vertical) splits.
--enable-ext-partitions1Allow AV2’s extended (H-shaped) partition types.
--enable-uneven-4way-partitions1Allow uneven four-way splits in 1:2:4:1 and 1:4:2:1 proportions.
--max-pb-aspect-ratio8Maximum block aspect ratio: 2, 4 or 8.
--enable-sdp1Semi-decoupled partitioning: separate luma and chroma partition trees in intra frames. Off for monochrome.
--enable-extended-sdp1Semi-decoupled partitioning in inter frames as well. Needs --enable-sdp=1.
--erp-pruning-level5Pruning of the ERP partition search: 0 off, 1 reuse decisions from the co-located block, 2–6 increasingly aggressive.
--use-ml-erp-pruning2ML model for ERP pruning: 0 off, 1 prune rectangular splits, 2 prune splits, 3 both.
--disable-ml-partition-speed-features1Turn off the ML-based partition speed-ups. Set 0 to allow them.
Intra prediction and intra block copy (14 options)
OptionDefaultWhat it does
--enable-mrls1Multiple reference line selection: predict from one of several rows/columns of neighbouring pixels.
--enable-ibp1Intra bi-prediction.
--enable-intra-dip1Data-driven intra prediction (DIP) mode.
--enable-smooth-intra1Smooth intra prediction modes.
--enable-paeth-intra1Paeth intra prediction mode.
--enable-angle-delta1Fine angle offsets for directional intra modes.
--enable-intra-edge-filter1Smooth the neighbouring edge pixels before directional prediction.
--enable-cfl-intra1Chroma-from-luma prediction.
--select-adaptive-ds3 (adaptive)Luma downsampling filter used by chroma-from-luma: 0, 1 or 2 for a fixed filter, 3 adaptive.
--enable-mhccp1Multi-hypothesis cross-component prediction for chroma.
--enable-palette1Palette mode, mostly useful for screen content.
--enable-intrabc1Intra block copy: predict from already-coded areas of the same frame, mostly useful for screen content.
--enable-intrabc-ext1Intra block copy search range: 0 default range, 1 add the local area, 2 local area only.
--max-drl-refbvs0 (auto)Number of reference block vectors in the intra-block-copy candidate list: 0 auto, or 2–4.
Inter prediction and motion vectors (32 options)
OptionDefaultWhat it does
--enable-tip1Temporal interpolated prediction (TIP): 1 the interpolated frame can be a reference or be output directly, 2 reference only, 0 off. Needs --enable-ref-frame-mvs=1.
--enable-tip-refinemv1Motion-vector refinement and optical flow for TIP.
--enable-mv-traj1Motion-vector trajectory tracking for temporal MV projection.
--enable-ref-frame-mvs1Temporal motion-vector prediction from reference frames. Turning it off also disables TIP and MV trajectories.
--reduced-ref-frame-mvs-mode01 projects temporal MVs from only one reference-frame combination.
--enable-opfl-refine1Optical-flow MV refinement: 0 off, 1 switchable per block, 2 all simple-average compound blocks, 3 the encoder chooses per frame. Off with --lag-in-frames=0 or all-intra.
--enable-refinemv1Decoder-side motion-vector refinement (RefineMV) mode.
--enable-high-motion0Use a large motion search window for fast motion.
--enable-global-motion0Global motion models per reference frame (camera pans, zooms).
--enable-warped-motion1Local warped motion. Turning it off also disables the four warp options below.
--enable-warp-causal1Warp models derived from neighbouring blocks.
--enable-warp-delta1Warp models signalled explicitly as deltas.
--enable-six-param-warp-delta1Allow six-parameter (affine) explicit warp models.
--enable-warp-extend1Extend a neighbouring block’s warp model into the current block.
--enable-skip-mode1Skip mode: compound prediction from the two nearest references with no residual or MVs signalled.
--enable-bawp1Block adaptive weighted prediction (BAWP): per-block weight and offset on the prediction, which helps with fades and lighting changes.
--enable-cwp1Compound weighted prediction (CWP): unequal weights for the two predictions.
--enable-masked-comp1Masked compound (wedge and difference-weighted). Turning it off also disables the two options below.
--enable-diff-wtd-comp1Difference-weighted compound.
--enable-interinter-wedge1Wedge-masked compound of two inter predictions.
--enable-imp-msk-bld1Implicit masked blending of compound predictions.
--enable-onesided-comp1Compound prediction from two references on the same side in time.
--enable-interintra-comp1Inter-intra compound. Turning it off also disables the two options below.
--enable-smooth-interintra1Smooth blending for inter-intra.
--enable-interintra-wedge1Wedge masks for inter-intra.
--enable-adaptive-mvd1Adaptive motion-vector-difference resolution.
--enable-flex-mvres1Flexible motion-vector precision per block.
--enable-joint-mvd1Joint coding of the two MV differences in compound blocks.
--enable-mvd-sign-derive1Derive MV-difference signs instead of coding them.
--max-drl-refmvs0 (auto)Number of reference MVs in the dynamic reference list per reference: 0 auto, or 2–8.
--enable-refmvbank1Reference-MV bank: keep recent MVs as extra candidates.
--enable-drl-reorder1Reorder the dynamic reference list: 0 never, 1 with constraints, 2 always.
Transforms and quantization (22 options)
OptionDefaultWhat it does
--enable-tx-partition1Transform partitioning inside a block.
--reduced-tx-part-set0Search a reduced set of transform partitions.
--enable-flip-idtx1Flipped-ADST, identity and one-dimensional transform types.
--reduced-tx-type-set0Search a reduced set of transform types, 0–3.
--use-intra-dct-only0Use only DCT in intra blocks.
--use-inter-dct-only0Use only DCT in inter blocks.
--use-intra-default-tx-only0Use only the default transform type in intra blocks.
--enable-ist1Intra secondary transform.
--enable-inter-ist1Secondary transform for inter blocks.
--enable-inter-ddt1Data-driven transforms for inter blocks.
--enable-chroma-dctonly0Use only DCT for chroma.
--enable-cctx1Cross-chroma component transform: jointly transform the Cb and Cr residuals. Off for monochrome.
--enable-fsc1Forward skip coding: intra residuals coded with the identity transform and their own coefficient coding.
--enable-idtx-intra1Allow the identity transform in intra blocks when --enable-fsc=0.
--disable-ml-transform-speed-features0Turn off the ML-based transform-search speed-ups.
--enable-tcq1 (every frame)Trellis-coded quantization: 0 off, 1 every frame, 2 keyframes and alt-refs only. --cpu-used 2 and up turn it off.
--enable-trellis-quant3Trellis optimisation of quantized coefficients: 0 off, 1 all stages, 2 final pass only, 3 all except the superblock RD estimate.
--enable-parity-hiding1Hide one coefficient’s parity in the sum of the others. Not used together with TCQ mode 1.
--enable-qm0Quantization matrices: quantize high frequencies more coarsely than low ones.
--qm-min5Lowest quantization-matrix level the encoder may pick, 0–15. Lower levels quantize high frequencies more coarsely; 15 is flat.
--qm-max9Highest quantization-matrix level the encoder may pick, 0–15.
--quant-b-adapt0Use the adaptive variant of the quantizer.
Loop filters and restoration (13 options)
OptionDefaultWhat it does
--enable-deblocking1Deblocking filter.
--sharpness0Deblocking sharpness, 0–7; higher values filter edges less.
--enable-lf-sub-pu1Also deblock sub-block edges inside a prediction block. Off for all-intra.
--enable-cdef1Constrained directional enhancement filter (CDEF).
--enable-cdef-on-skip-txfm1CDEF on blocks without residual: 0 never, 1 always, 2 decided per frame.
--enable-gdf1Guided detail filter (GDF).
--gdf-unit-matches-sb0Make GDF units the size of a superblock.
--enable-ccso1Cross-component sample offset (CCSO) filter.
--ccso-unit-matches-sb0Make CCSO units the size of a superblock.
--enable-restoration1Loop restoration. Turns off when both filter types below are disabled.
--enable-pc-wiener1Pixel-classified Wiener restoration filter.
--enable-wiener-nonsep1Non-separable Wiener restoration filter.
--disable-loopfilters-across-tiles0Don’t filter across tile boundaries, so tiles can be decoded independently.
Film grain and denoising (5 options)
OptionDefaultWhat it does
--film-grain-test0 (off)Apply built-in film-grain test vector 1–16.
--film-grain-tableunsetRead film-grain parameters from a table file and signal them for decoder-side grain synthesis.
--film-grain-block-size0 (16×16)Grain synthesis block size: 0 is 16×16, 1 is 32×32.
--denoise-noise-level0 (off)Denoise the input and signal matching film-grain parameters; strength 0–50. Requires a build with denoising (on by default).
--denoise-block-size32Block size for noise estimation in --denoise-noise-level.
Entropy coding and cost updates (7 options)
OptionDefaultWhat it does
--cdf-update-mode1Adapt the entropy-coder probabilities (CDFs): 0 never, 1 on every frame, 2 on selected frames.
--cross-frame-cdf-init-mode11 initialises each frame’s CDFs from a previous frame, 0 from defaults.
--enable-avg-cdf1Initialise CDFs from an average over frames or tiles.
--avg-cdf-type1What --enable-avg-cdf averages: 0 frames, 1 tiles. Frame averaging is always used when --tile-columns and --tile-rows are both 0.
--coeff-cost-upd-freq0 (superblock)How often the encoder refreshes its coefficient rate estimates: 0 per superblock, 1 per superblock row, 2 per tile.
--mode-cost-upd-freq0 (superblock)How often it refreshes mode rate estimates: 0 per superblock, 1 per superblock row, 2 per tile.
--mv-cost-upd-freq0 (superblock)How often it refreshes MV rate estimates: 0 per superblock, 1 per superblock row, 2 per tile, 3 never.
Color, metadata and stream structure (24 options)
OptionDefaultWhat it does
--color-primariesunspecifiedCICP primaries to signal: bt709, unspecified, bt601, bt470m, bt470bg, smpte240, film, bt2020, xyz, smpte431, smpte432, ebu3213. Signalling only; nothing is converted.
--transfer-characteristicsunspecifiedCICP transfer function: unspecified, bt709, bt470m, bt470bg, bt601, smpte240, lin, log100, log100sq10, iec61966, bt1361, srgb, bt2020-10bit, bt2020-12bit, smpte2084 (PQ), hlg, smpte428.
--matrix-coefficientsunspecifiedCICP matrix: identity, bt709, unspecified, fcc73, bt470bg, bt601, smpte240, ycgco, bt2020ncl, bt2020cl, smpte2085, chromncl, chromcl, ictcp, ipt-c2, ycgco-re, ycgco-ro.
--chroma-sample-positionunspecifiedChroma siting for 4:2:0 and 4:2:2: unspecified, left, center, topleft, top, bottomleft, bottom.
--timing-infounspecifiedTiming information in the bitstream: unspecified (none), constant (fixed frame rate) or model (decoder model; only without hidden frames).
--iccunsetAttach an ICC profile from this file as keyframe metadata. Only the first 128 bytes of the file are read.
--scan-type-info0Signal scan type (progressive or interlaced) in the content-interpretation OBU and a metadata OBU.
--enable-banding-metadata0Detect banding and write banding-hint metadata for decoder-side debanding.
--frame-hashoffWrite decoded-frame hash metadata: off, raw (before grain synthesis), filmgrain (after), or both. Not shown in --help.
--use-per-plane-frame-hash0Hash each plane separately instead of the whole frame. Not shown in --help.
--use-short-metadata0 (group format)Write metadata OBUs in the short format instead of the group format.
--enable-cropping-window0Signal a cropping window given by the four --crop-win-* offsets.
--crop-win-left-offset0Cropping-window left offset in pixels, 0–65535.
--crop-win-right-offset0Cropping-window right offset in pixels, 0–65535.
--crop-win-top-offset0Cropping-window top offset in pixels, 0–65535.
--crop-win-bottom-offset0Cropping-window bottom offset in pixels, 0–65535.
--target-seq-level-idx31 (no level target)Target level for an operating point, written ABxy: AB is the operating point, xy the level index (1021 = level index 21 for point 10). Repeat for several points.
--set-tier-mask0 (all Main tier)Bit mask over the 32 possible operating points; a set bit marks that point as High tier.
--operating-points-count1Number of operating points, 1–31.
--enable-lcr0Write a layer configuration record (LCR) OBU.
--enable-operating-point-sets0Write operating point set (OPS) OBUs.
--num-operating-point-sets1Number of operating point sets to write, 1–16.
--enable-atlas0Write an atlas segment OBU.
--enable-mfh-obu-signaling0Signal a multi-frame header (MFH) OBU.