AV1Converter
A terminal-based interactive tool to batch convert video files to the AV1 codec using FFmpeg. It auto-detects available hardware encoders, verifies output quality with VMAF, and manages the full encoding pipeline through a TUI.
Features
- Interactive TUI — Browse files, configure tracks, and monitor encoding progress in the terminal
- Two operating modes — Re-encode to AV1, or demux/remux to repackage and strip tracks without recompression
- Hardware acceleration — Automatically detects and uses NVIDIA NVENC, Intel QSV, or AMD AMF; the choice can be overridden manually in Settings
- Batch processing — Convert a single file, a folder, or an entire directory tree recursively
- Smart preset selection — Automatically picks encoding parameters based on resolution and HDR type
- Dolby Vision support — Keep Dolby Vision in the AV1 output (profile 10) or convert to true HDR10 with static metadata; profile 5 sources are tone-mapped on the GPU
- Quality presets — Low, Medium, or High shifts CRF/CQ values across every resolution tier at once; Custom leaves each tier's values manually editable
- VMAF quality verification — Scores output quality after encoding; deletes source file if the threshold is met
- Track selection — Auto-selects audio and subtitle tracks by preferred language; Selects all tracks or first track when no match is found
- Multi-language UI — Interface available in English (default), Italian, Spanish, French, German, and Chinese; selectable in Settings
- Configurable — All key settings adjustable through the built-in configuration screen or
~/.config/av1converter/config.toml
Prerequisites
ffmpeg and ffprobe must be on your PATH. FFmpeg 8.0 or newer is required for Dolby Vision passthrough ("Dolby Vision profile 10 support in AV1" landed in 8.0; the tool is developed and tested against 8.1).
Not every FFmpeg build includes every feature this tool uses. What you need depends on which features you use:
| FFmpeg capability | Needed for | Required? |
|---|---|---|
libsvtav1 |
Software AV1 encoding; Dolby Vision passthrough (AV1 profile 10) | Yes, unless you only use hardware encoders |
libvmaf |
VMAF quality verification (and source auto-deletion, which depends on it) | Optional |
libplacebo + a working Vulkan driver |
Dolby Vision profile 5 → HDR10 tone-mapping | Optional — only for DV profile 5 conversion |
av1_nvenc / av1_qsv / av1_amf |
Hardware encoding (needs a matching GPU driver: NVIDIA driver, Intel media driver + libvpl, or AMD AMF runtime) | Optional |
Check what your build supports:
| | |
Platform notes:
- Arch Linux —
pacman -S ffmpegincludes all of the above. For DV profile 5 tone-mapping also install your GPU's Vulkan driver (vulkan-radeon,vulkan-intel, ornvidia-utils). - Debian/Ubuntu — the distro
ffmpegincludeslibsvtav1, but is often older than 8.0 (no DV passthrough — selecting "keep Dolby Vision" will fail);libvmafandlibplaceboalso vary by release. Verify with the commands above. - Fedora — use the FFmpeg from RPM Fusion; the freeworld build includes
libsvtav1andlibvmaf. - macOS —
brew install ffmpegincludeslibsvtav1andlibvmafbut notlibplacebo/Vulkan: everything works except DV profile 5 → HDR10 tone-mapping (keeping DV still works for profile 5). - Windows — the full builds from gyan.dev or BtbN (GPL variant) include everything.
Installation
The compiled binary will be at target/release/av1converter.
Usage
No command-line arguments are needed. All interaction happens through the TUI.
Workflow
- Home menu — Choose to open a single file, a folder, or a folder recursively
- File selection — Navigate with arrow keys;
Spaceto toggle,Enterto confirm - Track configuration — Select audio and subtitle tracks to include, and switch the per-file mode (encode or demux/remux) with
r - File review — Confirm the queue before encoding starts
- Encoding — Monitor per-file and overall progress;
Escto cancel - VMAF verification — Quality score is computed after each file; source is deleted if the score meets the threshold (encode mode only)
- Finish — View a summary of conversions, skipped files, and space saved
Modes
Each file in the queue is processed in one of two modes. The mode is chosen per file on the track configuration screen and can be toggled with r.
Encode Mode (Encode Video → AV1)
The default mode for non-AV1 sources. The video stream is re-encoded to AV1 using the detected hardware or software encoder, with parameters chosen automatically from the resolution and HDR format (see Encoding Presets). Selected audio and subtitle tracks are copied into the output. Output is written to the configured container (e.g. mkv) with the configured suffix (default _av1), and the result is verified with VMAF before the source can be deleted.
Demux/Remux Mode (Remux Only → Copy Video)
A fast, lossless repackaging mode that copies the video, audio, and subtitle streams without recompression (-c copy). Use it to change the container, drop unwanted audio/subtitle tracks, or clean up files that are already AV1 — no quality is lost and the operation is near-instant since nothing is re-encoded. The output keeps the source file's container extension and uses the _remux suffix. Because no encoding happens, VMAF verification is skipped.
Files that are already encoded in AV1 default to demux/remux mode automatically; everything else defaults to encode mode.
Dolby Vision Handling
When a Dolby Vision source is queued for encoding, a dialog asks how to convert it (reopen it anytime with d):
- AV1 with Dolby Vision (profile 10) — the DV dynamic metadata (RPU) is carried into the AV1 stream. Requires the SVT-AV1 encoder; hardware encoders (NVENC/QSV/AMF) cannot write the RPU and always produce HDR10. For cross-compatible profiles (7/8) the HDR10 base layer is preserved, so players without DV support still get correct HDR10 playback.
- AV1 with true HDR10 — the DV layer is dropped and the HDR10 static metadata (mastering display, MaxCLL/MaxFALL) from the source is written into the AV1 stream.
Profile 5 sources (IPT-PQ-c2, no HDR10-compatible base layer) are special: converting to HDR10 tone-maps the video on the GPU via libplacebo (requires Vulkan), while keeping DV produces output that only plays correctly on DV-capable players. HDR10 conversion is the recommended default for profile 5; keeping DV is recommended for profiles 7/8. VMAF verification is skipped for tone-mapped profile 5 output, since the pixels are intentionally changed.
Keyboard Controls
| Key | Action |
|---|---|
↑ / k, ↓ / j |
Navigate |
Enter |
Select / Confirm |
Space |
Toggle file selection |
Esc |
Go back / Cancel |
Tab |
Switch focus (track config screen) |
r |
Switch mode: encode ↔ demux/remux (track config screen) |
d |
Change Dolby Vision handling (track config screen, DV sources) |
a |
Toggle all audio tracks |
s |
Toggle all subtitle tracks |
h / l |
Decrease / Increase config value |
s |
Save configuration (config screen) |
q |
Quit (with confirmation) |
Encoding Presets
Presets are selected automatically based on resolution and HDR format:
| Resolution | HDR | Preset | VMAF Model |
|---|---|---|---|
| SD (≤480p) | No | SD | vmaf_v0.6.1 |
| HD (720p) | No | HD | vmaf_v0.6.1 |
| 1080p | No | 1080p SDR | vmaf_v0.6.1 |
| 1080p | Yes (HDR10/HLG) | 1080p HDR | vmaf_v0.6.1neg |
| 1080p | Dolby Vision | 1080p DV | vmaf_v0.6.1neg |
| 4K | No | 4K SDR | vmaf_4k_v0.6.1 |
| 4K | Yes (HDR10/HLG) | 4K HDR | vmaf_4k_v0.6.1neg |
| 4K | Dolby Vision | 4K DV | vmaf_4k_v0.6.1neg |
Files already encoded in AV1 are automatically skipped.
Encoder Detection
The tool detects available encoders at startup with the following priority:
- NVIDIA NVENC (
av1_nvenc) — RTX 40/50 series and compatible Ada/L-series GPUs - Intel Quick Sync (
av1_qsv) — Intel Arc GPUs (Linux/Windows only) - AMD AMF (
av1_amf) — RDNA3 architecture, RX 7000 series (Linux/Windows only) - SVT-AV1 (
libsvtav1) — Software fallback; always used on macOS
Configuration
Configuration is stored at ~/.config/av1converter/config.toml and can be edited directly or through the built-in configuration screen.
= "en" # UI language: en, it, es, fr, de, zh (English if omitted)
= "SvtAv1" # Selected encoder: Nvenc, Qsv, Amf, SvtAv1 (auto-detected on first run, then overridable)
= "medium" # Quality preset: low, medium, high, custom
[]
= 90.0 # VMAF score required to consider encoding successful (0–100)
= true # Enable/disable VMAF verification after encoding
= false # Delete source file when VMAF score meets threshold
[]
= 4 # SVT-AV1 preset: 0 (slowest) – 13 (fastest)
= "p4" # NVENC preset: p1 (best quality) – p7 (fastest)
[]
= "_av1" # Appended to output filenames
= "mkv" # Output container (mkv, mp4, …)
= true # Write output next to source file
= null # Custom output path (used when same_directory = false)
[]
= ["eng", "ita"]
= ["eng"]
= true # Select all tracks if no preferred language is found
Each resolution preset also exposes per-encoder quality values (crf, nvenc_cq, qsv_quality, amf_quality) and film_grain synthesis strength.
quality_preset controls how those per-resolution values are managed: low, medium, and high apply built-in CRF/CQ values shifted across every tier at once (overwriting the presets table), while custom leaves the presets table untouched and editable, either directly in the file or via the RF fields on the configuration screen.
output_directory can only be set by editing the file directly; the configuration screen exposes same_directory but not a path picker.
Debugging
Set the AV1_DEBUG environment variable to enable log output:
AV1_DEBUG=1
Logs are written to:
- macOS/Linux:
~/.local/share/av1converter/av1converter.log - Windows:
%APPDATA%\av1converter\av1converter.log