SVT-AV1-Essential
A no-nonsense SVT-AV1 encoder fork with sensible defaults and Quality of Life improvements.
SVT-AV1-Essential is a fork of SVT-AV1 by nekotrix (Trix) that aims for the best out-of-the-box result for ordinary users. It changes many defaults toward perceptual quality and consistency, adds simple --speed and --quality presets, and borrows psychovisual and HDR features from SVT-AV1-PSY and SVT-AV1-HDR. It targets normal-latency encoding at common resolutions; it does not support real-time/low-delay use and does not focus on SD or above-4K content.
The current release is v4.0.1-Essential (March 14, 2026), built on mainline SVT-AV1 4.0.1. Essential only releases on top of official mainline releases, and no Essential build has followed mainline 4.1 or 4.2 yet; the last change to the repository (June 8, 2026) was a documentation update. Mainline features added in 4.1 and 4.2 are therefore missing.
Downloads and builds
Section titled “Downloads and builds”The release page has SvtAv1EncApp for Linux and Windows (Generic, and Optimized for x86-64-v3 CPUs) and macOS arm64. These release binaries include WebM output (the default; --webm 0 writes IVF) but are built without FFMS2 input, Dolby Vision or HDR10+, so they take only Y4M or raw YUV.
nekotrix also maintains FFmpeg and HandBrake builds and the AUR package; StaxRip also ships it. To build it yourself (Clang recommended):
git clone https://github.com/nekotrix/SVT-AV1-Essentialcd SVT-AV1-Essential/Build/linux./build.sh --native --static --release --enable-ltoAdd use-ffms2, use-webm-io, enable-dovi or enable-hdr10plus to the build.sh arguments for those features; a plain build has none of them. FFMS2, libdovi and libhdr10plus must be installed first; WebM support is bundled.
Starting command
Section titled “Starting command”With no options, Essential picks its own speed and quality from the resolution, so the shortest useful command is just input and output. From FFmpeg, pipe 10-bit Y4M (-strict -1 is required because 10-bit Y4M is outside the official Y4M spec):
ffmpeg -i input.mkv -strict -1 -f yuv4mpegpipe -pix_fmt yuv420p10le - | SvtAv1EncApp -i - --speed slow --quality medium -b output.webmY4M carries no colour description, so add the source’s colour flags (for BT.709 SDR: --color-primaries bt709 --transfer-characteristics bt709 --matrix-coefficients bt709). A build with FFMS2 reads MKV/MP4 directly, converts to 10-bit 4:2:0 and carries colour and HDR10 metadata over automatically; a build with WebM I/O writes WebM by default (--webm 0 returns to IVF). If you omit -b, the output is named after the input.
Adjust --quality until the size or quality is right, then choose the slowest --speed you can afford. Essential’s defaults are much slower than mainline’s; upstream suggests a faster --speed if that is a problem, which it says still looks better than mainline at a similar speed.
--speed and --quality
Section titled “--speed and --quality”| —speed | Preset |
|---|---|
slower | 2 |
slow | 4 |
medium | 5 |
fast | 6 |
faster | 8 |
| —quality | CRF up to 1080p | CRF above 1080p |
|---|---|---|
higher | 20 | 25 |
high | 25 | 30 |
medium | 30 | 35 |
low | 35 | 40 |
lower | 40 | 45 |
“Up to 1080p” means at most 1920 × 1080 pixels per frame. If you set neither option, the encoder uses preset 4 and CRF 30 up to 1080p, and preset 5 and CRF 35 above. --speed overrides --preset, and --quality overrides --crf/--qp; set --preset or --crf without the corresponding layer if you want an exact value.
How defaults differ from mainline
Section titled “How defaults differ from mainline”| Setting | Essential 4.0.1 | Mainline 4.2 |
|---|---|---|
| Preset / CRF | 4 / 30 (≤ 1080p), 5 / 35 (above) | 8 / 35 |
| Output bit depth | always 10-bit, with high-bit-depth mode decision | follows the input |
--scd | 1 (keyframes on scene changes) | 0 |
--auto-tiling | 1 | not available |
--enable-dlf | 2 | 1 |
--enable-variance-boost / strength / octile | 1 / 1 / 4 | 0 / 2 / 5 |
--tf-strength | 1, and no temporal filtering on keyframes | 3 |
--luminance-qp-bias | 10 | 0 |
--sharpness | 1 | 0 |
--qp-scale-compress-strength | 1 | 0 |
--enable-qm / --qm-min / --chroma-qm-min | 1 / 2 / 4 | 0 / 8 / 8 |
--ac-bias | 0.25 | 0.0 |
--enable-dg | 0 | 1 |
--adaptive-film-grain | 0 | 1 |
--tune accepts 0 VQ, 1 PSNR (default), 2 SSIM, 3 IQ and 4 MS-SSIM; mainline 4.2’s tune 5 (VMAF) is not available. The fork also fixes a chroma-quality regression in the restoration filter that appeared in mainline 3.x.
Fork-specific options
Section titled “Fork-specific options”--help shows a short list; --full-help shows everything. Mainline options are documented on the SVT-AV1 page.
| Option | Range (default) | What it does |
|---|---|---|
--speed, --quality | see above | Resolution-aware preset and CRF layers. |
--zones | start,end,crf;… | Different CRF/QP for inclusive frame ranges in CRF/CQP mode, e.g. --zones 0,100,20;101,200,40. Quarter steps are allowed. |
--scd | 0–1 (1) | Keyframes on scene changes, tuned for accuracy. |
--keyint | (−2) | −2 places periodic keyframes about every 5 seconds; −1 or 0 disables periodic keyframes. Upstream suggests multiples of 32 plus 1 (225, 257) and no more than 300 for hardware decoders. |
--min-keyint | −1, 0+ (−1) | Minimum frames between scene-cut keyframes; −1 is a multiple of the mini-GOP, 0 removes the limit (not recommended). |
--auto-tiling | 0–1 (1) | Picks tiles for the resolution (crop-aware) to speed up decoding with minimal efficiency loss. |
--enable-tf 3 | 0–3 (1) | Strong temporal filtering on all frames, usable as a fast built-in denoiser; adjust with --tf-strength. |
--enable-dlf 3 | 0–3 (2) | Most accurate deblocking at every preset; slow at fast presets. |
--enable-alt-cdef | 0–3 (0) | Weaker deringing for better fidelity; 2 and 3 also force the best CDEF search. |
--enable-alt-dlf | 0–3 (0) | Weaker deblocking for better fidelity; pair with --enable-dlf 3. |
--distortion-bias-preset | 0–4 (0) | Bundles of settings that trade higher distortion and larger files for detail retention, 1 mild to 3 strong. 4 imitates SVT-AV1-HDR’s film-grain tune. |
--low-memory | 0–1 (0) | Substantially lower RAM use at some cost in speed and quality; most effective in CRF/CQP random-access mode. |
--photon-noise | 0–100000 (0) | Generates a photon-noise grain table at the given ISO; --photon-noise-chroma 1 adds chroma grain. |
--pin | 0–cores (0) | Pins the encoder to the first N threads (removed from mainline in 4.0). |
--variance-boost-curve 3 | 0–3 | PQ-optimized curve from SVT-AV1-HDR, selected automatically for PQ content when variance boost is on. |
--tx-bias, --complex-hvs, --sharp-tx, --noise-norm-strength, --noise-adaptive-filtering | Psychovisual options from SVT-AV1-PSY/HDR. All off by default except --noise-adaptive-filtering 2 (tune behaviour). | |
--webm | WebM output with settings and metadata written to the file (WebM I/O builds only). | |
--dolby-vision-rpu, --hdr10plus-json | file | Dynamic HDR metadata (builds with enable-dovi / enable-hdr10plus only). |
--hide-banner, --full-help | Hide the detailed settings banner; print every option. |
Auto-Boost-Essential is a companion script by the same author. It uses SSIMULACRA2 to decide which scenes need more or fewer bits, adjusts CRF per scene for more consistent quality, and runs the final encode for you.
Complete native parameter reference
Section titled “Complete native parameter reference”Every option SVT-AV1-Essential v4.0.1-Essential accepts, grouped by purpose; aliases share a row. --help lists only the common ones; --full-help shows the rest. Defaults marked by resolution are decided from the input size.
Input, output and application (21 options)
| Option | Default | Description |
|---|---|---|
--help | — | Print the main options and exit; --full-help lists everything. |
--full-help | — | Print every option and exit. |
--version | — | Print the library version and exit. |
--input, -i | required | Input file: Y4M or raw YUV, or (in builds with FFMS2) other containers such as MKV and MP4, which are decoded and converted to 10-bit. - reads from a pipe. |
--webm | on in WebM-enabled builds | Write WebM instead of IVF; the default when the build includes WebM output. |
--output, -b | from the input name | Output file, IVF or WebM; - or stdout writes to a pipe. Without it, the encoder writes the input name plus _essential and the matching extension. |
--progress | 2 | Progress output: 0 none, 1 basic, 2 detailed. |
--hide-banner | 0 | Don’t print the encoder-settings banner. |
--frames | 0 (all) | Number of frames to encode; 0 encodes to the end of the input. A count longer than the input loops back to the start. |
--skip | 0 | Skip this many frames at the start of the input. |
--allow-mmap-file | 1 | Memory-map regular input files instead of reading them (0 or 1); the speed difference depends on the platform. |
--config, -c | none | Read options from a configuration file of Name : value lines (the config-file names, e.g. EncoderMode). |
--errlog | stderr | Write warnings and errors to this file. |
--recon, -o | none | Write the reconstructed (decoded) frames as raw YUV, for debugging or metrics. |
--stat-file | none | Write per-frame PSNR and SSIM to this file; needs --enable-stat-report 1. |
--no-progress | 0 | --no-progress 1 is the same as --progress 0. |
--svtav1-params | none | Colon-separated key=value list using option names without --, e.g. tune=0:enable-variance-boost=1. Handy when a wrapper passes a single parameter string. |
--nb | -1 (off) | Preload this many frames into memory and encode only those, for benchmarking without I/O. |
--inj | 0 | Feed frames to the encoder at a fixed rate (--inj-frm-rt) to simulate live input. |
--inj-frm-rt | 60 | Injection rate in frames per second (0–240) for --inj 1. |
--enable-stat-report | 0 | Compute PSNR and SSIM against the source and print a summary at the end; per-frame values go to --stat-file. Slows encoding. |
Source format, profile and level (11 options)
| Option | Default | Description |
|---|---|---|
--width, -w | 0 (from Y4M) | Frame width in pixels, 4–16384. Required for raw YUV; Y4M headers supply it. |
--height, -h | 0 (from Y4M) | Frame height in pixels, 4–8704. Required for raw YUV. |
--fps-num | 60000 | Frame-rate numerator for raw input; Y4M headers override it. |
--fps-denom | 1000 | Frame-rate denominator; the default pair means 60 fps. |
--forced-max-frame-width | 0 (input width) | Maximum frame width written to the sequence header (4–16384), for streams whose frame size changes later. |
--forced-max-frame-height | 0 (input height) | Maximum frame height written to the sequence header (4–8704). |
--color-format | 1 (4:2:0) | Chroma format of raw input: 0 4:0:0, 1 4:2:0, 2 4:2:2, 3 4:4:4. Mainline encodes 4:2:0 only. |
--profile | 0 (main) | AV1 profile: 0 main, 1 high, 2 professional. Main covers 8- and 10-bit 4:2:0, which is all mainline can encode. |
--level | 0 (auto) | AV1 level to signal, 2.0–7.3 (e.g. 5.1); 0 derives it from the input. |
--input-depth | 10 | Essential encodes 10-bit only and rejects 8-bit Y4M or YUV input: convert first (-pix_fmt yuv420p10le). FFMS2 inputs are converted automatically. |
--tier | 0 (main) | AV1 tier: 0 main, 1 high (higher bitrate limits for levels 4.0 and up). Accepted but not listed in --help. |
Preset, tune and threading (8 options)
| Option | Default | Description |
|---|---|---|
--speed | auto (slow up to 1080p, medium above) | Speed preset that overrides --preset: slower (preset 2), slow (4), medium (5), fast (6), faster (8). |
--lp | 0 (auto) | Level of parallelism, 1–6: higher levels create more threads and picture buffers and use more memory. 0 picks a level from the core count. It is not a thread count. |
--fast-decode | 0 | Decoder-speed optimizations, 0–2 (2 decodes fastest) at a small efficiency cost. Developed with --tune 1; the encoder warns when it is combined with --tune 0. Try it before tiles. |
--tune | 1 (PSNR) | 0 VQ, 1 PSNR, 2 SSIM, 3 IQ (still images), 4 MS-SSIM. |
--low-memory | 0 | Settings that cut RAM use a lot, at some speed and quality cost; most effective in CRF/CQP random-access mode. |
--preset | auto (4 up to 1080p, 5 above) | Numeric preset, −1–13, used when --speed is not set; lower is slower and more efficient. Above 11 runs as 11 (12 for RTC and all-intra), and 8K inputs need preset 5 or faster. |
--asm | max | Highest instruction set to use. x86: c, mmx, sse … sse4_2, avx, avx2, avx512, max; Arm: c, neon, crc32, neon_dotprod, neon_i8mm, sve, sve2, max. Lower it only to debug or compare. |
--pin | 0 (off) | Pin the encoder to the first N logical cores; 0 disables pinning. |
Rate control and passes (22 options)
| Option | Default | Description |
|---|---|---|
--quality | auto (medium) | Quality preset that sets the CRF: higher 20, high 25, medium 30, low 35, lower 40 up to 1080p, each 5 higher above 1080p. Overrides --crf/--qp. |
--mbr | 0 (off) | Maximum bitrate for capped CRF, in kbps (same suffixes). Dropped with a warning when TPL is off: --aq-mode 0, all-intra or low-delay. |
--mbr-overshoot-pct | 0 | Allowed overshoot of --mbr in capped CRF, in percent (0–100). |
--zones | none | Per-range CRF/CQP overrides as start,end,crf;start,end,crf;…, e.g. 0,100,20;101,200,40. |
--rc | 0 | Rate-control mode: 0 CRF (or CQP with --aq-mode 0), 1 VBR, 2 CBR, both with --tbr. VBR needs random access and CBR needs low delay (--pred-struct 1). |
--qp, -q | 30 (35 above 1080p) | Base QP, 1–63, used when --quality is not set: the fixed QP in CQP and the starting point otherwise. |
--crf | 30 (35 above 1080p) | Constant rate factor, 1–70 in 0.25 steps, used when --quality is not set; lower is higher quality and larger. |
--tbr | 2000 kbps | Target bitrate for VBR and CBR in kbps (1–100000); b, k and m suffixes are accepted, e.g. --tbr 3.5m. |
--max-qp | 63 | Highest QP rate control may use, 0–63; mainly for VBR and CBR. |
--min-qp | auto (0 for CRF, 4 for VBR/CBR) | Lowest QP rate control may use, 0–63; mainly for VBR and CBR. |
--undershoot-pct | auto (50 for VBR, 25 for CBR) | How far below the target VBR/CBR may undershoot, in percent (0–100). |
--overshoot-pct | auto (25) | How far above the target VBR/CBR may overshoot, in percent (0–100). |
--gop-constraint-rc | 0 | Make VBR hit the target within each GOP instead of over the whole clip; useful for chunked or segmented encoding. |
--buf-sz | 1000 | CBR decoder buffer size in milliseconds (20–10000). |
--buf-initial-sz | 600 | CBR initial buffer level in milliseconds (20–10000); must be below --buf-sz. |
--buf-optimal-sz | 600 | CBR target buffer level in milliseconds (20–10000). |
--recode-loop | 4 (preset-based) | Re-encode frames that miss the rate target (VBR, capped CRF and RTC CBR only): 0 off, 1 key frames and oversized frames, 2 key/alt-ref/golden frames, 3 all frames, 4 auto (level 2 for capped CRF and presets ≤3, otherwise 1). |
--minsection-pct | 0 | VBR: lowest bitrate a GOP may get, as a percentage of the target (0–100). |
--maxsection-pct | 2000 | VBR: highest bitrate a GOP may get, as a percentage of the target (0–10000). |
--pass | 0 | Run one pass of a two-pass encode: 0 single pass, 1 first pass, 2 second pass (VBR only). Use the same --stats file in both. |
--stats | svtav1_2pass.log | Statistics file written by the first pass and read by the second. |
--passes | 1 | --passes 2 runs both passes of a VBR two-pass encode in one command. |
Quantization offsets and matrices (20 options)
| Option | Default | Description |
|---|---|---|
--enable-qm | 1 | Use quantization matrices, which quantize high frequencies more coarsely than low ones. |
--qm-min | 2 | Lowest (steepest) luma QM level the encoder may pick, 0–15; 15 is flat. |
--qm-max | 15 | Highest (flattest) luma QM level, 0–15. |
--chroma-qm-min | 4 | Lowest chroma QM level, 0–15. |
--chroma-qm-max | 15 | Highest chroma QM level, 0–15. |
--use-q-file | 0 | Take per-frame QPs from --qpfile instead of the encoder’s own assignment. |
--qpfile | none | File with one QP per line, one line per frame, for --use-q-file 1. |
--aq-mode | 2 | Adaptive quantization: 0 off (constant QP), 1 variance-based segments, 2 delta-q from TPL prediction efficiency. |
--use-fixed-qindex-offsets | 0 | Override per-layer QP assignment: 1 use the base q-index plus --qindex-offsets and --key-frame-qindex-offset, 2 add those offsets on top of the encoder’s own assignment. |
--key-frame-qindex-offset | 0 | Q-index offset for key frames, −64–63, used with --use-fixed-qindex-offsets. Q-index runs 0–255, about four steps per QP. |
--key-frame-chroma-qindex-offset | 0 | Chroma q-index offset for key frames, −64–63. |
--qindex-offsets | 0 per layer | Comma-separated luma q-index offsets, one per temporal layer (each −64–63), for --use-fixed-qindex-offsets. |
--chroma-qindex-offsets | 0 per layer | Comma-separated chroma q-index offsets, one per temporal layer (each −64–63). |
--luma-y-dc-qindex-offset | 0 | Luma DC quantizer offset in q-index steps (−64–63); positive values quantize DC more coarsely. |
--chroma-u-dc-qindex-offset | 0 | Cb DC quantizer offset in q-index steps (−64–63). |
--chroma-u-ac-qindex-offset | 0 | Cb AC quantizer offset in q-index steps (−64–63). |
--chroma-v-dc-qindex-offset | 0 | Cr DC quantizer offset in q-index steps (−64–63). |
--chroma-v-ac-qindex-offset | 0 | Cr AC quantizer offset in q-index steps (−64–63). |
--lambda-scale-factors | 128 for every frame type | Comma-separated RD lambda multipliers per frame-update type, in units of 1/128 (128 = 1.0). A research control. |
--roi-map-file | none | Region-of-interest file giving per-block QP offsets for chosen frames. |
GOP structure and keyframes (13 options)
| Option | Default | Description |
|---|---|---|
--keyint | -2 (about 5 s) | Maximum keyframe interval in frames, or seconds with an s suffix. −2 is about 5 seconds (10 mini-GOPs); −1 or 0 means no periodic keyframes. Upstream suggests a multiple of 32 plus 1 (225, 257) and no more than about 300 for hardware decoders. |
--min-keyint | -1 (auto) | Minimum distance between scene-change keyframes: −1 a multiple of the mini-GOP length, 0 no limit (not recommended). |
--scd | 1 | Scene-change detection: insert keyframes at scene cuts (0 or 1). |
--hierarchical-levels | auto (5; 4 above preset 12) | Temporal layers above the base layer, 0–5; 5 gives 32-frame mini-GOPs. Fewer levels lower latency and memory use. |
--startup-mg-size | 0 (off) | Use a smaller mini-GOP right after each keyframe: 2, 3 or 4 temporal layers (4, 8 or 16 frames). CRF only, and not above --hierarchical-levels. |
--irefresh-type | 2 (closed GOP) | Keyframe type at each interval: 1 forward keyframe (open GOP), 2 key frame (closed GOP). Open GOP is slightly more efficient; closed GOP makes every keyframe a clean seek point. |
--lookahead | -1 (auto) | Frames of extra look-ahead for rate control and TPL, 0–32, beyond the mini-GOP and temporal-filter window. |
--pred-struct | 2 (random access) | Prediction structure: 1 low delay, 2 random access (normal for files). 0 all-intra is also accepted. |
--rtc | 0 | Real-time mode: fast low-delay settings; forces --pred-struct 1. |
--force-key-frames | none | Comma-separated keyframe positions: a number followed by f for frames or s for seconds (e.g. 0f,120f,30.5s). |
--startup-qp-offset | 0 | QP offset (−63–63) for that startup mini-GOP. |
--enable-dg | 0 | Dynamic mini-GOP: adapt the hierarchical structure to the content. |
--intra-period | -2 | Deprecated form of --keyint, counted as keyint − 1. Not listed in --help. |
Filters and coding tools (17 options)
| Option | Default | Description |
|---|---|---|
--tf-strength | 1 | Alt-ref temporal filter strength, 0–4; each step doubles it. The default 1 is 4× weaker than mainline’s 3. |
--auto-tiling | 1 | Choose tiles from the resolution to speed up decoding with little efficiency loss; manual tile options override it. |
--tile-rows | auto | Tile rows as log2 (0–6; 2 means 4 rows). Tiles help decoder threading at a small efficiency cost; the encoder does not need them for its own threading. |
--tile-columns | auto | Tile columns as log2 (0–4); at most 128 tiles in total. |
--enable-dlf | 2 | Deblocking filter: 0 off, 1 on, 2 more accurate, 3 most accurate in every case (slow at fast presets). |
--enable-cdef | auto (on) | CDEF deringing filter, 0 or 1. |
--enable-restoration | auto (on) | Loop restoration filter (Wiener and self-guided), 0 or 1. |
--enable-tf | 1 | Temporal filtering: 0 off, 1 alt-refs, 2 adaptive strength per 64×64 block, 3 strong filtering on all frames, a built-in temporal denoiser (adjust with --tf-strength). |
--enable-overlays | 0 | Insert overlay frames after filtered alt-refs as extra references. Not supported with low delay or multi-pass. |
--scm | 2 (detect) | Screen-content tools (palette, intra block copy): 0 off, 1 on, 2 detect per frame, 3 detect with anti-aliasing awareness. |
--lossless | 0 | Lossless coding. |
--avif | 0 | Still-picture mode for AVIF and single images: better efficiency and less memory. |
--enable-alt-cdef | 0 | Alternative CDEF trade-offs, 0–3: weaker deringing and better fidelity; 2 and 3 also force the best CDEF search, at a speed cost. |
--enable-alt-dlf | 0 | Alternative deblocking trade-offs, 0–3: weaker deblocking and better fidelity; pair with --enable-dlf 3. |
--enable-mfmv | -1 (auto) | Motion-field motion vector projection, 0 or 1; −1 lets the preset decide. |
--max-tx-size | 64 | Largest transform size, 32 or 64. 32 can help detail at high-fidelity CRFs. |
--noise-adaptive-filtering | 2 | Noise-adaptive filtering turns CDEF and restoration off on noisy frames: 0 off, 1 both, 2 tune default, 3 CDEF only, 4 restoration only. |
Super-resolution, resizing and switch frames (16 options)
| Option | Default | Description |
|---|---|---|
--superres-mode | 0 (off) | Super-resolution (code at reduced width, upscale in the decoder): 0 off, 1 fixed, 2 random, 3 by QP threshold, 4 auto. Not available with two-pass. |
--superres-denom | 8 | Mode 1 scale: width × 8/denom, 8–16 (8 none, 16 half width). |
--superres-kf-denom | 8 | Mode 1 scale for key frames, 8–16. |
--superres-qthres | 43 | Mode 3: frames with QP above this (0–63) use super-resolution. |
--superres-kf-qthres | 43 | Mode 3 threshold for key frames, 0–63. |
--sframe-dist | 0 (off) | Insert a switch frame every N frames; S-frames let a decoder switch between streams. |
--sframe-mode | 2 | S-frame placement: 1 only if that frame is an alt-ref, 2 the next alt-ref, 3 exactly at --sframe-posi (mini-GOP adjusted), 4 the same in decode order. |
--sframe-posi | none | Comma-separated frame numbers (0-based) for S-frames in modes 3 and 4. |
--sframe-qp | none | QP for each S-frame (1–63), comma-separated; a single value applies to all. |
--sframe-qp-offset | none | QP offset for each S-frame (−63–63), comma-separated; a single value applies to all. |
--resize-mode | 0 (off) | Reference scaling (resize frames inside the codec loop): 0 off, 1 fixed, 2 random, 3 dynamic, 4 per-event list. |
--resize-denom | 8 | Mode 1 scale 8/denom, 8–16. |
--resize-kf-denom | 8 | Mode 1 scale for key frames, 8–16. |
--frame-resz-events | none | Mode 4: comma-separated frame numbers (0-based) where a new scale starts. |
--frame-resz-kf-denoms | none | Mode 4: key-frame denominators (8–16), one per event. |
--frame-resz-denoms | none | Mode 4: denominators (8–16), one per event. |
Film grain (6 options)
| Option | Default | Description |
|---|---|---|
--film-grain | 0 (off) | Film-grain synthesis, 1–50: estimate grain from the source and signal it for the decoder to add back. Saves a lot of bitrate on grainy sources; the encoder warns about the compute cost above preset 6. |
--film-grain-denoise | 0 | 1 also codes a denoised picture at the --film-grain strength; 0 codes the source picture and only adds the grain parameters. |
--fgs-table | none | Use a pre-made grain table file (aomenc --film-grain-table format) instead of estimating grain. |
--photon-noise | 0 (off) | Add synthetic photon (sensor) noise through a generated grain table, as an ISO value 1–100000. |
--photon-noise-chroma | 0 | Also add chroma noise with --photon-noise. |
--adaptive-film-grain | 0 | Choose the grain-estimation block size from the resolution, which reduces visible repeating grain patterns. |
Colour and HDR metadata (10 options)
| Option | Default | Description |
|---|---|---|
--color-help | — | Print the colour-metadata reference (primaries, transfer and matrix names, mastering-display syntax) and exit. |
--color-primaries | 2 (unspecified) | Colour primaries, 0–12 or 22, by number or name (bt709, bt2020…); see --color-help. Signalling only: pixels are not converted. |
--transfer-characteristics | 2 (unspecified) | Transfer function, 0–22 (bt709, smpte2084 for PQ, hlg…). |
--matrix-coefficients | 2 (unspecified) | YUV matrix, 0–14 (bt709, bt2020-ncl…). 0 (identity) needs 4:4:4. |
--color-range | 0 (limited) | 0 limited (studio) range, 1 full range. |
--chroma-sample-position | unknown | Chroma siting: unknown, vertical/left or colocated/topleft. |
--mastering-display | none | SMPTE ST 2086 mastering display as G(x,y)B(x,y)R(x,y)WP(x,y)L(max,min): CIE xy chromaticities and luminance in cd/m². |
--content-light | none | Content light level as MaxCLL,MaxFALL in cd/m², e.g. 1000,400. |
--dolby-vision-rpu | none | Dolby Vision RPU file to embed, frame-aligned with the encode. Requires a build with libdovi. |
--hdr10plus-json | none | HDR10+ JSON metadata file to embed. Requires a build with hdr10plus support. |
Psychovisual tuning (13 options)
| Option | Default | Description |
|---|---|---|
--luminance-qp-bias | 10 | Spend more bits on dark frames: lowers frame QP based on average luma, strength 0–100. |
--sharpness | 1 | Bias deblocking and RD decisions toward sharpness (positive) or smoothness (negative), −7–7. |
--qp-scale-compress-strength | 1 | Compress QP differences between temporal layers, 0–8, for steadier quality within a mini-GOP; upstream advises staying at 3 or below. |
--variance-boost-strength | 1 | Variance Boost strength: 1 mild, 2 gentle, 3 medium, 4 aggressive. Upstream suggests 1 for smooth animation and 3 for stills or very contrasty films. |
--variance-octile | 4 | How much of a superblock must be low-contrast before it is boosted, 1–8 (1 boosts readily, 8 only uniform blocks). Lower values spend more bits; upstream recommends 4–7. |
--ac-bias | 0.25 | Psychovisual RD bias toward keeping high-frequency energy, 0.0–8.0; helps texture and grain retention. |
--distortion-bias-preset | 0 | Bundles of fidelity-over-distortion settings: 1 mild, 2 medium, 3 strong (each gives larger files at the same CRF), 4 imitates SVT-AV1-HDR’s film-grain tune. |
--noise-norm-strength | 0 | Noise normalization, 0–4: boosts some AC coefficients so fine texture survives in otherwise flat areas. |
--enable-variance-boost | 1 | Variance Boost: lower QP in low-contrast superblocks to prevent banding and blocking in flat and dark areas, at some bitrate cost. |
--variance-boost-curve | 0 (3 for PQ) | Variance Boost curve, 0–3; 3 is a PQ HDR curve, used by default for PQ content. |
--sharp-tx | 0 | Sharp transform optimizations that complement --ac-bias (0 or 1). |
--tx-bias | 0 | Bias transform size/type choices toward sharpness and detail, at some risk of blocking and banding: 0 off, 1 full, 2 transform size only, 3 interpolation filter only. |
--complex-hvs | 0 | Use the highest-complexity HVS model in mode decision (0 or 1); much slower. |