aom-psy101
37c3317fd058; modified for Encode Wiki · CC BY-SA 4.0aom-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.
Building
Section titled “Building”git clone https://gitlab.com/damian101/aom-psy101.gitcmake -S aom-psy101 -B psy101_build -DCMAKE_BUILD_TYPE=Release -DENABLE_TESTS=0 -DENABLE_DOCS=0cmake --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.
Encoding
Section titled “Encoding”The fork’s defaults are already perceptually oriented, so a plain constant-quality command is a good start:
aomenc --end-usage=q --cq-level=24 --bit-depth=10 -o output.webm input.y4mAdd --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.
Defaults that differ from mainline
Section titled “Defaults that differ from mainline”| Option | psy101 | Mainline 3.15.1 |
|---|---|---|
--cpu-used | 4 (good-quality range 0–9) | 0 (0–6) |
--tune | ssim | psnr |
--enable-qm, --qm-min | 1, 0 (4 in all-intra) | 0, 5 |
--kf-min-dist | 12 | 0 |
--enable-chroma-deltaq | 1 | 0 |
--quant-b-adapt | 1 | 0 |
--enable-cdef | 0 (off) | 1 |
--arnr-strength, --arnr-maxframes | 2 (range 0–4), 15 | 5 (0–6), 7 |
--lag-in-frames maximum | 128 | 48 |
--denoise-block-size | 16 | 32 |
| 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.
Fork-specific options
Section titled “Fork-specific options”| Option | Default | What 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-bias | 0 | 0–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-tiling | 3 | 0–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-decode | 0 | 0–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-mult | 100 | Scales the SSIM-based RD multiplier used by --tune=ssim, iq, ssimulacra2 and image_perceptual_quality. |
--ssim-vmaf-rd, --vmaf-rd-resize | 0, 1 | Mix SSIM RD into VMAF RD (percent) and set the VMAF RD downscale. They need a build with -DCONFIG_TUNE_VMAF=1. |
Complete native parameter reference
Section titled “Complete native parameter reference”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)
| Option | Default | Description |
|---|---|---|
--help | — | Print the full option list and exit. |
--cfg, -c | unset | Read low-level tool settings from a key–value file in the format of libaom’s Sample.cfg. Only the first --cfg is used. |
--debug, -D | off | Leave the application version out of the WebM tags so that repeated encodes are byte-identical. |
--output, -o | required | Output file. A .ivf or .obu extension selects that format unless --webm is given; any other name gets WebM. |
--codec | av1 | Encoder to use. libaom builds contain only av1. |
--limit | 0 (all frames) | Stop after this many input frames. |
--skip | 0 | Skip this many input frames before encoding. |
--quiet, -q | off | Do not print progress. |
--verbose, -v | off | Print the encoder configuration before encoding. |
--psnr | 0 (off) | Report PSNR: 1 at the input bit depth, 2 at the stream bit depth. --psnr without a value means 1. |
--test-decode | off | Decode every frame while encoding and compare it with the encoder’s reconstruction: warn reports a mismatch, fatal stops the encode. |
--webm | on | WebM output. Requires a build with WebM I/O (CONFIG_WEBM_IO, on by default); without it the default output is raw OBU. |
--ivf | off | IVF output, the minimal frame container used by libaom’s own tools and test vectors. |
--obu | off | Raw low-overhead OBU stream (AV1 Section 5) with no container. |
--annexb | 0 (off) | Write the length-delimited Annex B bitstream format instead of Section 5 OBUs. Range 0–1. |
--q-hist | 0 (off) | After encoding, print a histogram of frame quantisers with this many buckets. |
--rate-hist | 0 (off) | After encoding, print a histogram of frame bitrates with this many buckets. |
--disable-warnings | off | Suppress the warnings about questionable settings. |
--disable-warning-prompt, -y | off | Print those warnings but do not stop to ask whether to continue. |
Usage modes and passes (12 options)
| Option | Default | Description |
|---|---|---|
--good | selected | Good-quality mode (--usage=0), the normal mode for offline video. |
--rt | off | Realtime mode (--usage=1): one pass, no lookahead, speeds 5–12, for low-latency streaming and conferencing. |
--allintra | off | All-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, -u | 0 (good) | Usage mode by number: 0 good quality, 1 realtime, 2 all-intra. Same as --good, --rt and --allintra. |
--passes, -p | 2 (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. |
--pass | all passes | Run 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). |
--fpf | in memory | First-pass statistics file. Needed when passes run as separate processes; otherwise the statistics stay in memory. |
--two-pass-output | <output>_pass2_<n>.ivf | Three-pass encoding: IVF file that receives the second (downscaled) pass. |
--second-pass-log, -spf | unset | Three-pass encoding: file in which the second pass stores its GOP and TPL decisions for the third pass. |
--two-pass-input | unset | Three-pass encoding: an already-downscaled source to read in the second pass instead of scaling the input to half size. |
--two-pass-width | 0 (half the input) | Three-pass encoding: frame width of the second pass (and of raw --two-pass-input). |
--two-pass-height | 0 (half the input) | Three-pass encoding: frame height of the second pass (and of raw --two-pass-input). |
Input format (20 options)
| Option | Default | Description |
|---|---|---|
--i420 | on for raw input | Raw input is 4:2:0 planar (I420). Y4M input takes its format from the header. |
--yv12 | off | Raw input is YV12 (4:2:0 planar with V before U). |
--nv12 | off | Raw input is NV12 (4:2:0 with interleaved U and V). |
--i422 | off | Raw input is 4:2:2 planar. |
--i444 | off | Raw input is 4:4:4 planar. |
--width, -w | from Y4M | Frame width in pixels. Required for raw input. |
--height, -h | from Y4M | Frame height in pixels. Required for raw input. |
--fps | from Y4M (raw: 30/1) | Frame rate as a fraction, e.g. 24000/1001. |
--timebase | 1/fps | Timestamp precision in fractional seconds. aomenc overwrites it with the inverse frame rate before encoding, so setting it has no effect. |
--bit-depth, -b | 8 (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-depth | from Y4M (raw: --bit-depth) | Bit depth of raw input when it differs from the stream bit depth. |
--input-chroma-subsampling-x | 0 | Horizontal chroma subsampling (0 or 1) of 12-bit raw input in profile 2. Y4M input supplies it from the header. |
--input-chroma-subsampling-y | 0 | Vertical chroma subsampling (0 or 1) of 12-bit raw input in profile 2. |
--profile | 0 (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. |
--monochrome | off | Encode luma only, with no chroma planes. |
--use-16bit-internal | off (on above 8 bit) | Use the high-bit-depth (16-bit) pipeline for an 8-bit encode. |
--validate-hbd-input | 1 (on) | Check that every high-bit-depth input sample lies within the range of the bit depth. Range 0–1. |
--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. |
--forced_max_frame_width | 0 (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_height | 0 (first frame) | Maximum frame height written to the sequence header. |
Rate control (24 options)
| Option | Default | Description |
|---|---|---|
--end-usage | vbr (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-bitrate | 256 | Target bitrate in kbit/s for vbr and cbr, and the bitrate cap in cq mode. |
--cq-level | 10 | Quality 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-q | 0 | Best (lowest) quantiser rate control may use, 0–63. In q mode --cq-level must not be below it. |
--max-q | 63 | Worst (highest) quantiser rate control may use, 0–63. |
--lossless | 0 (off) | Mathematically lossless coding (qindex 0 with the lossless transform). Range 0–1. |
--undershoot-pct | 25 (50 in realtime) | How far below the target bitrate a GOP may fall, in percent (0–100), before rate control compensates. |
--overshoot-pct | 25 (50 in realtime) | How far above the target bitrate a GOP may go, in percent (0–100), before rate control compensates. |
--buf-sz | 6000 (1000 in realtime) | Decoder buffer size in milliseconds at the target bitrate, for the rate-control buffer model. |
--buf-initial-sz | 4000 (600 in realtime) | Initial decoder buffer fill in milliseconds. |
--buf-optimal-sz | 5000 (600 in realtime) | Target decoder buffer fill in milliseconds. |
--bias-pct | 50 | Two-pass VBR bit distribution, 0–100: 0 spreads bits evenly like CBR, 100 follows frame complexity fully. Ignored in one pass. |
--minsection-pct | 0 | Lowest bitrate a GOP may get in two-pass VBR, as a percentage of the target. Ignored in one pass. |
--maxsection-pct | 2000 | Highest bitrate a GOP may get in two-pass VBR, as a percentage of the target. Ignored in one pass. |
--drop-frame | 0 (off) | Drop frames when the rate buffer falls below this fill level (percent, 0–100). Used with CBR. |
--max-intra-rate | 0 (unlimited) | Cap on keyframe size as a percentage of the average frame size (450 allows 4.5 frames’ worth). |
--max-inter-rate | 0 (unlimited) | Cap on inter-frame size as a percentage of the average frame size. |
--gf-cbr-boost | 0 (off) | Extra bits for golden frames in CBR mode, as a percentage of the average frame bitrate. |
--frame-boost | 0 (off) | Periodic quantiser boost (0–1). The setting is accepted but the AV1 encoder does not use it. |
--vbr-corpus-complexity-lap | 0 (off) | One-pass VBR with lookahead only: average complexity per macroblock of the content corpus (0–10000), used to distribute bits. |
--min-cr | 0 (off) | Minimum compression ratio per frame ×100 (850 means 8.5:1), used to stay within level limits. |
--use-fixed-qp-offsets | 0 (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-offsets | unset | Meant 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-sweep | 0 (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)
| Option | Default | Description |
|---|---|---|
--kf-min-dist | 12 | Minimum keyframe interval in frames. Set it equal to --kf-max-dist for a fixed interval. Mainline defaults to 0. |
--kf-max-dist | 9999 (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-kf | off | Place no keyframes after the first frame. Av1an sets this for each chunk. |
--enable-fwd-kf | 0 (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-dist | 0 (off) | Insert a switch frame (S-frame, a point where a player can switch between streams) every N frames. |
--sframe-mode | 1 | S-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-interval | 0 (auto) | Shortest golden-frame group (distance between alt-refs) in frames, up to 127. |
--max-gf-interval | 0 (auto) | Longest golden-frame group in frames, 2–127. |
--gf-min-pyr-height | 0 | Minimum depth of the hierarchical reference pyramid in a GF group, 0–5. |
--gf-max-pyr-height | 5 | Maximum 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)
| Option | Default | Description |
|---|---|---|
--lag-in-frames | 35 (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-ref | 1 (on) | Use alternate reference frames: hidden, temporally filtered frames that the frames around them predict from. Values above 1 are treated as 1. |
--enable-overlay | 1 (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-model | 1 (on) | Temporal dependency model (TPL): estimates how much later frames reference each block and spends bits accordingly. Required by --deltaq-mode=1. |
--enable-keyframe-filtering | 1 | Temporal filtering of keyframes: 0 off, 1 on, 2 on with an overlay frame (experimental; can break seeking in players). |
--arnr-maxframes | 15 | Number of frames, 0–15, that the alt-ref temporal filter averages; 0 or 1 disables filtering. Mainline defaults to 7. |
--arnr-strength | 2 | Alt-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)
| Option | Default | Description |
|---|---|---|
--cpu-used | 4 | Speed 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. |
--tune | ssim | Metric 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-content | default | Content 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-metric | psnr | Distortion measure inside block decisions: psnr, or qm-psnr, which weights errors by the quantisation matrices (set by --tune=iq and ssimulacra2). |
--sharpness | 0 | Bias, 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-sharpness | 0 (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-mode | 1 (2 in all-intra) | Screen-content detection: 1 standard, 2 also recognises anti-aliased text and graphics. |
--enable-low-complexity-decode | 0 (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-thresh | 0 | Motion threshold inherited from VP8/VP9. The setting is accepted but the AV1 encoder does not use it. |
--noise-sensitivity | 0 (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.json | VMAF model file used by the vmaf* tunes. Requires a build with -DCONFIG_TUNE_VMAF=1. |
Adaptive quantisation and delta-q (8 options)
| Option | Default | Description |
|---|---|---|
--deltaq-mode | 1 (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-strength | 100 | Strength of --deltaq-mode=4 and 6, in percent (0–1000). |
--delta-lf-mode | 0 (off) | Also vary the loop-filter level per superblock. Only works with a non-zero --deltaq-mode. Range 0–1. |
--aq-mode | 0 (off) | Segment-based adaptive quantisation, separate from delta-q: 0 off, 1 variance, 2 complexity, 3 cyclic refresh (realtime). |
--enable-chroma-deltaq | 1 (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-deltaq | 0 (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.txt | Rate-distribution file for --enable-rate-guide-deltaq. |
--auto-intra-tools-off | 0 (off) | All-intra with --deltaq-mode=3: let the encoder switch off intra tools that rarely pay off. |
Quantisation (5 options)
| Option | Default | Description |
|---|---|---|
--enable-qm | 1 (on) | Quantisation matrices: quantise high frequencies more coarsely than low ones. Commonly enabled for perceptual encodes. Mainline defaults to 0. |
--qm-min | 0 (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-max | 9 (10 in all-intra) | Highest QM level, 0–15. |
--quant-b-adapt | 1 (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-quant | 3 | Trellis (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)
| Option | Default | Description |
|---|---|---|
--threads, -t | 0 (one thread) | Maximum number of worker threads. aomenc stays single-threaded unless this is set. |
--row-mt | 1 (on) | Row-based multithreading inside tiles; needs --threads above 1. Range 0–1. |
--fp-mt | 0 (off) | Frame-parallel multithreading: encode several frames at once for more speed with many threads, at a small efficiency cost. Range 0–1. |
--tile-columns | 0 | Number 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-rows | 0 | Number of tile rows as log2, 0–6. A non-zero value takes precedence over --auto-tiling. |
--tile-width | unset (uniform) | Non-uniform tile widths in superblocks, comma-separated; the list repeats across the frame. Needs --tile-height as well. |
--tile-height | unset (uniform) | Non-uniform tile heights in superblocks, comma-separated; the list repeats down the frame. |
--large-scale-tile | 0 (off) | Large-scale tile coding for random access to individual tiles (light-field and VR use). IVF output only. Range 0–1. |
--num-tile-groups | 1 | Maximum number of tile groups (OBUs) per frame. --mtu-size overrides it. |
--mtu-size | 0 (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)
| Option | Default | Description |
|---|---|---|
--sb-size | dynamic | Superblock 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-partitions | 1 (on) | Rectangular partitions (horizontal and vertical halves). |
--enable-ab-partitions | 1 (on) | AB partitions: a split into one half and two quarters. |
--enable-1to4-partitions | 1 (on) | 1:4 and 4:1 partitions (four horizontal or vertical strips). |
--min-partition-size | 4 | Smallest 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-size | 128 | Largest 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)
| Option | Default | Description |
|---|---|---|
--enable-directional-intra | 1 (on) | Directional (angular) intra modes. |
--enable-diagonal-intra | 1 (on) | The diagonal subset of directional modes (D45 to D203). No effect when directional modes are off. |
--enable-angle-delta | 1 (on) | Fine angle offsets (up to ±3 steps of 3°) on directional modes. |
--enable-intra-edge-filter | 1 (on) | Smoothing and upsampling of the reference edge used for directional prediction. |
--enable-smooth-intra | 1 (on) | Smooth, smooth-horizontal and smooth-vertical intra modes, which interpolate between edges. |
--enable-paeth-intra | 1 (on) | Paeth intra predictor, which picks the left, top or top-left neighbour per pixel. |
--enable-filter-intra | 1 (on) | Filter-intra modes: recursive filtered prediction in 4×2 cells, for smooth texture. |
--enable-cfl-intra | 1 (on) | Chroma from luma: chroma predicted from the reconstructed luma. |
--enable-palette | 1 (on) | Palette mode, which codes a block as up to eight colours. Used only when screen-content tools are active. |
--enable-intrabc | 1 (on) | Intra block copy from an already coded area of the same frame. Used only in intra frames with screen-content tools. |
--force-video-mode | 0 (off) | Use video coding settings even when only one frame is encoded, instead of still-picture settings. |
Inter prediction (16 options)
| Option | Default | Description |
|---|---|---|
--max-reference-frames | 7 | Maximum number of reference frames searched per frame, 3–7. |
--reduced-reference-set | 0 (off) | Search a reduced set of single and compound references, which is faster. |
--enable-order-hint | 1 (on) | Frame order hints. Distance-weighted compound, temporal motion-vector projection and reference sign bias depend on them. |
--enable-ref-frame-mvs | 1 (on) | Temporal motion-vector prediction from the motion fields of reference frames. |
--enable-dual-filter | 1 (on) | Separate interpolation filters for horizontal and vertical sub-pixel motion. |
--enable-global-motion | 1 (on) | Frame-level global motion models for camera pans, zooms and rotation. |
--enable-warped-motion | 1 (on) | Local warped motion: a per-block affine model derived from neighbouring motion vectors. |
--enable-obmc | 1 (on) | Overlapped block motion compensation: blends in predictions made with neighbouring blocks’ motion to soften block edges. |
--enable-dist-wtd-comp | 1 (on) | Distance-weighted compound prediction, weighting two references by their temporal distance. Off when order hints are off. |
--enable-onesided-comp | 1 (on) | Compound prediction from two references on the same side (both past or both future). |
--enable-masked-comp | 1 (on) | Masked compound prediction (wedge and difference-weighted); 0 turns both off. |
--enable-diff-wtd-comp | 1 (on) | Difference-weighted compound, with a mask derived from the difference between the two predictions. |
--enable-interinter-wedge | 1 (on) | Wedge-shaped masks for compound prediction from two references. |
--enable-interintra-comp | 1 (on) | Inter-intra prediction: an inter prediction blended with an intra prediction. |
--enable-smooth-interintra | 1 (on) | Smooth (gradual) blending for inter-intra prediction. |
--enable-interintra-wedge | 1 (on) | Wedge-shaped masks for inter-intra prediction. |
Transforms (8 options)
| Option | Default | Description |
|---|---|---|
--enable-tx64 | 1 (on) | 64-point transforms for blocks of 64 pixels and larger. --tune-content=psy101 turns it off. |
--enable-flip-idtx | 1 (on) | Extended transform types: flipped ADST, identity and one-dimensional (horizontal or vertical) transforms. |
--enable-rect-tx | 1 (on) | Rectangular transforms. They need rectangular partitions. |
--enable-tx-size-search | 1 (on) | Search the transform size per block. With 0 each block uses its largest possible transform. |
--reduced-tx-type-set | 0 (off) | Search a reduced set of transform types, which is faster. |
--use-intra-dct-only | 0 (off) | Use only the DCT for intra blocks. |
--use-inter-dct-only | 0 (off) | Use only the DCT for inter blocks. |
--use-intra-default-tx-only | 0 (off) | Use only the default transform type of each intra mode. |
Loop filters (3 options)
| Option | Default | Description |
|---|---|---|
--loopfilter-control | 1 (all frames) | Deblocking filter: 0 off, 1 all frames, 2 skip non-reference frames, 3 skip low-motion frames. |
--enable-cdef | 0 (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-restoration | 1 (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)
| Option | Default | Description |
|---|---|---|
--resize-mode | 0 (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-denominator | 8 | Resize factor 8/N for non-key frames, N = 8–16 (16 halves both dimensions). |
--resize-kf-denominator | 8 | Resize factor 8/N for keyframes, N = 8–16. |
--superres-mode | 0 (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-denominator | 8 | Horizontal super-resolution factor 8/N for non-key frames, N = 8–16. |
--superres-kf-denominator | 8 | Horizontal super-resolution factor 8/N for keyframes, N = 8–16. |
--superres-qthresh | 63 | Mode 3: use super-resolution on non-key frames whose quantiser (1–63) exceeds this. |
--superres-kf-qthresh | 32 | Mode 3: the same threshold for keyframes. |
Film grain and denoising (5 options)
| Option | Default | Description |
|---|---|---|
--denoise-noise-level | 0 (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-size | 16 | Block size in pixels for the grain estimator. Mainline defaults to 32. |
--enable-dnl-denoising | 1 (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-table | unset | Read film-grain parameters from a table file, such as a photon-noise table from Av1an or grav1synth, instead of estimating them. |
--film-grain-test | 0 (off) | Use one of libaom’s 16 built-in film-grain test parameter sets (1–16). |
Entropy coding and cost updates (5 options)
| Option | Default | Description |
|---|---|---|
--cdf-update-mode | 1 | Adaptation of the entropy-coding probabilities (CDFs): 0 never, 1 every frame, 2 selectively. |
--coeff-cost-upd-freq | 0 (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-freq | 0 (superblock) | Refresh interval for mode rate estimates, with the same values. |
--mv-cost-upd-freq | 0 (superblock) | Refresh interval for motion-vector rate estimates, with the same values. |
--dv-cost-upd-freq | 0 (superblock) | Refresh interval for intra-block-copy vector rate estimates, with the same values. |
Signalling, levels and error resilience (12 options)
| Option | Default | Description |
|---|---|---|
--color-primaries | unspecified | Colour 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-characteristics | unspecified | Transfer 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-coefficients | unspecified | Matrix 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-position | unknown | 4:2:0 chroma siting: unknown, vertical (left, as MPEG-2) or colocated (top-left, as BT.2020). |
--timing-info | unspecified | Timing information in the sequence header: unspecified, constant (fixed frame rate) or model (decoder model; not with hidden frames or super-resolution). |
--target-seq-level-idx | 31 (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-conformance | 0 (off) | Stop with an error if the stream cannot meet --target-seq-level-idx. |
--set-tier-mask | 0 (Main) | Bit mask of operating points that use the High tier instead of Main (bit n is point n). |
--full-still-picture-hdr | off | For single-frame encodes, write the full sequence header instead of the reduced still-picture header. |
--error-resilient | 0 (off) | Error-resilient frames, which stay decodable when references are lost. Range 0–1. |
--global-error-resilient | 0 (off) | Same effect as --error-resilient, set through the generic encoder configuration (the two are combined). |
--frame-parallel | 0 (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)
| Option | Default | Description |
|---|---|---|
--auto-tiling | 3 | Automatic 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-decode | 0 (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-bias | 0 (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-mult | 100 | 0–1000 (%). Scales the SSIM-based RD multiplier used by --tune=ssim, iq, ssimulacra2 and image_perceptual_quality. |
--ssim-vmaf-rd | 0 | Share 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-resize | 1 (half) | Downscale for VMAF RD calculations: 0 full resolution, 1 half, 2 quarter, 3 eighth. Requires a build with -DCONFIG_TUNE_VMAF=1. |
--vmaf-preprocessing | 0 (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-quantization | 0 (off) | Force the VMAF tunes’ quantiser adjustment whatever the tune. Range 0–1. Requires a build with -DCONFIG_TUNE_VMAF=1. |