{
  "schemaVersion": 1,
  "contentVersion": "ca42e61ede0a24f789d7287a0001244ad22f4abf",
  "id": "docs/tools/software-encoders/svt-av1-5fish",
  "collection": "docs",
  "title": "5fish/SVT-AV1",
  "description": "5fish/SVT-AV1 is an SVT-AV1 fork tuned for 2D content such as anime and games, driven by preset, CRF and two psy-bias controls for line art and texture.",
  "canonicalUrl": "https://encode.wiki/tools/software-encoders/svt-av1-5fish/",
  "apiUrl": "https://encode.wiki/api/v1/documents/docs/tools/software-encoders/svt-av1-5fish.json",
  "markdownUrl": "https://encode.wiki/api/v1/markdown/docs/tools/software-encoders/svt-av1-5fish.md",
  "status": "current",
  "tags": [
    "av1",
    "encoder",
    "anime",
    "svt-av1-family"
  ],
  "license": "CC BY-SA 4.0",
  "dates": {
    "lastVerified": "2026-10-08T00:00:00.000Z"
  },
  "authors": [],
  "sources": [
    {
      "title": "5fish/SVT-AV1 README at v2.3.261005",
      "url": "https://github.com/5fish/SVT-AV1/blob/v2.3.261005/README.md",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "5fish/SVT-AV1 Parameters.md at v2.3.261005",
      "url": "https://github.com/5fish/SVT-AV1/blob/v2.3.261005/Docs/Parameters.md",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "5fish/SVT-AV1 application options at v2.3.261005",
      "url": "https://github.com/5fish/SVT-AV1/blob/v2.3.261005/Source/App/app_config.c",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "5fish/SVT-AV1 encoder defaults at v2.3.261005",
      "url": "https://github.com/5fish/SVT-AV1/blob/v2.3.261005/Source/Lib/Globals/enc_settings.c",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "5fish/SVT-AV1 psy-bias resolution at v2.3.261005",
      "url": "https://github.com/5fish/SVT-AV1/blob/v2.3.261005/Source/Lib/Globals/enc_handle.c",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "5fish/SVT-AV1 release v2.3.261005",
      "url": "https://github.com/5fish/SVT-AV1/releases/tag/v2.3.261005",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    }
  ],
  "headings": [
    {
      "depth": 2,
      "text": "Versions and downloads",
      "anchor": "versions-and-downloads"
    },
    {
      "depth": 2,
      "text": "Start with four parameters",
      "anchor": "start-with-four-parameters"
    },
    {
      "depth": 2,
      "text": "Tunes and defaults",
      "anchor": "tunes-and-defaults"
    },
    {
      "depth": 2,
      "text": "Fork-specific options",
      "anchor": "fork-specific-options"
    },
    {
      "depth": 2,
      "text": "Complete native parameter reference",
      "anchor": "complete-native-parameter-reference"
    }
  ],
  "sections": [
    {
      "id": "_preamble",
      "title": "Page introduction",
      "depth": 0,
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/svt-av1-5fish/",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/svt-av1-5fish/_preamble.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/svt-av1-5fish/_preamble.md",
      "checksum": "33a949544cbee8e482fe43dfc1c37b910434bf10828822643a718c205d7eacc5",
      "bytes": 1253
    },
    {
      "id": "versions-and-downloads",
      "title": "Versions and downloads",
      "depth": 2,
      "anchor": "versions-and-downloads",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/svt-av1-5fish/#versions-and-downloads",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/svt-av1-5fish/versions-and-downloads.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/svt-av1-5fish/versions-and-downloads.md",
      "checksum": "da955e5683c79e31699117cf7a36babf6f9d3ea0d5f6fc76b78299f35fbb199b",
      "bytes": 780
    },
    {
      "id": "start-with-four-parameters",
      "title": "Start with four parameters",
      "depth": 2,
      "anchor": "start-with-four-parameters",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/svt-av1-5fish/#start-with-four-parameters",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/svt-av1-5fish/start-with-four-parameters.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/svt-av1-5fish/start-with-four-parameters.md",
      "checksum": "7bcefb7b6769bc717bd5a3085e1c5b37f7e1c2e878e4d56991746b6e6d720f7f",
      "bytes": 2331
    },
    {
      "id": "tunes-and-defaults",
      "title": "Tunes and defaults",
      "depth": 2,
      "anchor": "tunes-and-defaults",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/svt-av1-5fish/#tunes-and-defaults",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/svt-av1-5fish/tunes-and-defaults.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/svt-av1-5fish/tunes-and-defaults.md",
      "checksum": "18801e7cd5902fe7904fb5fdc1fd66e5d6859c7516493c8f3a359c6d39be7fcb",
      "bytes": 606
    },
    {
      "id": "fork-specific-options",
      "title": "Fork-specific options",
      "depth": 2,
      "anchor": "fork-specific-options",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/svt-av1-5fish/#fork-specific-options",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/svt-av1-5fish/fork-specific-options.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/svt-av1-5fish/fork-specific-options.md",
      "checksum": "4cd448e2b71b55fc345f558239bd55e4c2e80f384de4f4ccb79230d6b0b29c0e",
      "bytes": 2348
    },
    {
      "id": "complete-native-parameter-reference",
      "title": "Complete native parameter reference",
      "depth": 2,
      "anchor": "complete-native-parameter-reference",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/svt-av1-5fish/#complete-native-parameter-reference",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/svt-av1-5fish/complete-native-parameter-reference.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/svt-av1-5fish/complete-native-parameter-reference.md",
      "checksum": "8f2d7a26416742d63d303f29f632019b3809d6e2a6ae1583a6457e50ebbb9528",
      "bytes": 28604
    }
  ],
  "outboundReferences": [
    "/tools/software-encoders/svt-av1-essential/",
    "/tools/software-encoders/svt-av1-hdr/",
    "/tools/software-encoders/svt-av1-psy/",
    "/tools/software-encoders/svt-av1-psyex/",
    "/tools/software-encoders/svt-av1/",
    "/tools/utilities/mkvtoolnix/",
    "https://github.com/5fish/SVT-AV1",
    "https://github.com/5fish/SVT-AV1/blob/v2.3.261005/Docs/Parameters.md",
    "https://github.com/5fish/SVT-AV1/releases",
    "https://github.com/5fish/SVT-AV1/releases/tag/v2.3.261005",
    "https://github.com/Uranite/HandBrake-5fish-SVT-AV1"
  ],
  "checksum": "eccd3dcf9d7b382802aa8a7c7514f4d0b257a497d0e6ad1c9b424c8511cd391e",
  "contentFormat": "markdown",
  "markdown": "> **Repository:** [5fish/SVT-AV1](https://github.com/5fish/SVT-AV1). Focused on high efficiency and high fidelity encoding, with additional parameters tailored for 2D content. Latest release: [v2.3.261005](https://github.com/5fish/SVT-AV1/releases/tag/v2.3.261005), Oct 5, 2026. Last commit: Oct 5, 2026. License: BSD-3-Clause-Clear. Stars: 24.\n\n5fish/SVT-AV1 is a fork of [SVT-AV1](/tools/software-encoders/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](/tools/software-encoders/svt-av1-psy/), [SVT-AV1-HDR](/tools/software-encoders/svt-av1-hdr/), [SVT-AV1-PSYEX](/tools/software-encoders/svt-av1-psyex/) and [SVT-AV1-Essential](/tools/software-encoders/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.\n\nThe 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.\n\n## Versions and downloads\n\nReleases 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](https://github.com/5fish/SVT-AV1/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.\n\n[HandBrake builds](https://github.com/Uranite/HandBrake-5fish-SVT-AV1) are maintained separately. To build it yourself, upstream recommends Clang and `Build/linux/build.sh --native --static --release --enable-lto --enable-pgo`.\n\n## Start with four parameters\n\nUpstream 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:\n\n```sh\nffmpeg -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\n```\n\n`-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](/tools/utilities/mkvtoolnix/) afterwards.\n\n**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.\n\n**CRF.** The community bands upstream uses:\n\n| CRF | Typical use |\n| --- | --- |\n| ≤ 12 | High-fidelity encodes |\n| 16–20 | High-quality encodes |\n| 24–28 | Larger mini encodes |\n| 32–40 | Tiny mini encodes |\n\n**Psy-bias.** Higher values make the encoder try harder to retain that kind of detail. Set both together.\n\n| Situation | Starting point |\n| --- | --- |\n| High-quality and high-fidelity encodes | `--lineart-psy-bias 5 --texture-psy-bias 4` |\n| Mini encodes | `--lineart-psy-bias 3 --texture-psy-bias 3` |\n| Weak line art | raise `--lineart-psy-bias` to 6–7 |\n| Heavy texture or noise | raise `--texture-psy-bias` to 5–7 (in mini encodes, too high can cause blocking on noisy sources) |\n| Little texture | lower `--texture-psy-bias` to 3 or less to save bits |\n| Almost everything is texture | lower `--lineart-psy-bias` to 3 |\n\nIf 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](https://github.com/5fish/SVT-AV1/blob/v2.3.261005/Docs/Parameters.md) has the full per-level tables. Upstream points to Parameters.md rather than `--help` for explanations.\n\n## Tunes and defaults\n\nThe tune list comes from SVT-AV1-PSY 2.3, so the numbers do not match mainline 4.x or SVT-AV1-HDR:\n\n| --tune | 5fish/SVT-AV1 |\n| --- | --- |\n| 0 | VQ (default) |\n| 1 | PSNR |\n| 2 | SSIM |\n| 3 | Subjective SSIM |\n| 4 | Still Picture |\n\nOther 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).\n\n## Fork-specific options\n\nThe 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.\n\n| Option | Range (default) | What it does |\n| --- | --- | --- |\n| `--lineart-psy-bias` | 0–7 (0) | Line-art retention level. `-2` is a test mode for tuning the variance threshold. |\n| `--texture-psy-bias` | 0–7 (0) | Texture retention level. |\n| `--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. |\n| `--lineart-variance-thr`, `--texture-variance-thr` | 0.0–16.0 (5.5) | Variance thresholds that decide what counts as line art and texture. |\n| `--high-quality-encode-psy-bias` | 0–1 | Extra biases for high-quality encodes. On automatically at CRF ≤ 24 when a psy-bias is set. |\n| `--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. |\n| `--balancing-q-bias` | 0–1 | Biases TPL per frame and per superblock for detail retention. On automatically when a psy-bias is set. |\n| `--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. |\n| `--satd-bias` | 0.0–16.0 (0.0) | Adds SATD to the distortion calculation; upstream suggests trying 0.5 for some textures. |\n| `--photon-noise` | 0–100000 (0) | Generates a photon-noise grain table at the given ISO. `--photon-noise-chroma 1` adds chroma noise. |\n| `--chroma-grain` | 0–1 (1) | Whether film-grain synthesis applies to chroma. |\n| `--auto-tiling` | 0–1 (0) | Essential's automatic tile layout, off by default here. |\n| `--min-keyint` | −1, 0+ (−1) | Minimum distance between scene-cut keyframes. |\n| `--frame-luma-bias` | 0–100 (0) | Raises quality in dark frames. This is PSY's name for mainline's `--luminance-qp-bias`. |\n| `--max-32-tx-size` | 0–1 (0) | Limits transforms to 32×32 (mainline uses `--max-tx-size 32`). |\n| `--pin`, `--ss` | | Pin to the first N cores; choose a CPU socket. |\n\nFor texture-heavy sources, upstream also recommends `--enable-cdef 0` whenever the source and the target size allow it.\n\n## Complete native parameter reference\n\nEvery 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](https://github.com/5fish/SVT-AV1/blob/v2.3.261005/Docs/Parameters.md) has the full tables of what each psy-bias level switches on.\n\n<details>\n<summary>Input, output and application (17 options)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--help` | — | Print the option list and exit. |\n| `--version` | — | Print the library version and exit. |\n| `--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`. |\n| `--output`, `-b` | none | Output IVF file; `-` or `stdout` writes to a pipe. |\n| `--config`, `-c` | none | Read options from a configuration file of `Name : value` lines (the config-file names, e.g. `EncoderMode`). |\n| `--errlog` | stderr | Write warnings and errors to this file. |\n| `--recon`, `-o` | none | Write the reconstructed (decoded) frames as raw YUV, for debugging or metrics. |\n| `--stat-file` | none | Write per-frame PSNR and SSIM to this file; needs `--enable-stat-report 1`. |\n| `--progress` | 1 | Progress output: 0 none, 1 normal, 2 detailed. |\n| `--no-progress` | 0 | `--no-progress 1` is the same as `--progress 0`. |\n| `--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. |\n| `--skip` | 0 | Skip this many frames at the start of the input. |\n| `--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. |\n| `--nb` | -1 (off) | Preload this many frames into memory and encode only those, for benchmarking without I/O. |\n| `--inj` | 0 | Feed frames to the encoder at a fixed rate (`--inj-frm-rt`) to simulate live input. |\n| `--inj-frm-rt` | 60 | Injection rate in frames per second (0–240) for `--inj 1`. |\n| `--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. |\n\n</details>\n\n<details>\n<summary>Source format, profile and level (12 options)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--width`, `-w` | 0 (from Y4M) | Frame width in pixels, 4–16384. Required for raw YUV; Y4M headers supply it. |\n| `--height`, `-h` | 0 (from Y4M) | Frame height in pixels, 4–8704. Required for raw YUV. |\n| `--forced-max-frame-width` | 0 (input width) | Maximum frame width written to the sequence header (4–16384), for streams whose frame size changes later. |\n| `--forced-max-frame-height` | 0 (input height) | Maximum frame height written to the sequence header (4–8704). |\n| `--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. |\n| `--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. |\n| `--level` | 0 (auto) | AV1 level to signal, 2.0–7.3 (e.g. `5.1`); 0 derives it from the input. |\n| `--fps` | 60 | Integer frame rate for raw input, 1–240; Y4M headers override it. Use `--fps-num`/`--fps-denom` for fractional rates. |\n| `--fps-num` | 60000 | Frame-rate numerator for raw input; Y4M headers override it. |\n| `--fps-denom` | 1000 | Frame-rate denominator; the default pair means 60 fps. |\n| `--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. |\n| `--tier` | 0 (main) | AV1 tier: 0 main, 1 high (higher bitrate limits for levels 4.0 and up). Accepted but not listed in `--help`. |\n\n</details>\n\n<details>\n<summary>Preset, tune and threading (8 options)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--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. |\n| `--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. |\n| `--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. |\n| `--pin` | 0 (off) | Pin the encoder to the first N logical cores; 0 disables pinning. |\n| `--ss` | -1 (any) | CPU socket to run on: −1 any, 0 or 1 a specific socket of a two-socket system. |\n| `--fast-decode` | 0 | Decoder-speed optimizations, 0–2 (2 decodes fastest) at a small efficiency cost. Try it before tiles. |\n| `--tune` | 0 (VQ) | 0 VQ, 1 PSNR, 2 SSIM, 3 Subjective SSIM, 4 Still Picture (all-intra images). |\n| `--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. |\n\n</details>\n\n<details>\n<summary>Rate control and passes (21 options)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--rc` | 0 | Rate-control mode: 0 CRF (or CQP with `--aq-mode 0`), 1 VBR, 2 CBR, both with `--tbr`. |\n| `--qp`, `-q` | 35 | Base QP, 1–63: the fixed QP in CQP and the starting point otherwise. For constant quality use `--crf`. |\n| `--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. |\n| `--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`. |\n| `--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. |\n| `--max-qp` | 63 | Highest QP rate control may use, 0–63; mainly for VBR and CBR. |\n| `--min-qp` | 1 | Lowest QP rate control may use in VBR/CBR, 1–63; CRF always uses 1. |\n| `--undershoot-pct` | auto (50 for VBR, 25 for CBR) | How far below the target VBR/CBR may undershoot, in percent (0–100). |\n| `--overshoot-pct` | auto (25) | How far above the target VBR/CBR may overshoot, in percent (0–100). |\n| `--mbr-overshoot-pct` | 50 | Allowed overshoot of `--mbr` in capped CRF, in percent (0–100). |\n| `--gop-constraint-rc` | 0 | Make VBR hit the target within each GOP instead of over the whole clip; useful for chunked or segmented encoding. |\n| `--buf-sz` | 1000 | CBR decoder buffer size in milliseconds (20–10000). |\n| `--buf-initial-sz` | 600 | CBR initial buffer level in milliseconds (20–10000); must be below `--buf-sz`. |\n| `--buf-optimal-sz` | 600 | CBR target buffer level in milliseconds (20–10000). |\n| `--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. |\n| `--minsection-pct` | 0 | VBR: lowest bitrate a GOP may get, as a percentage of the target (0–100). |\n| `--maxsection-pct` | 2000 | VBR: highest bitrate a GOP may get, as a percentage of the target (0–10000). |\n| `--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. |\n| `--stats` | svtav1_2pass.log | Statistics file written by the first pass and read by the second. |\n| `--passes` | 1 | `--passes 2` runs both passes of a VBR two-pass encode in one command. |\n| `--enable-tpl-la` | 1 | Temporal dependency (TPL) model. The library forces it on for CRF/CQP, so 0 only matters in VBR/CBR. |\n\n</details>\n\n<details>\n<summary>Quantization offsets and matrices (20 options)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--use-q-file` | 0 | Take per-frame QPs from `--qpfile` instead of the encoder’s own assignment. |\n| `--qpfile` | none | File with one QP per line, one line per frame, for `--use-q-file 1`. |\n| `--aq-mode` | 2 | Adaptive quantization: 0 off (constant QP), 1 variance-based segments, 2 delta-q from TPL prediction efficiency. |\n| `--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. |\n| `--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. |\n| `--key-frame-chroma-qindex-offset` | 0 | Chroma q-index offset for key frames, −64–63. |\n| `--qindex-offsets` | 0 per layer | Comma-separated luma q-index offsets, one per temporal layer (each −64–63), for `--use-fixed-qindex-offsets`. |\n| `--chroma-qindex-offsets` | 0 per layer | Comma-separated chroma q-index offsets, one per temporal layer (each −64–63). |\n| `--luma-y-dc-qindex-offset` | 0 | Luma DC quantizer offset in q-index steps (−64–63); positive values quantize DC more coarsely. |\n| `--chroma-u-dc-qindex-offset` | 0 | Cb DC quantizer offset in q-index steps (−64–63). |\n| `--chroma-u-ac-qindex-offset` | 0 | Cb AC quantizer offset in q-index steps (−64–63). |\n| `--chroma-v-dc-qindex-offset` | 0 | Cr DC quantizer offset in q-index steps (−64–63). |\n| `--chroma-v-ac-qindex-offset` | 0 | Cr AC quantizer offset in q-index steps (−64–63). |\n| `--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. |\n| `--enable-qm` | 1 | Use quantization matrices, which quantize high frequencies more coarsely than low ones. |\n| `--qm-min` | auto (8; 9 with texture psy-bias ≥3) | Lowest (steepest) luma QM level, 0–15; 15 is flat. |\n| `--qm-max` | 15 | Highest (flattest) luma QM level, 0–15. |\n| `--roi-map-file` | none | Region-of-interest file giving per-block QP offsets for chosen frames. |\n| `--chroma-qm-min` | auto (10; 11 with lineart psy-bias ≥3) | Lowest chroma QM level, 0–15. |\n| `--chroma-qm-max` | 15 | Highest chroma QM level, 0–15. |\n\n</details>\n\n<details>\n<summary>GOP structure and keyframes (10 options)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--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). |\n| `--min-keyint` | -1 (33 frames) | Minimum distance between scene-change keyframes: −1 is 33 frames (129 with `--balancing-q-bias 1`), 0 no minimum. |\n| `--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. |\n| `--scd` | 1 | Scene-change detection: insert keyframes at scene cuts (0 or 1). |\n| `--lookahead` | -1 (auto) | Frames of extra look-ahead for rate control and TPL, 0–120, beyond the mini-GOP and temporal-filter window. |\n| `--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. |\n| `--pred-struct` | 2 (random access) | Prediction structure: 1 low delay, 2 random access (normal for files). 0 all-intra is also accepted. |\n| `--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`). |\n| `--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`. |\n| `--enable-dg` | 1 | Dynamic mini-GOP: adapt the hierarchical structure to the content. |\n\n</details>\n\n<details>\n<summary>Filters and coding tools (16 options)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--auto-tiling` | 0 | Choose tile rows and columns from the resolution to speed up decoding, when they are not set manually. |\n| `--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. |\n| `--tile-columns` | auto | Tile columns as log2 (0–4); at most 128 tiles in total. |\n| `--enable-dlf` | 1 | Deblocking filter: 0 off, 1 on, 2 more accurate and slower. |\n| `--enable-cdef` | auto (on) | CDEF deringing filter, 0 or 1. |\n| `--enable-restoration` | auto (on) | Loop restoration filter (Wiener and self-guided), 0 or 1. |\n| `--enable-mfmv` | -1 (auto) | Motion-field motion vector projection, 0 or 1; −1 lets the preset decide. |\n| `--enable-tf` | 1 | Temporal filtering of alt-ref frames: 0 off, 1 on, 2 adaptive strength per 64×64 block (overrides `--tf-strength`). |\n| `--enable-overlays` | 0 | Insert overlay frames after filtered alt-refs as extra references. Not supported with low delay or multi-pass. |\n| `--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. |\n| `--rmv` | 0 | Restrict motion vectors so they never point outside the picture. |\n| `--max-32-tx-size` | 0 | Limit transforms to 32×32 (0 or 1); can help detail at high-fidelity CRFs. |\n| `--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. |\n| `--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. |\n| `--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. |\n| `--alt-tf-decay` | 0 | Apply tune 0/3’s alt-ref temporal-filter decay to any tune. |\n\n</details>\n\n<details>\n<summary>Super-resolution, resizing and switch frames (13 options)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--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. |\n| `--superres-denom` | 8 | Mode 1 scale: width × 8/denom, 8–16 (8 none, 16 half width). |\n| `--superres-kf-denom` | 8 | Mode 1 scale for key frames, 8–16. |\n| `--superres-qthres` | 43 | Mode 3: frames with QP above this (0–63) use super-resolution. |\n| `--superres-kf-qthres` | 43 | Mode 3 threshold for key frames, 0–63. |\n| `--sframe-dist` | 0 (off) | Insert a switch frame every N frames; S-frames let a decoder switch between streams. |\n| `--sframe-mode` | 2 | S-frame placement: 1 only if that frame is an alt-ref, 2 the next alt-ref. |\n| `--resize-mode` | 0 (off) | Reference scaling (resize frames inside the codec loop): 0 off, 1 fixed, 2 random, 3 dynamic, 4 per-event list. |\n| `--resize-denom` | 8 | Mode 1 scale 8/denom, 8–16. |\n| `--resize-kf-denom` | 8 | Mode 1 scale for key frames, 8–16. |\n| `--frame-resz-events` | none | Mode 4: comma-separated frame numbers (0-based) where a new scale starts. |\n| `--frame-resz-kf-denoms` | none | Mode 4: key-frame denominators (8–16), one per event. |\n| `--frame-resz-denoms` | none | Mode 4: denominators (8–16), one per event. |\n\n</details>\n\n<details>\n<summary>Film grain (8 options)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--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. |\n| `--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. |\n| `--fgs-table` | none | Use a pre-made grain table file (aomenc `--film-grain-table` format) instead of estimating grain. |\n| `--photon-noise` | 0 (off) | Add synthetic photon (sensor) noise through a generated grain table, as an ISO value 1–100000. |\n| `--photon-noise-chroma` | 0 | Also add chroma noise with `--photon-noise`. |\n| `--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. |\n| `--adaptive-film-grain` | 0 | Choose the grain-estimation block size from the resolution, which reduces visible repeating grain patterns. |\n| `--chroma-grain` | 1 | Apply synthesized grain to the chroma planes too. |\n\n</details>\n\n<details>\n<summary>Colour and HDR metadata (11 options)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--color-help` | — | Print the colour-metadata reference (primaries, transfer and matrix names, mastering-display syntax) and exit. |\n| `--enable-hdr` | 0 | Accepted (0 or 1) but read by nothing else in this release; HDR metadata comes from `--mastering-display` and `--content-light`. |\n| `--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. |\n| `--transfer-characteristics` | 2 (unspecified) | Transfer function, 0–22 (`bt709`, `smpte2084` for PQ, `hlg`…). |\n| `--matrix-coefficients` | 2 (unspecified) | YUV matrix, 0–14 (`bt709`, `bt2020-ncl`…). 0 (identity) needs 4:4:4. |\n| `--color-range` | 0 (limited) | 0 limited (studio) range, 1 full range. |\n| `--chroma-sample-position` | unknown | Chroma siting: `unknown`, `vertical`/`left` or `colocated`/`topleft`. |\n| `--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². |\n| `--content-light` | none | Content light level as `MaxCLL,MaxFALL` in cd/m², e.g. `1000,400`. |\n| `--dolby-vision-rpu` | none | Dolby Vision RPU file to embed, frame-aligned with the encode. Requires a build with libdovi. |\n| `--hdr10plus-json` | none | HDR10+ JSON metadata file to embed. Requires a build with hdr10plus support. |\n\n</details>\n\n<details>\n<summary>Psychovisual tuning (18 options)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--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. |\n| `--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. |\n| `--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. |\n| `--enable-alt-curve` | 0 | Alternative Variance Boost curve with different boost trade-offs. |\n| `--sharpness` | 2 | Bias RD decisions toward block sharpness, −14–14. |\n| `--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. |\n| `--frame-luma-bias` | 0 | Spend more bits on dark frames: lowers frame QP based on average luma, strength 0–100. |\n| `--luminance-qp-bias` | 0 | Alias of `--frame-luma-bias`; if both are given, the larger value wins. |\n| `--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. |\n| `--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+. |\n| `--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+. |\n| `--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. |\n| `--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+. |\n| `--satd-bias` | auto (0.0) | Add SATD to the distortion measure, 0.0–16.0; upstream suggests trying 0.5. |\n| `--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. |\n| `--low-q-taper` | 0 | Taper Variance Boost so that boosted blocks do not reach extremely low q (below q 11). |\n| `--sharp-tx` | 1 | Sharp transform optimizations: cleaner detail with a slightly higher risk of artifacts; pair with `--ac-bias`. |\n| `--alt-ssim-tuning` | 0 | Tunes 2 and 4: add VQ optimizations and an alternative SSIM calculation. |\n\n</details>\n\n<details>\n<summary>Psy-bias controls (20 options)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--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. |\n| `--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. |\n| `--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. |\n| `--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). |\n| `--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`. |\n| `--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`. |\n| `--psy-bias-mds0-sad` | auto (0) | Use SAD in the first mode-decision stage; auto on with lineart psy-bias 2+ or texture 3+. |\n| `--psy-bias-disable-warped-motion` | auto (0) | Disable warped motion; auto on with lineart psy-bias 3+. |\n| `--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. |\n| `--psy-bias-disable-sgrproj` | auto (0) | Disable the self-guided restoration filter; auto on with lineart psy-bias 4+. |\n| `--psy-bias-coeff-lvl-offset` | auto (0) | Offset the encoder’s coefficient-level classification, −3–3; auto 2 with texture psy-bias 5+. |\n| `--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+. |\n| `--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+. |\n| `--psy-bias-qm-bias` | auto (0) | Use higher QM levels in higher temporal layers; auto on with psy-bias 2+. |\n| `--psy-bias-sharpness-rounding` | auto (64; 48 for tune 3) | Quantization rounding offset, 1–256. |\n| `--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. |\n| `--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. |\n| `--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. |\n| `--high-quality-encode-psy-bias` | auto (0) | High-quality mode for several features; auto on when a psy-bias is set and CRF ≤24. |\n| `--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. |\n\n</details>\n\n<details>\n<summary>Balancing (TPL) controls (8 options)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--balancing-q-bias` | auto (0; 1 with psy-bias) | Bias TPL at frame and superblock level toward detail retention (0 or 1). |\n| `--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+. |\n| `--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`. |\n| `--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. |\n| `--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. |\n| `--balancing-luminance-lambda-bias` | auto (0.0) | Bias the mode-decision lambda in dark superblocks, 0.0–0.999. |\n| `--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. |\n| `--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. |\n\n</details>\n\n<details>\n<summary>Deblocking and CDEF bias (12 options)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--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. |\n| `--dlf-sharpness` | auto (1) | Deblocking sharpness, 0–7, also usable without `--dlf-bias`; auto 7 with lineart psy-bias 5+ and texture below 4. |\n| `--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. |\n| `--dlf-bias-min-dlf` | auto (2,0) | Minimum deblocking strength as `luma,chroma`; strength 0 is not tried when the minimum is above 0. |\n| `--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. |\n| `--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. |\n| `--cdef-bias-min-cdef` | auto (0,0,0,0) | Minimum CDEF strengths in the same order; strength 0 is always tried. |\n| `--cdef-bias-max-sec-cdef-rel` | 0 | Cap each block’s secondary CDEF strength at its primary strength plus this value, −12–4. |\n| `--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. |\n| `--texture-cdef-bias-min-cdef` | auto (follows `--cdef-bias-min-cdef`) | Minimum CDEF strengths in low-variance regions. |\n| `--texture-cdef-bias-max-sec-cdef-rel` | 0 | `--cdef-bias-max-sec-cdef-rel` for low-variance regions. |\n| `--cdef-bias-damping-offset` | 0 | Offset the CDEF damping that is normally derived from each frame’s q-index, −4–8. |\n\n</details>\n"
}
