{
  "schemaVersion": 1,
  "contentVersion": "ca42e61ede0a24f789d7287a0001244ad22f4abf",
  "id": "docs/guides/av1-with-svt-av1",
  "collection": "docs",
  "title": "AV1 with SVT-AV1",
  "description": "Encode AV1 with mainline SVT-AV1 through FFmpeg or SvtAv1EncApp, with sensible presets, CRF values, 10-bit output, film-grain synthesis and keyframe settings.",
  "canonicalUrl": "https://encode.wiki/guides/av1-with-svt-av1/",
  "apiUrl": "https://encode.wiki/api/v1/documents/docs/guides/av1-with-svt-av1.json",
  "markdownUrl": "https://encode.wiki/api/v1/markdown/docs/guides/av1-with-svt-av1.md",
  "status": "current",
  "tags": [
    "av1",
    "encoding",
    "tutorial"
  ],
  "license": "CC BY-SA 4.0",
  "dates": {
    "lastVerified": "2026-10-08T00:00:00.000Z"
  },
  "authors": [],
  "sources": [
    {
      "title": "SVT-AV1 v4.2.0 — parameters",
      "url": "https://gitlab.com/AOMediaCodec/SVT-AV1/-/blob/v4.2.0/Docs/Parameters.md",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "SVT-AV1 v4.2.0 — using SVT-AV1 within FFmpeg",
      "url": "https://gitlab.com/AOMediaCodec/SVT-AV1/-/blob/v4.2.0/Docs/Ffmpeg.md",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "SVT-AV1 v4.2.0 — common questions (presets, GOP, grain, 10-bit, multi-pass)",
      "url": "https://gitlab.com/AOMediaCodec/SVT-AV1/-/blob/v4.2.0/Docs/CommonQuestions.md",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "SVT-AV1 v4.2.0 — Variance Boost appendix",
      "url": "https://gitlab.com/AOMediaCodec/SVT-AV1/-/blob/v4.2.0/Docs/Appendix-Variance-Boost.md",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "SVT-AV1 v4.2.0 — encoder API defaults (EbSvtAv1Enc.h)",
      "url": "https://gitlab.com/AOMediaCodec/SVT-AV1/-/blob/v4.2.0/Source/API/EbSvtAv1Enc.h",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "FFmpeg libsvtav1 wrapper at n9.0.2",
      "url": "https://github.com/FFmpeg/FFmpeg/blob/n9.0.2/libavcodec/libsvtav1.c",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    }
  ],
  "headings": [
    {
      "depth": 2,
      "text": "Preset",
      "anchor": "preset"
    },
    {
      "depth": 2,
      "text": "CRF",
      "anchor": "crf"
    },
    {
      "depth": 2,
      "text": "Tune",
      "anchor": "tune"
    },
    {
      "depth": 2,
      "text": "10-bit output",
      "anchor": "10-bit-output"
    },
    {
      "depth": 2,
      "text": "Film grain",
      "anchor": "film-grain"
    },
    {
      "depth": 2,
      "text": "Keyframe interval",
      "anchor": "keyframe-interval"
    },
    {
      "depth": 2,
      "text": "Other useful options",
      "anchor": "other-useful-options"
    },
    {
      "depth": 2,
      "text": "Using SvtAv1EncApp directly",
      "anchor": "using-svtav1encapp-directly"
    },
    {
      "depth": 2,
      "text": "Chunked encoding with Av1an",
      "anchor": "chunked-encoding-with-av1an"
    }
  ],
  "sections": [
    {
      "id": "_preamble",
      "title": "Page introduction",
      "depth": 0,
      "canonicalUrl": "https://encode.wiki/guides/av1-with-svt-av1/",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/_preamble.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/_preamble.md",
      "checksum": "044b6422e8c32a14828bf24220caa4093a07cae061a21ad7c27f2db41ff32790",
      "bytes": 831
    },
    {
      "id": "preset",
      "title": "Preset",
      "depth": 2,
      "anchor": "preset",
      "canonicalUrl": "https://encode.wiki/guides/av1-with-svt-av1/#preset",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/preset.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/preset.md",
      "checksum": "1f2ca1670ff4e06ea554eea13da779ed3ddae22746f0d18c81c9516a4c8e88c3",
      "bytes": 1019
    },
    {
      "id": "crf",
      "title": "CRF",
      "depth": 2,
      "anchor": "crf",
      "canonicalUrl": "https://encode.wiki/guides/av1-with-svt-av1/#crf",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/crf.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/crf.md",
      "checksum": "3bf7e8ebd51821932b68ab20bdc8049ba2402279ba788362bbe86c038f74fa62",
      "bytes": 546
    },
    {
      "id": "tune",
      "title": "Tune",
      "depth": 2,
      "anchor": "tune",
      "canonicalUrl": "https://encode.wiki/guides/av1-with-svt-av1/#tune",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/tune.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/tune.md",
      "checksum": "29b84e9b646207f65f6659441a809451de4a201b22100e7bcb5ded0d728732b8",
      "bytes": 345
    },
    {
      "id": "10-bit-output",
      "title": "10-bit output",
      "depth": 2,
      "anchor": "10-bit-output",
      "canonicalUrl": "https://encode.wiki/guides/av1-with-svt-av1/#10-bit-output",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/10-bit-output.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/10-bit-output.md",
      "checksum": "938fce275a444c3991f36966402b52578ca93847c703eb4237c44333804b421e",
      "bytes": 382
    },
    {
      "id": "film-grain",
      "title": "Film grain",
      "depth": 2,
      "anchor": "film-grain",
      "canonicalUrl": "https://encode.wiki/guides/av1-with-svt-av1/#film-grain",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/film-grain.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/film-grain.md",
      "checksum": "f69cccd96ca7b978999bd8b8e2a28c4f2cc22bdaaa2f102cac35b62b8835e5ad",
      "bytes": 1688
    },
    {
      "id": "keyframe-interval",
      "title": "Keyframe interval",
      "depth": 2,
      "anchor": "keyframe-interval",
      "canonicalUrl": "https://encode.wiki/guides/av1-with-svt-av1/#keyframe-interval",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/keyframe-interval.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/keyframe-interval.md",
      "checksum": "5df90573670b84d733d17cff40f714bf97bc6aca42eb18a6e2975ae161f69aea",
      "bytes": 638
    },
    {
      "id": "other-useful-options",
      "title": "Other useful options",
      "depth": 2,
      "anchor": "other-useful-options",
      "canonicalUrl": "https://encode.wiki/guides/av1-with-svt-av1/#other-useful-options",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/other-useful-options.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/other-useful-options.md",
      "checksum": "b025acfab51f22d5b7a9a5e306d2cf317acd8fb7ad2f504bc94f2112459cfa26",
      "bytes": 989
    },
    {
      "id": "using-svtav1encapp-directly",
      "title": "Using SvtAv1EncApp directly",
      "depth": 2,
      "anchor": "using-svtav1encapp-directly",
      "canonicalUrl": "https://encode.wiki/guides/av1-with-svt-av1/#using-svtav1encapp-directly",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/using-svtav1encapp-directly.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/using-svtav1encapp-directly.md",
      "checksum": "eac8c14da0eb2e5c18b487744a05063c3686aaee23c02195f0a9342240348276",
      "bytes": 1065
    },
    {
      "id": "chunked-encoding-with-av1an",
      "title": "Chunked encoding with Av1an",
      "depth": 2,
      "anchor": "chunked-encoding-with-av1an",
      "canonicalUrl": "https://encode.wiki/guides/av1-with-svt-av1/#chunked-encoding-with-av1an",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/chunked-encoding-with-av1an.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/guides/av1-with-svt-av1/chunked-encoding-with-av1an.md",
      "checksum": "bef0057d72c302f36f55da8d10ea23ad31cc1701fdc7f892e8f50a83c1799bc4",
      "bytes": 434
    }
  ],
  "outboundReferences": [
    "/guides/audio-and-subtitles/",
    "/guides/preserve-color-and-hdr/",
    "/tools/software-encoders/svt-av1-hdr/",
    "/tools/software-encoders/svt-av1/",
    "/tools/utilities/av1an/"
  ],
  "checksum": "61287f65c69dd733d86cb20b01461be9f10ada5f685d6d851f0801fe0b1b3552",
  "contentFormat": "markdown",
  "markdown": "SVT-AV1 is the AV1 encoder hosted by AOMedia. It is fast, scales well across CPU cores, and gives\nexcellent compression at its slower presets. The current release is v4.2.0. The easiest way to use\nit is through FFmpeg's `libsvtav1` encoder.\n\n```sh\nffmpeg -i input.mkv -c:v libsvtav1 -preset 4 -crf 30 -pix_fmt yuv420p10le \\\n  -svtav1-params tune=0:enable-variance-boost=1:keyint=10s -c:a copy output.mkv\n```\n\nThat is a sound starting point for a high-quality 1080p encode. The audio is copied unchanged; the\n[audio and subtitles guide](/guides/audio-and-subtitles/) covers re-encoding it. Settings that are not FFmpeg options\ngo in `-svtav1-params` as colon-separated `key=value` pairs, using the same names as the standalone\nencoder without the leading dashes. The sections below explain each choice and the options worth\nadding.\n\n## Preset\n\nPresets run from 0 (slowest, most efficient) to 13 (fastest); negative values are for debugging.\nThe default is 8.\n\n| Presets | Typical use                                                                                       |\n| ------- | ------------------------------------------------------------------------------------------------- |\n| 2–3     | Maximum efficiency when encode time does not matter much. Much slower than 4.                     |\n| 4–6     | The usual range for quality encodes at home: a good balance of efficiency and time.               |\n| 7–9     | Faster encodes with a noticeable efficiency loss.                                                 |\n| 10–13   | Real-time and automation use. The encoder warns that visual artifacts may occur at these presets. |\n\nOutside real-time mode (`rtc=1`), presets 12 and 13 run as 11.\n\nUse the lowest preset you can afford. In CRF mode SVT-AV1's multithreading does not change the\noutput, so CPU count affects speed but not quality.\n\n## CRF\n\nCRF ranges from 1 to 70; the default is 35. Lower is better quality and larger. Upstream suggests\nstarting around 30 for 1080p and uses 25 in its high-efficiency VOD example. 2D animation usually\nholds up well at higher values than live action. FFmpeg's own `-crf` option takes integers up to\n63 (`-crf 27.5` becomes 28); set `-svtav1-params crf=…` for quarter steps or higher values.\n\nSVT-AV1 CRF values are not comparable with x264 or x265 values. The wider range means a given\nquality sits at a higher number than in those encoders.\n\n## Tune\n\nThe default is `tune=1`, which optimizes for PSNR. `tune=0` (visual quality) is designed to look\nbetter to people, usually with more retained sharpness, at the cost of PSNR scores. Use `tune=0`\nfor anything meant to be watched. The other tunes (SSIM, MS-SSIM, VMAF, and IQ for still images)\ntarget metrics or images, not video viewing.\n\n## 10-bit output\n\nUse `-pix_fmt yuv420p10le` even for 8-bit sources. Encoding at 10 bits uses less rounding inside the\nencoder and reduces banding in gradients and dark areas, for little extra size and little extra\nencoding time. AV1's Main profile includes 10-bit 4:2:0, so every AV1 decoder, hardware included,\ncan play it. Without `-pix_fmt`, SVT-AV1 keeps the source bit depth.\n\n## Film grain\n\nGrain and sensor noise are random, so they take a lot of bits to encode faithfully. AV1 can\ndescribe grain with a small set of parameters and let the decoder add synthetic grain on top of a\ncleaner picture. `film-grain=N` turns this on; N is the strength (0–50).\n\n| Source                             | Starting film-grain |\n| ---------------------------------- | ------------------- |\n| Live action with normal grain      | 8                   |\n| Heavy grain or noise               | 10–15               |\n| Hand-drawn 2D animation            | 4–6                 |\n| Clean or CGI sources with no grain | Leave it off        |\n\n`film-grain-denoise` controls what happens to the source grain:\n\n- **`film-grain-denoise=0`** (the default since v2.0.0) keeps the source as it is and adds synthetic\n  grain on top. This preserves the most detail, but the encoder still spends bits on the real grain,\n  and too high a level stacks extra noise on the picture.\n- **`film-grain-denoise=1`** denoises the source before encoding and lets the synthetic grain replace\n  it. This saves the most bits, but the denoiser can also remove fine detail such as small\n  particles or skin texture.\n\n```sh\nffmpeg -i input.mkv -c:v libsvtav1 -preset 4 -crf 30 -pix_fmt yuv420p10le \\\n  -svtav1-params tune=0:enable-variance-boost=1:keyint=10s:film-grain=8 -c:a copy output.mkv\n```\n\nCheck the result at normal speed, since grain is a moving texture. Grain synthesis is meant for\npresets 6 and below; the encoder warns about the compute cost above that. Synthetic grain lowers\nfull-reference metric scores even when it looks right, because it does not match the source grain\npixel for pixel.\n\n## Keyframe interval\n\nBy default SVT-AV1 inserts a keyframe about every 5 seconds (160 frames at 24 fps). Keyframes are\nlarge, so a longer interval improves efficiency at the cost of slower seeking. For local playback,\n5–10 seconds is common, which is why the starting command sets `keyint=10s`. FFmpeg's `-g` sets the\nsame thing in frames (`-g 240` at 24 fps) but has no seconds form. Video-on-demand streaming\ntypically uses keyframes about once per second.\n\nSVT-AV1 never places keyframes at scene changes; `scd=1` is ignored with a warning. For\nscene-aligned keyframes, encode in scene chunks with [Av1an](/tools/utilities/av1an/).\n\n## Other useful options\n\n| Option                    | Default | What it does                                                                                                          |\n| ------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------- |\n| `enable-variance-boost=1` | 0       | Gives more bits to low-contrast areas (skin, clouds, dark and foggy scenes) that otherwise blur or band.              |\n| `variance-boost-strength` | 2       | 1–4. Upstream recommends 2 for most content, 1 for flat animation and 3 for films mixing very dark and bright scenes. |\n| `ac-bias`                 | 0.0     | Energy-preserving psychovisual bias, similar to x264/x265 psy-rd. Upstream suggests 1.0–1.5 for texture retention.    |\n| `fast-decode=1` or `2`    | 0       | Tunes the encode so it decodes faster on weak devices; 2 is the stronger level.                                       |\n\n## Using SvtAv1EncApp directly\n\nThe standalone encoder accepts every option, including some not exposed through FFmpeg. Feed it\nY4M from FFmpeg:\n\n```sh\nffmpeg -i input.mkv -pix_fmt yuv420p10le -strict -1 -f yuv4mpegpipe - | \\\n  SvtAv1EncApp -i - --preset 4 --crf 30 --tune 0 --enable-variance-boost 1 --keyint 10s -b video.ivf\n```\n\nFFmpeg needs `-strict -1` to write 10-bit Y4M. The output is a bare IVF video stream. Mux it with the\naudio, subtitles and chapters from the source:\n\n```sh\nmkvmerge -o output.mkv video.ivf --no-video input.mkv\n```\n\nY4M does not carry color metadata. For HDR sources, pass it on the command line, for example\n`--color-primaries bt2020 --transfer-characteristics smpte2084 --matrix-coefficients bt2020-ncl`\nplus `--mastering-display` and `--content-light` with the source's values. FFmpeg's `libsvtav1`\npasses the color tags and static HDR metadata through automatically. See\n[preserve color and HDR](/guides/preserve-color-and-hdr/), and the\n[SVT-AV1-HDR fork](/tools/software-encoders/svt-av1-hdr/) for HDR10+ and Dolby Vision work.\n\n## Chunked encoding with Av1an\n\nEven with good threading, one SVT-AV1 process does not keep a large CPU fully busy at slow presets.\n[Av1an](/tools/utilities/av1an/) splits the video at scene changes, encodes the chunks in parallel,\nand can pick a CRF per scene to hit a quality target. It is the usual tool for long, high-quality\nAV1 encodes.\n\nThe [SVT-AV1 encoder page](/tools/software-encoders/svt-av1/) covers the full option set.\n"
}
