AVM reference software
37c3317fd058; modified for Encode Wiki · CC BY-SA 4.0AVM (AOM Video Model) is the reference software for AV2 codec from Alliance for Open Media (https://aomedia.org/).
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.
Status
Section titled “Status”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:
git clone --branch v1.0.0 https://github.com/AOMediaCodec/avm.gitcmake -S avm -B avm-build -DCMAKE_BUILD_TYPE=Release -DENABLE_TESTS=0cmake --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.
Encode and decode
Section titled “Encode and decode”avmenc reads Y4M (or raw YUV with explicit dimensions). This encodes a short constant-QP test clip:
avmenc --end-usage=q --qp=160 --cpu-used=6 --limit=60 -o output.ivf input.y4mavmdec -o decoded.y4m output.ivfFrom another source, pipe 10-bit Y4M through FFmpeg:
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--qpon its own does not give a constant-QP encode. --qpis on a 0–255 scale at every bit depth; only--min-qp/--max-qpreach down to −48 at 10-bit. Lower means higher quality. AV1 CRF/cq-level values do not carry over.--cpu-usedruns from 0 to 9 and defaults to 0, the slowest setting. Even--cpu-used=6encodes 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 (
--passesmust be 1). - Output format follows the file extension.
.ivfwrites IVF,.obuwrites 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.
Complete native parameter reference
Section titled “Complete native parameter reference”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)
| Option | Default | What it does |
|---|---|---|
--help | off | Print the full option list and exit. |
--cfg, -c | unset | Read 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, -D | off | Deterministic WebM output: omits the encoder version and settings and uses a fixed track UID, so repeated encodes are byte-identical. |
--output, -o | required | Output file, or - for stdout. The file name can also pick the container; see --webm. WebM needs a seekable output, so pipe IVF or OBU. |
--recon | unset | Also write the encoder’s reconstructed frames to this file as headerless planar YUV. |
--codec | av2 | Encoder to use. AVM contains only av2. |
--passes, -p | 1 | Number of passes. Only 1 is accepted. |
--pass | 0 (all passes) | Run a single pass. With one pass, 0 and 1 both run it; other values are rejected. |
--fpf | not parsed | Listed in --help, but avmenc never parses it: any use stops with “Unrecognized option”. |
--limit | 0 (all frames) | Stop after this many input frames. --limit=1 produces a still picture with the reduced still-picture header. |
--skip | 0 | Discard this many frames from the start of the input. |
--step | 1 | Encode only every Nth input frame after --skip. Must be at least 1. |
--good | on (usage 0) | Good-quality usage, the only usage AVM has. Same as --usage=0. |
--quiet, -q | off | Don’t print per-frame progress. |
--verbose, -v | off | Print the input format and the complete coding-tool configuration before encoding. |
--psnr | 0 (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. |
--webm | WebM, unless -o ends in .ivf or .obu | Write 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. |
--ivf | off | Write 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. |
--obu | off | Write a raw OBU stream with no container, like an .obu output name. Same ordering rule as --ivf. |
--q-hist | 0 (off) | At the end, print a histogram of frame quantizers with this many buckets. |
--rate-hist | 0 (off) | At the end, print a bitrate histogram with this many buckets. |
--disable-warnings | off | Skip avmenc’s checks for suspicious settings. |
--disable-warning-prompt, -y | off | Print those warnings but don’t stop to ask whether to continue. |
--test-decode | off | Decode 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)
| Option | Default | What it does |
|---|---|---|
--i420 | on for raw input | Raw input is 4:2:0 I420. Y4M input carries its own format, so the four layout flags only matter for raw YUV. |
--yv12 | off | Raw input is 4:2:0 with the V plane before U. |
--i422 | off | Raw input is 4:2:2; the profile is raised to 3. |
--i444 | off | Raw input is 4:4:4; the profile is raised to 4. |
--width, -w | from Y4M header | Frame width in pixels. Required for raw input. |
--height, -h | from Y4M header | Frame height in pixels. Required for raw input. |
--fps | from Y4M; 30/1 for raw | Frame rate as num/den, overriding the Y4M header. It also sets the stream timebase. |
--timebase | 1/frame rate | No effect: avmenc always replaces the timebase with the inverse of the frame rate. |
--bit-depth, -b | 8 (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-depth | from Y4M, else —bit-depth | Bit depth of raw input samples. If it is lower than --bit-depth, samples are shifted up before encoding. |
--input-chroma-subsampling-x | 0 | Horizontal chroma subsampling (0–1) for the test-only 12-bit profile. Normal builds take subsampling from the profile. |
--input-chroma-subsampling-y | 0 | Vertical chroma subsampling (0–1) for the test-only 12-bit profile. |
--monochrome | off | Code luma only (4:0:0). |
--profile | 0 | Bitstream 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, -u | 0 (good quality) | Usage preset. Only 0 exists; other values fail with “Failed to get config”. |
--forced_max_frame_width | 0 (frame width) | Signal a larger maximum frame width in the sequence header than the first frame needs. Note the underscores. |
--forced_max_frame_height | 0 (frame height) | Same for the maximum frame height. |
--stereo-mode | mono | Stereo 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-mode | 0 | With --limit=1, code a normal one-frame video stream instead of a still picture. |
--full-still-picture-hdr | off | For still pictures, write the full sequence header instead of the reduced one. |
Threads and tiles (8 options)
| Option | Default | What it does |
|---|---|---|
--threads, -t | 0 (one thread) | Maximum worker threads, up to 64. 0 and 1 both run single-threaded. Extra threads need --row-mt or several tiles. |
--row-mt | 1 | Row-based multithreading inside tiles, 0 or 1. |
--tile-columns | 0 | Tile columns as log2, 0–6 (1–64 columns), evenly spaced and limited by the frame width. |
--tile-rows | 0 | Tile rows as log2, 0–6. |
--tile-width | unset (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-height | unset (uniform tiles) | Explicit tile-row heights in superblocks, as for --tile-width. Not shown in --help. |
--num-tile-groups | 1 | Split each frame’s tiles into up to this many tile-group OBUs. |
--mtu-size | 0 (off) | Target maximum tile-group size in bytes for packetised transport. Overrides --num-tile-groups. |
Rate control and quantizer (28 options)
| Option | Default | What it does |
|---|---|---|
--end-usage | vbr | Rate control: vbr, cbr, cq (constrained quality: --qp level under a bitrate cap) or q (constant quality from --qp). Use q for quality-targeted tests. |
--qp | 40 | Quality 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-bitrate | 256 | Target bitrate in kbit/s for vbr, cbr and cq. |
--min-qp | 0 | Best (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-qp | 255 | Worst (highest) quantizer allowed, same scale as --min-qp. |
--cq-level | unset | Deprecated 0–63 form of --qp, mapped to the 0–255 scale with a warning. Not shown in --help. |
--min-q | unset | Deprecated 0–63 form of --min-qp, mapped with a warning. |
--max-q | unset | Deprecated 0–63 form of --max-qp, mapped with a warning. |
--lossless | 0 | 1 codes losslessly; TCQ, parity hiding, secondary and data-driven transforms are turned off. Requires --aq-mode=0 and --enable-chroma-deltaq=0. |
--undershoot-pct | 25 | How far below the target bitrate, in percent (0–100), rate control lets the encode run before correcting. |
--overshoot-pct | 25 | How far above the target, in percent (0–100). |
--buf-sz | 6000 | Decoder buffer size in ms for cbr, cq and q. VBR uses a fixed 240000 ms model and ignores the three buffer options. |
--buf-initial-sz | 4000 | Initial buffer fullness in ms (non-VBR). |
--buf-optimal-sz | 5000 | Target buffer fullness in ms (non-VBR). |
--minsection-pct | 0 | Minimum bitrate of a frame group as a percentage of the target (VBR). avmenc prints a one-pass warning when it is set. |
--maxsection-pct | 2000 | Maximum bitrate of a frame group as a percentage of the target (VBR). |
--drop-frame | 0 (off) | Drop frames when the rate-control buffer falls below this fullness, in percent (0–100). |
--max-intra-rate | 0 (no cap) | Cap a keyframe’s size at this percentage of the average per-frame budget. |
--max-inter-rate | 0 (no cap) | Cap an inter frame’s size at this percentage of the average per-frame budget. |
--gf-cbr-boost | 0 | Extra bits for golden/alt-ref frames in CBR, in percent. |
--vbr-corpus-complexity-lap | 0 (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-offsets | 0 (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-offsets | unset | q 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-cr | 0 (off) | Minimum compression ratio ×100: the encoder tries to keep each frame’s compression ratio above value/100. |
--frame-boost | 0 | Accepted (0–1) but not used by the v1.0.0 encoder. |
--resize-mode | 0 (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-denominator | 8 (no scaling) | Scale for --resize-mode=1 as 8/denominator, 8–16. |
--resize-kf-denominator | 8 (no scaling) | Keyframe scale for --resize-mode=1, 8–16. |
Speed, tuning and adaptive quantization (11 options)
| Option | Default | What it does |
|---|---|---|
--cpu-used | 0 | Speed preset, 0–9; higher is faster, 0 is slowest. From 2 up, TCQ is switched off and many searches are pruned. |
--tune | psnr | Distortion 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.json | VMAF model file for the VMAF tunings. Requires a build with VMAF. |
--tune-content | default | Content type: default or screen (desktop capture, slides, games). |
--enable-tpl-model | 1 | Temporal dependency model (TPL), which spends more bits on blocks that later frames reference. Required by --deltaq-mode; turned off when resizing. |
--deltaq-mode | 1 (objective) | Per-superblock QP modulation: 0 off, 1 objective (TPL-based), 2 perceptual. Needs --enable-tpl-model=1. |
--aq-mode | 0 (off) | Segment-based adaptive quantization: 0 off, 1 variance, 2 complexity, 3 cyclic refresh. |
--enable-chroma-deltaq | 0 | Allow separate delta QP for the chroma planes. |
--enable-ext-seg | 0 | Allow 16 segments instead of 8. |
--noise-sensitivity | 0 | Accepted (0–6) but not used by the v1.0.0 encoder. |
--static-thresh | 0 | Accepted but not used by the v1.0.0 encoder. |
Keyframes, frame groups and references (30 options)
| Option | Default | What it does |
|---|---|---|
--kf-max-dist | 9999 | Maximum 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-dist | 0 | Minimum keyframe interval in frames. Equal to --kf-max-dist gives keyframes at a fixed interval. |
--disable-kf | off | No automatic keyframes; only the first frame is a keyframe. |
--enable-fwd-kf | 0 | Forward 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-frames | 19 | Lookahead 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-ref | 1 | Use alt-reference frames: hidden, temporally filtered future frames that later frames predict from. Values above 1 are reset to 1. |
--arnr-maxframes | 7 | Maximum number of frames in the alt-ref temporal filter, 0–15. |
--arnr-strength | 5 | Alt-ref temporal filter strength, 0–6. |
--enable-keyframe-filtering | 2 | Temporally filter keyframes: 0 off, 1 filter without an overlay, 2 filter and code an overlay frame. |
--enable-overlay | 0 | Code overlay frames after filtered alt-refs. |
--min-gf-interval | 0 (auto) | Minimum distance between alt-ref/golden frames, 0–34. |
--max-gf-interval | 0 (auto) | Maximum distance between alt-ref/golden frames, 2–34 when set. |
--gf-min-pyr-height | 0 | Minimum depth of the frame-group pyramid, 0–5. |
--gf-max-pyr-height | 5 | Maximum depth of the frame-group pyramid, 0–5; must be at least the minimum. |
--subgop-config-str | unset (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-path | unset (built-in structure) | Read the sub-GOP structures from a file. |
--max-reference-frames | 7 | References a frame may use, 1–7; capped at --dpb-size. |
--reduced-reference-set | 0 | Search a smaller set of single and compound reference combinations. |
--dpb-size | 8 | Decoded picture buffer slots, 1–16. |
--explicit-ref-frame-map | 0 | Signal the reference-slot mapping explicitly instead of letting the decoder derive it. |
--add-sef-for-output | 0 | Show hidden frames with show-existing-frame (SEF) OBUs that carry no order hint. |
--monotonic-output-order | 0 | Set 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-bru | 0 | Backward 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-flags | 1 | Signal reference refresh flags with 3 bits instead of 8. |
--enable-sframe | 0 | Allow S-frames (switch frames), inter frames that serve as stream-switching points. Place them with --sframe-dist and --sframe-mode. |
--sframe-dist | 0 (off) | S-frame interval in frames. |
--sframe-mode | 1 | S-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-type | 0 (regular S-frame) | 0 regular S-frame, 1 RAS frame. |
--global-error-resilient | 0 | Error-resilient mode: non-key frames are coded as S-frames, so decoding can recover after loss at a cost in efficiency. |
--frame-parallel | 0 | Frame-parallel decoding mode: frames don’t inherit entropy-coder state from earlier frames. |
Partitioning (12 options)
| Option | Default | What it does |
|---|---|---|
--sb-size | dynamic | Superblock 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-size | 4 | Smallest block size: 4, 8, 16, 32, 64 or 128. 4K frames and faster presets use at least 8. |
--max-partition-size | 256 | Largest block size, 4–256 (at least 8 with SDP). |
--enable-rect-partitions | 1 | Allow rectangular (horizontal and vertical) splits. |
--enable-ext-partitions | 1 | Allow AV2’s extended (H-shaped) partition types. |
--enable-uneven-4way-partitions | 1 | Allow uneven four-way splits in 1:2:4:1 and 1:4:2:1 proportions. |
--max-pb-aspect-ratio | 8 | Maximum block aspect ratio: 2, 4 or 8. |
--enable-sdp | 1 | Semi-decoupled partitioning: separate luma and chroma partition trees in intra frames. Off for monochrome. |
--enable-extended-sdp | 1 | Semi-decoupled partitioning in inter frames as well. Needs --enable-sdp=1. |
--erp-pruning-level | 5 | Pruning of the ERP partition search: 0 off, 1 reuse decisions from the co-located block, 2–6 increasingly aggressive. |
--use-ml-erp-pruning | 2 | ML model for ERP pruning: 0 off, 1 prune rectangular splits, 2 prune splits, 3 both. |
--disable-ml-partition-speed-features | 1 | Turn off the ML-based partition speed-ups. Set 0 to allow them. |
Intra prediction and intra block copy (14 options)
| Option | Default | What it does |
|---|---|---|
--enable-mrls | 1 | Multiple reference line selection: predict from one of several rows/columns of neighbouring pixels. |
--enable-ibp | 1 | Intra bi-prediction. |
--enable-intra-dip | 1 | Data-driven intra prediction (DIP) mode. |
--enable-smooth-intra | 1 | Smooth intra prediction modes. |
--enable-paeth-intra | 1 | Paeth intra prediction mode. |
--enable-angle-delta | 1 | Fine angle offsets for directional intra modes. |
--enable-intra-edge-filter | 1 | Smooth the neighbouring edge pixels before directional prediction. |
--enable-cfl-intra | 1 | Chroma-from-luma prediction. |
--select-adaptive-ds | 3 (adaptive) | Luma downsampling filter used by chroma-from-luma: 0, 1 or 2 for a fixed filter, 3 adaptive. |
--enable-mhccp | 1 | Multi-hypothesis cross-component prediction for chroma. |
--enable-palette | 1 | Palette mode, mostly useful for screen content. |
--enable-intrabc | 1 | Intra block copy: predict from already-coded areas of the same frame, mostly useful for screen content. |
--enable-intrabc-ext | 1 | Intra block copy search range: 0 default range, 1 add the local area, 2 local area only. |
--max-drl-refbvs | 0 (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)
| Option | Default | What it does |
|---|---|---|
--enable-tip | 1 | Temporal 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-refinemv | 1 | Motion-vector refinement and optical flow for TIP. |
--enable-mv-traj | 1 | Motion-vector trajectory tracking for temporal MV projection. |
--enable-ref-frame-mvs | 1 | Temporal motion-vector prediction from reference frames. Turning it off also disables TIP and MV trajectories. |
--reduced-ref-frame-mvs-mode | 0 | 1 projects temporal MVs from only one reference-frame combination. |
--enable-opfl-refine | 1 | Optical-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-refinemv | 1 | Decoder-side motion-vector refinement (RefineMV) mode. |
--enable-high-motion | 0 | Use a large motion search window for fast motion. |
--enable-global-motion | 0 | Global motion models per reference frame (camera pans, zooms). |
--enable-warped-motion | 1 | Local warped motion. Turning it off also disables the four warp options below. |
--enable-warp-causal | 1 | Warp models derived from neighbouring blocks. |
--enable-warp-delta | 1 | Warp models signalled explicitly as deltas. |
--enable-six-param-warp-delta | 1 | Allow six-parameter (affine) explicit warp models. |
--enable-warp-extend | 1 | Extend a neighbouring block’s warp model into the current block. |
--enable-skip-mode | 1 | Skip mode: compound prediction from the two nearest references with no residual or MVs signalled. |
--enable-bawp | 1 | Block adaptive weighted prediction (BAWP): per-block weight and offset on the prediction, which helps with fades and lighting changes. |
--enable-cwp | 1 | Compound weighted prediction (CWP): unequal weights for the two predictions. |
--enable-masked-comp | 1 | Masked compound (wedge and difference-weighted). Turning it off also disables the two options below. |
--enable-diff-wtd-comp | 1 | Difference-weighted compound. |
--enable-interinter-wedge | 1 | Wedge-masked compound of two inter predictions. |
--enable-imp-msk-bld | 1 | Implicit masked blending of compound predictions. |
--enable-onesided-comp | 1 | Compound prediction from two references on the same side in time. |
--enable-interintra-comp | 1 | Inter-intra compound. Turning it off also disables the two options below. |
--enable-smooth-interintra | 1 | Smooth blending for inter-intra. |
--enable-interintra-wedge | 1 | Wedge masks for inter-intra. |
--enable-adaptive-mvd | 1 | Adaptive motion-vector-difference resolution. |
--enable-flex-mvres | 1 | Flexible motion-vector precision per block. |
--enable-joint-mvd | 1 | Joint coding of the two MV differences in compound blocks. |
--enable-mvd-sign-derive | 1 | Derive MV-difference signs instead of coding them. |
--max-drl-refmvs | 0 (auto) | Number of reference MVs in the dynamic reference list per reference: 0 auto, or 2–8. |
--enable-refmvbank | 1 | Reference-MV bank: keep recent MVs as extra candidates. |
--enable-drl-reorder | 1 | Reorder the dynamic reference list: 0 never, 1 with constraints, 2 always. |
Transforms and quantization (22 options)
| Option | Default | What it does |
|---|---|---|
--enable-tx-partition | 1 | Transform partitioning inside a block. |
--reduced-tx-part-set | 0 | Search a reduced set of transform partitions. |
--enable-flip-idtx | 1 | Flipped-ADST, identity and one-dimensional transform types. |
--reduced-tx-type-set | 0 | Search a reduced set of transform types, 0–3. |
--use-intra-dct-only | 0 | Use only DCT in intra blocks. |
--use-inter-dct-only | 0 | Use only DCT in inter blocks. |
--use-intra-default-tx-only | 0 | Use only the default transform type in intra blocks. |
--enable-ist | 1 | Intra secondary transform. |
--enable-inter-ist | 1 | Secondary transform for inter blocks. |
--enable-inter-ddt | 1 | Data-driven transforms for inter blocks. |
--enable-chroma-dctonly | 0 | Use only DCT for chroma. |
--enable-cctx | 1 | Cross-chroma component transform: jointly transform the Cb and Cr residuals. Off for monochrome. |
--enable-fsc | 1 | Forward skip coding: intra residuals coded with the identity transform and their own coefficient coding. |
--enable-idtx-intra | 1 | Allow the identity transform in intra blocks when --enable-fsc=0. |
--disable-ml-transform-speed-features | 0 | Turn off the ML-based transform-search speed-ups. |
--enable-tcq | 1 (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-quant | 3 | Trellis optimisation of quantized coefficients: 0 off, 1 all stages, 2 final pass only, 3 all except the superblock RD estimate. |
--enable-parity-hiding | 1 | Hide one coefficient’s parity in the sum of the others. Not used together with TCQ mode 1. |
--enable-qm | 0 | Quantization matrices: quantize high frequencies more coarsely than low ones. |
--qm-min | 5 | Lowest quantization-matrix level the encoder may pick, 0–15. Lower levels quantize high frequencies more coarsely; 15 is flat. |
--qm-max | 9 | Highest quantization-matrix level the encoder may pick, 0–15. |
--quant-b-adapt | 0 | Use the adaptive variant of the quantizer. |
Loop filters and restoration (13 options)
| Option | Default | What it does |
|---|---|---|
--enable-deblocking | 1 | Deblocking filter. |
--sharpness | 0 | Deblocking sharpness, 0–7; higher values filter edges less. |
--enable-lf-sub-pu | 1 | Also deblock sub-block edges inside a prediction block. Off for all-intra. |
--enable-cdef | 1 | Constrained directional enhancement filter (CDEF). |
--enable-cdef-on-skip-txfm | 1 | CDEF on blocks without residual: 0 never, 1 always, 2 decided per frame. |
--enable-gdf | 1 | Guided detail filter (GDF). |
--gdf-unit-matches-sb | 0 | Make GDF units the size of a superblock. |
--enable-ccso | 1 | Cross-component sample offset (CCSO) filter. |
--ccso-unit-matches-sb | 0 | Make CCSO units the size of a superblock. |
--enable-restoration | 1 | Loop restoration. Turns off when both filter types below are disabled. |
--enable-pc-wiener | 1 | Pixel-classified Wiener restoration filter. |
--enable-wiener-nonsep | 1 | Non-separable Wiener restoration filter. |
--disable-loopfilters-across-tiles | 0 | Don’t filter across tile boundaries, so tiles can be decoded independently. |
Film grain and denoising (5 options)
| Option | Default | What it does |
|---|---|---|
--film-grain-test | 0 (off) | Apply built-in film-grain test vector 1–16. |
--film-grain-table | unset | Read film-grain parameters from a table file and signal them for decoder-side grain synthesis. |
--film-grain-block-size | 0 (16×16) | Grain synthesis block size: 0 is 16×16, 1 is 32×32. |
--denoise-noise-level | 0 (off) | Denoise the input and signal matching film-grain parameters; strength 0–50. Requires a build with denoising (on by default). |
--denoise-block-size | 32 | Block size for noise estimation in --denoise-noise-level. |
Entropy coding and cost updates (7 options)
| Option | Default | What it does |
|---|---|---|
--cdf-update-mode | 1 | Adapt the entropy-coder probabilities (CDFs): 0 never, 1 on every frame, 2 on selected frames. |
--cross-frame-cdf-init-mode | 1 | 1 initialises each frame’s CDFs from a previous frame, 0 from defaults. |
--enable-avg-cdf | 1 | Initialise CDFs from an average over frames or tiles. |
--avg-cdf-type | 1 | What --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-freq | 0 (superblock) | How often the encoder refreshes its coefficient rate estimates: 0 per superblock, 1 per superblock row, 2 per tile. |
--mode-cost-upd-freq | 0 (superblock) | How often it refreshes mode rate estimates: 0 per superblock, 1 per superblock row, 2 per tile. |
--mv-cost-upd-freq | 0 (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)
| Option | Default | What it does |
|---|---|---|
--color-primaries | unspecified | CICP primaries to signal: bt709, unspecified, bt601, bt470m, bt470bg, smpte240, film, bt2020, xyz, smpte431, smpte432, ebu3213. Signalling only; nothing is converted. |
--transfer-characteristics | unspecified | CICP transfer function: unspecified, bt709, bt470m, bt470bg, bt601, smpte240, lin, log100, log100sq10, iec61966, bt1361, srgb, bt2020-10bit, bt2020-12bit, smpte2084 (PQ), hlg, smpte428. |
--matrix-coefficients | unspecified | CICP matrix: identity, bt709, unspecified, fcc73, bt470bg, bt601, smpte240, ycgco, bt2020ncl, bt2020cl, smpte2085, chromncl, chromcl, ictcp, ipt-c2, ycgco-re, ycgco-ro. |
--chroma-sample-position | unspecified | Chroma siting for 4:2:0 and 4:2:2: unspecified, left, center, topleft, top, bottomleft, bottom. |
--timing-info | unspecified | Timing information in the bitstream: unspecified (none), constant (fixed frame rate) or model (decoder model; only without hidden frames). |
--icc | unset | Attach an ICC profile from this file as keyframe metadata. Only the first 128 bytes of the file are read. |
--scan-type-info | 0 | Signal scan type (progressive or interlaced) in the content-interpretation OBU and a metadata OBU. |
--enable-banding-metadata | 0 | Detect banding and write banding-hint metadata for decoder-side debanding. |
--frame-hash | off | Write decoded-frame hash metadata: off, raw (before grain synthesis), filmgrain (after), or both. Not shown in --help. |
--use-per-plane-frame-hash | 0 | Hash each plane separately instead of the whole frame. Not shown in --help. |
--use-short-metadata | 0 (group format) | Write metadata OBUs in the short format instead of the group format. |
--enable-cropping-window | 0 | Signal a cropping window given by the four --crop-win-* offsets. |
--crop-win-left-offset | 0 | Cropping-window left offset in pixels, 0–65535. |
--crop-win-right-offset | 0 | Cropping-window right offset in pixels, 0–65535. |
--crop-win-top-offset | 0 | Cropping-window top offset in pixels, 0–65535. |
--crop-win-bottom-offset | 0 | Cropping-window bottom offset in pixels, 0–65535. |
--target-seq-level-idx | 31 (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-mask | 0 (all Main tier) | Bit mask over the 32 possible operating points; a set bit marks that point as High tier. |
--operating-points-count | 1 | Number of operating points, 1–31. |
--enable-lcr | 0 | Write a layer configuration record (LCR) OBU. |
--enable-operating-point-sets | 0 | Write operating point set (OPS) OBUs. |
--num-operating-point-sets | 1 | Number of operating point sets to write, 1–16. |
--enable-atlas | 0 | Write an atlas segment OBU. |
--enable-mfh-obu-signaling | 0 | Signal a multi-frame header (MFH) OBU. |