5fish/SVT-AV1
Focused on high efficiency and high fidelity encoding, with additional parameters tailored for 2D content
5fish/SVT-AV1 is a fork of SVT-AV1 aimed at high-efficiency and high-fidelity encoding of 2D content such as anime and games. Akatsumekusa (Akatmks) is the main developer, alongside 5fish. It pulls in work from SVT-AV1-PSY, SVT-AV1-HDR, SVT-AV1-PSYEX and SVT-AV1-Essential, and adds its own “psy-bias” system for line art and texture. The project judges changes by visual quality, not metric scores.
The codebase descends from SVT-AV1-PSY 2.3.0, which was based on mainline SVT-AV1 2.3.0. That is why version numbers start with 2.3 (v2.3.YYMMDD). Mainline 3.x/4.x options such as --avif, --lossless, --rtc and --max-tx-size are not available, and the tune list is PSY’s, not mainline’s.
Versions and downloads
Section titled “Versions and downloads”Releases are dated builds published often. The latest as of October 8, 2026 is v2.3.261005 (October 5, 2026); some intermediate builds are marked as pre-releases. GitHub Releases has LTO + PGO builds of SvtAv1EncApp for Linux and Windows x86-64, Windows arm64 and macOS arm64, with Dolby Vision and HDR10+ support. On x86-64, try icelake-server+znver5 first, then znver2, then x86-64-v3+znver2; a build that crashes immediately needs CPU features your machine lacks.
HandBrake builds are maintained separately. To build it yourself, upstream recommends Clang and Build/linux/build.sh --native --static --release --enable-lto --enable-pgo.
Start with four parameters
Section titled “Start with four parameters”Upstream asks you to start with --preset, --crf, --lineart-psy-bias and --texture-psy-bias on their own, and not to paste parameters from other SVT-AV1 forks: many newer 5fish features conflict with options commonly used elsewhere. This is upstream’s example for a small (“mini”) encode:
ffmpeg -i input.mkv -strict -1 -f yuv4mpegpipe -pix_fmt yuv420p10le - | SvtAv1EncApp -i - --preset 2 --crf 26 --lineart-psy-bias 3 --texture-psy-bias 3 --color-primaries 1 --transfer-characteristics 1 --matrix-coefficients 1 -b output.ivf-strict -1 is needed because 10-bit Y4M is outside the official Y4M spec. The colour flags signal BT.709; Y4M carries no colour description, so set them to match your source. Mux the IVF with MKVToolNix afterwards.
Preset. Upstream recommends --preset 2 for the best quality, --preset 4 or at most --preset 6 for speed. They currently advise against --preset 0: preset 2’s candidate filtering often beats preset 0’s exhaustive search.
CRF. The community bands upstream uses:
| CRF | Typical use |
|---|---|
| ≤ 12 | High-fidelity encodes |
| 16–20 | High-quality encodes |
| 24–28 | Larger mini encodes |
| 32–40 | Tiny mini encodes |
Psy-bias. Higher values make the encoder try harder to retain that kind of detail. Set both together.
| Situation | Starting point |
|---|---|
| High-quality and high-fidelity encodes | --lineart-psy-bias 5 --texture-psy-bias 4 |
| Mini encodes | --lineart-psy-bias 3 --texture-psy-bias 3 |
| Weak line art | raise --lineart-psy-bias to 6–7 |
| Heavy texture or noise | raise --texture-psy-bias to 5–7 (in mini encodes, too high can cause blocking on noisy sources) |
| Little texture | lower --texture-psy-bias to 3 or less to save bits |
| Almost everything is texture | lower --lineart-psy-bias to 3 |
If you set neither, both are 0 (off). If you set only one, the other defaults to the smaller of that value and 2. Each level switches on a bundle of internal tweaks (mode decision, deblocking, CDEF, QM and rate-control biases); Parameters.md has the full per-level tables. Upstream points to Parameters.md rather than --help for explanations.
Tunes and defaults
Section titled “Tunes and defaults”The tune list comes from SVT-AV1-PSY 2.3, so the numbers do not match mainline 4.x or SVT-AV1-HDR:
| —tune | 5fish/SVT-AV1 |
|---|---|
| 0 | VQ (default) |
| 1 | PSNR |
| 2 | SSIM |
| 3 | Subjective SSIM |
| 4 | Still Picture |
Other defaults that differ from mainline SVT-AV1 4.2: --preset 4 (mainline 8), scene-change detection on, so it places keyframes at scene cuts (mainline ignores --scd), quantization matrices on with --qm-min 8, or 9 when --texture-psy-bias is 3 or higher (mainline QMs off), --sharpness 2 (mainline 0) and --tf-strength 1 (mainline 3).
Fork-specific options
Section titled “Fork-specific options”The options you are most likely to touch after the four above. Many more --psy-bias-*, --dlf-bias-* and --cdef-bias-* controls exist; the psy-bias levels set most of them for you.
| Option | Range (default) | What it does |
|---|---|---|
--lineart-psy-bias | 0–7 (0) | Line-art retention level. -2 is a test mode for tuning the variance threshold. |
--texture-psy-bias | 0–7 (0) | Texture retention level. |
--noise-psy-bias | 0–7 (0) | Noise retention. Set automatically to 2/4/6 by --texture-psy-bias 5/6/7, and to 4 by high-fidelity mode. |
--lineart-variance-thr, --texture-variance-thr | 0.0–16.0 (5.5) | Variance thresholds that decide what counts as line art and texture. |
--high-quality-encode-psy-bias | 0–1 | Extra biases for high-quality encodes. On automatically at CRF ≤ 24 when a psy-bias is set. |
--high-fidelity-encode-psy-bias | 0–1 | Aims to match the source frame by frame rather than just keep texture. On automatically at CRF ≤ 16 when a psy-bias is set. |
--balancing-q-bias | 0–1 | Biases TPL per frame and per superblock for detail retention. On automatically when a psy-bias is set. |
--noise-level-thr | −2, −1, >0 (−1) | Noise threshold above which CDEF, restoration and some mode decisions are disabled. -2 prints each frame’s noise level so you can choose a value. |
--satd-bias | 0.0–16.0 (0.0) | Adds SATD to the distortion calculation; upstream suggests trying 0.5 for some textures. |
--photon-noise | 0–100000 (0) | Generates a photon-noise grain table at the given ISO. --photon-noise-chroma 1 adds chroma noise. |
--chroma-grain | 0–1 (1) | Whether film-grain synthesis applies to chroma. |
--auto-tiling | 0–1 (0) | Essential’s automatic tile layout, off by default here. |
--min-keyint | −1, 0+ (−1) | Minimum distance between scene-cut keyframes. |
--frame-luma-bias | 0–100 (0) | Raises quality in dark frames. This is PSY’s name for mainline’s --luminance-qp-bias. |
--max-32-tx-size | 0–1 (0) | Limits transforms to 32×32 (mainline uses --max-tx-size 32). |
--pin, --ss | Pin to the first N cores; choose a CPU socket. |
For texture-heavy sources, upstream also recommends --enable-cdef 0 whenever the source and the target size allow it.
Complete native parameter reference
Section titled “Complete native parameter reference”Every option 5fish/SVT-AV1 v2.3.261005 accepts, grouped by purpose; aliases share a row. Many defaults are “auto”: they are resolved at startup from --lineart-psy-bias, --texture-psy-bias, CRF and preset, and the value in brackets is what you get with neither psy-bias set. The fork’s own Parameters.md has the full tables of what each psy-bias level switches on.
Input, output and application (17 options)
| Option | Default | Description |
|---|---|---|
--help | — | Print the option list and exit. |
--version | — | Print the library version and exit. |
--input, -i | required | Input file, Y4M or raw YUV; - or stdin reads from a pipe. Raw YUV also needs --width, --height, the frame rate and --input-depth. |
--output, -b | none | Output IVF file; - or stdout writes to a pipe. |
--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. |
--progress | 1 | Progress output: 0 none, 1 normal, 2 detailed. |
--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. |
--skip | 0 | Skip this many frames at the start of the input. |
--frames, -n | 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. |
--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 (12 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. |
--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. |
--fps | 60 | Integer frame rate for raw input, 1–240; Y4M headers override it. Use --fps-num/--fps-denom for fractional rates. |
--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. |
--input-depth | 10 | Bit depth of raw input and of the encode, 8 or 10; Y4M headers supply it. Raw input defaults to 10-bit. |
--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 |
|---|---|---|
--preset | 4 | Speed/efficiency trade-off, −3–13; lower is slower. Upstream recommends 2 for best quality and 4–6 for speed, and advises against 0. Above 11 runs as 11 (10 for 4K and larger random-access encodes), and 8K inputs need preset 2 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. |
--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. |
--pin | 0 (off) | Pin the encoder to the first N logical cores; 0 disables pinning. |
--ss | -1 (any) | CPU socket to run on: −1 any, 0 or 1 a specific socket of a two-socket system. |
--fast-decode | 0 | Decoder-speed optimizations, 0–2 (2 decodes fastest) at a small efficiency cost. Try it before tiles. |
--tune | 0 (VQ) | 0 VQ, 1 PSNR, 2 SSIM, 3 Subjective SSIM, 4 Still Picture (all-intra images). |
--hbd-mds | 0 (preset) | Precision of mode decision for 10-bit input: 0 preset default, 1 10-bit, 2 hybrid 8/10-bit, 3 8-bit. |
Rate control and passes (21 options)
| Option | Default | Description |
|---|---|---|
--rc | 0 | Rate-control mode: 0 CRF (or CQP with --aq-mode 0), 1 VBR, 2 CBR, both with --tbr. |
--qp, -q | 35 | Base QP, 1–63: the fixed QP in CQP and the starting point otherwise. For constant quality use --crf. |
--crf | 35 | Constant rate factor, 1–70 in 0.25 steps; lower is higher quality and larger. Equivalent to --rc 0 --aq-mode 2 --qp N on a finer scale. |
--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. |
--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. |
--max-qp | 63 | Highest QP rate control may use, 0–63; mainly for VBR and CBR. |
--min-qp | 1 | Lowest QP rate control may use in VBR/CBR, 1–63; CRF always uses 1. |
--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). |
--mbr-overshoot-pct | 50 | Allowed overshoot of --mbr in capped CRF, 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: 0 off, 1 key frames and oversized frames, 2 key/alt-ref/golden frames, 3 all frames, 4 preset-based. |
--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. |
--enable-tpl-la | 1 | Temporal dependency (TPL) model. The library forces it on for CRF/CQP, so 0 only matters in VBR/CBR. |
Quantization offsets and matrices (20 options)
| Option | Default | Description |
|---|---|---|
--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. |
--enable-qm | 1 | Use quantization matrices, which quantize high frequencies more coarsely than low ones. |
--qm-min | auto (8; 9 with texture psy-bias ≥3) | Lowest (steepest) luma QM level, 0–15; 15 is flat. |
--qm-max | 15 | Highest (flattest) luma QM level, 0–15. |
--roi-map-file | none | Region-of-interest file giving per-block QP offsets for chosen frames. |
--chroma-qm-min | auto (10; 11 with lineart psy-bias ≥3) | Lowest chroma QM level, 0–15. |
--chroma-qm-max | 15 | Highest chroma QM level, 0–15. |
GOP structure and keyframes (10 options)
| Option | Default | Description |
|---|---|---|
--keyint | -2 (257 frames) | Maximum keyframe interval in frames: −2 is 257 frames, −1 no periodic keyframes (CRF with --scd 0), 0 no periodic keyframes (CRF). |
--min-keyint | -1 (33 frames) | Minimum distance between scene-change keyframes: −1 is 33 frames (129 with --balancing-q-bias 1), 0 no minimum. |
--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. |
--scd | 1 | Scene-change detection: insert keyframes at scene cuts (0 or 1). |
--lookahead | -1 (auto) | Frames of extra look-ahead for rate control and TPL, 0–120, beyond the mini-GOP and temporal-filter window. |
--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. |
--pred-struct | 2 (random access) | Prediction structure: 1 low delay, 2 random access (normal for files). 0 all-intra is also accepted. |
--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-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. |
--enable-dg | 1 | Dynamic mini-GOP: adapt the hierarchical structure to the content. |
Filters and coding tools (16 options)
| Option | Default | Description |
|---|---|---|
--auto-tiling | 0 | Choose tile rows and columns from the resolution to speed up decoding, when they are not set manually. |
--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 | 1 | Deblocking filter: 0 off, 1 on, 2 more accurate and slower. |
--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-mfmv | -1 (auto) | Motion-field motion vector projection, 0 or 1; −1 lets the preset decide. |
--enable-tf | 1 | Temporal filtering of alt-ref frames: 0 off, 1 on, 2 adaptive strength per 64×64 block (overrides --tf-strength). |
--enable-overlays | 0 | Insert overlay frames after filtered alt-refs as extra references. Not supported with low delay or multi-pass. |
--scm | auto (2; 0 with psy-bias) | Screen-content tools (palette, intra block copy): 0 off, 1 on, 2 detect per frame. Defaults to 0 when --lineart-psy-bias or --texture-psy-bias is 1 or more. |
--rmv | 0 | Restrict motion vectors so they never point outside the picture. |
--max-32-tx-size | 0 | Limit transforms to 32×32 (0 or 1); can help detail at high-fidelity CRFs. |
--tf-strength | 1 | Alt-ref temporal filter strength, 0–4; each step doubles it. The default 1 is 4× weaker than mainline’s 3, which keeps more detail and grain. |
--kf-tf-strength | 1 | Temporal filter strength on key frames, 0–4; each step doubles it (1 is 4× weaker than mainline). Removes keyframe artifacts from strong filtering. |
--filtering-noise-detection | 0 (tune default) | Noise detection that turns CDEF and restoration off on noisy frames: 0 tune default (on for tunes 0 and 3), 1 on, 2 off, 3 CDEF only, 4 restoration only. |
--alt-tf-decay | 0 | Apply tune 0/3’s alt-ref temporal-filter decay to any tune. |
Super-resolution, resizing and switch frames (13 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. |
--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 (8 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. |
--static-fgs-seed | 0 (off) | Fixed random seed for grain synthesis: 0 off, −2 built-in seed, 1–65535 custom. With --photon-noise or --fgs-table this gives static noise. |
--adaptive-film-grain | 0 | Choose the grain-estimation block size from the resolution, which reduces visible repeating grain patterns. |
--chroma-grain | 1 | Apply synthesized grain to the chroma planes too. |
Colour and HDR metadata (11 options)
| Option | Default | Description |
|---|---|---|
--color-help | — | Print the colour-metadata reference (primaries, transfer and matrix names, mastering-display syntax) and exit. |
--enable-hdr | 0 | Accepted (0 or 1) but read by nothing else in this release; HDR metadata comes from --mastering-display and --content-light. |
--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 (18 options)
| Option | Default | Description |
|---|---|---|
--enable-variance-boost | auto (1; 0 with psy-bias) | Variance Boost (0 or 1): lower QP in low-contrast superblocks. Off by default when --lineart-psy-bias or --texture-psy-bias is 1 or more. |
--variance-boost-strength | 2 | 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 | 5 | 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. |
--enable-alt-curve | 0 | Alternative Variance Boost curve with different boost trade-offs. |
--sharpness | 2 | Bias RD decisions toward block sharpness, −14–14. |
--qp-scale-compress-strength | auto (1.0; 0 with balancing-q-bias) | Compress QP differences between temporal layers, 0.0–8.0 (mainline allows 0–3), for steadier quality within a mini-GOP; helps grain and fast motion. Defaults to 0 when --balancing-q-bias is on, which psy-bias turns on. |
--frame-luma-bias | 0 | Spend more bits on dark frames: lowers frame QP based on average luma, strength 0–100. |
--luminance-qp-bias | 0 | Alias of --frame-luma-bias; if both are given, the larger value wins. |
--noise-norm-strength | auto (1) | Noise normalization, 0–4: boosts some AC coefficients so fine texture survives in otherwise flat areas. Auto is 1; 4 with --texture-psy-bias 5+; 0 with --lineart-psy-bias 5+ and texture below 4. |
--ac-bias | auto (1.0) | Psychovisual RD bias toward keeping high-frequency energy, 0.0–8.0. Auto is 1.0; 1.5 in high-fidelity mode with texture psy-bias 1–4; 2.5 with texture psy-bias 5+. |
--texture-ac-bias | auto (follows --ac-bias) | --ac-bias strength in low-variance (texture) regions, 0.0–64.0. Auto follows --ac-bias, or 2.5–6.0 with --texture-psy-bias 4+. |
--lineart-energy-bias | auto (1.0) | Prefer more energy than the source in high-variance (lineart) regions, 0.667–1.5. Auto is 1.0, 0.98 in high-quality mode; upstream suggests trying 0.98. |
--texture-energy-bias | auto (1.0) | Prefer more energy than the source in low-variance regions, 0.667–1.5. Auto is 1.0, or 1.02–1.10 with --texture-psy-bias 3+. |
--satd-bias | auto (0.0) | Add SATD to the distortion measure, 0.0–16.0; upstream suggests trying 0.5. |
--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. Psy-bias 3+ is meant to replace it. |
--low-q-taper | 0 | Taper Variance Boost so that boosted blocks do not reach extremely low q (below q 11). |
--sharp-tx | 1 | Sharp transform optimizations: cleaner detail with a slightly higher risk of artifacts; pair with --ac-bias. |
--alt-ssim-tuning | 0 | Tunes 2 and 4: add VQ optimizations and an alternative SSIM calculation. |
Psy-bias controls (20 options)
| Option | Default | Description |
|---|---|---|
--noise-level-thr | -1 (auto) | Noise level above which noise-sensitive features switch off: −1 encoder default, −2 print each frame’s noise level, a positive value sets the threshold. |
--lineart-psy-bias | off | Lineart retention for 2D content, 0–7; higher is more aggressive. Set it together with --texture-psy-bias: if only one is given, the other becomes min(value, 2). Upstream starting points: 3 for small encodes, 5 for high quality, 6–7 for weak lineart. −2 tests the variance threshold. |
--texture-psy-bias | off | Texture and noise retention, 0–7. Upstream starting points: 3 for small encodes, 4 for high quality, 5–7 for heavy texture or noise; 3 or lower for sources with little texture. |
--noise-psy-bias | auto (0) | Noise retention, 0–7. Auto is 0, or 2, 4 and 6 with --texture-psy-bias 5, 6 and 7 (4 in high-fidelity mode). |
--lineart-variance-thr | 5.5 | Variance threshold on a log2 scale, 0.0–16.0, above which detail counts as lineart for --lineart-psy-bias. |
--texture-variance-thr | 5.5 | Variance threshold on a log2 scale, 0.0–16.0, below which detail counts as texture for --texture-psy-bias. |
--psy-bias-mds0-sad | auto (0) | Use SAD in the first mode-decision stage; auto on with lineart psy-bias 2+ or texture 3+. |
--psy-bias-disable-warped-motion | auto (0) | Disable warped motion; auto on with lineart psy-bias 3+. |
--psy-bias-disable-me-8x8 | auto (0) | Disable 8×8 motion estimation and 8×8 temporal-filter prediction; auto on with lineart psy-bias 3+ outside high-fidelity mode. |
--psy-bias-disable-sgrproj | auto (0) | Disable the self-guided restoration filter; auto on with lineart psy-bias 4+. |
--psy-bias-coeff-lvl-offset | auto (0) | Offset the encoder’s coefficient-level classification, −3–3; auto 2 with texture psy-bias 5+. |
--psy-bias-mds0-intra-inter-mode-bias | auto (0) | Favour intra modes in base layers and inter modes in higher layers; auto on with noise psy-bias 4+. |
--psy-bias-inter-mode-bias | auto (0) | Bias against intra modes in non-base layers, 0–5; auto 1 with lineart or texture psy-bias 3+ or noise psy-bias 1+. |
--psy-bias-qm-bias | auto (0) | Use higher QM levels in higher temporal layers; auto on with psy-bias 2+. |
--psy-bias-sharpness-rounding | auto (64; 48 for tune 3) | Quantization rounding offset, 1–256. |
--psy-bias-optimize-b | auto (0) | Slow full-distortion quantization optimization: 0 off, 1 optimize end-of-block then the normal pass, 2 replace the normal pass (EOB and coefficients), 4 EOB only, −2 normal pass off. Auto 1 with psy-bias at presets ≤4. |
--texture-psy-bias-optimize-b | auto (follows --psy-bias-optimize-b) | The same choices for low-variance regions; auto 4 with texture psy-bias 3+ or 2 with lineart 4+, at presets ≤4. |
--psy-bias-dg | auto (1) | Psychovisual dynamic mini-GOP decisions (0 or 1); forced on while --balancing-mg-dist-q-bias is active, as it is by default. −2 prints mini-GOP distances. |
--high-quality-encode-psy-bias | auto (0) | High-quality mode for several features; auto on when a psy-bias is set and CRF ≤24. |
--high-fidelity-encode-psy-bias | auto (0) | High-fidelity mode (implies high-quality mode); auto on when a psy-bias is set and CRF ≤16. |
Balancing (TPL) controls (8 options)
| Option | Default | Description |
|---|---|---|
--balancing-q-bias | auto (0; 1 with psy-bias) | Bias TPL at frame and superblock level toward detail retention (0 or 1). |
--balancing-r0-dampening-layer | auto (1) | Dampen TPL r0 boosting in temporal layers at or above hierarchical levels plus this value, −5–1 (1 off). Auto −2 with balancing-q-bias, −3 with texture psy-bias 5+ or noise psy-bias 3+. |
--balancing-mg-dist-q-bias | 3 | Strengthen balancing-q-bias by mini-GOP distortion; the value is a log2 exponent, 0.0–8.0, and −2 disables it. Also forces --psy-bias-dg 1 and --enable-dg 1. |
--balancing-noise-level-q-bias | 1 | Strengthen balancing-q-bias by frame noise level; log2 exponent 0.0–8.0, −2 disables. Setting this and --balancing-mg-dist-q-bias both to −2 restores the older balancing behaviour. |
--balancing-luminance-q-bias | auto (0; 4.0 with balancing-q-bias) | Boost dark superblocks, 0.0–25.0; auto 4.0 (6.0 with lineart psy-bias 5+) when balancing-q-bias is on. |
--balancing-luminance-lambda-bias | auto (0.0) | Bias the mode-decision lambda in dark superblocks, 0.0–0.999. |
--balancing-texture-lambda-bias | auto (0.0) | Bias the mode-decision lambda in low-variance regions, 0.0–0.999; upstream suggests trying 0.5. |
--balancing-tpl-intra-mode-beta-bias | auto (0) | Boost superblocks whose TPL search prefers intra prediction; auto on with noise psy-bias 1+. Needs balancing-q-bias. |
Deblocking and CDEF bias (12 options)
| Option | Default | Description |
|---|---|---|
--dlf-bias | 0 (1 with psy-bias) | Alternative deblocking search with its own AC bias and strength limits (--dlf-bias-max-dlf, --dlf-bias-min-dlf); psy-bias 1+ turns it on. |
--dlf-sharpness | auto (1) | Deblocking sharpness, 0–7, also usable without --dlf-bias; auto 7 with lineart psy-bias 5+ and texture below 4. |
--dlf-bias-max-dlf | auto (8,2) | Maximum deblocking strength as luma,chroma (each 0–63) for --dlf-bias; auto rises with --texture-psy-bias 4+ above CRF 28. |
--dlf-bias-min-dlf | auto (2,0) | Minimum deblocking strength as luma,chroma; strength 0 is not tried when the minimum is above 0. |
--cdef-bias | 0 (1 with psy-bias) | Alternative CDEF search (signalling fix, SAD/MSE distortion, strength taper) limited by the CDEF-bias strength options; psy-bias 1+ turns it on. |
--cdef-bias-max-cdef | auto (4,1,2,0) | Maximum CDEF strengths as Y primary,Y secondary,UV primary,UV secondary; primary 0–15, secondary 0, 1, 2 or 4. |
--cdef-bias-min-cdef | auto (0,0,0,0) | Minimum CDEF strengths in the same order; strength 0 is always tried. |
--cdef-bias-max-sec-cdef-rel | 0 | Cap each block’s secondary CDEF strength at its primary strength plus this value, −12–4. |
--texture-cdef-bias-max-cdef | auto (follows --cdef-bias-max-cdef) | Maximum CDEF strengths in low-variance regions; 1,0,0,0 in high-fidelity mode. |
--texture-cdef-bias-min-cdef | auto (follows --cdef-bias-min-cdef) | Minimum CDEF strengths in low-variance regions. |
--texture-cdef-bias-max-sec-cdef-rel | 0 | --cdef-bias-max-sec-cdef-rel for low-variance regions. |
--cdef-bias-damping-offset | 0 | Offset the CDEF damping that is normally derived from each frame’s q-index, −4–8. |