avxs is an AV1 encoding service written in Rust, distributed as a Docker image and a self-contained Linux AppImage. Drop videos and an encode.toml profile into a folder - avxs picks them up, splits each file into scenes, encodes the chunks in parallel with SVT-AV1, and merges everything into a finished MKV.
- Scene-based encoding - splits files into scenes via av-scenechange, encodes all chunks in parallel, and resumes from the last completed chunk if interrupted
- HDR passthrough - auto-detects HDR10 and HLG, passes color metadata to the encoder automatically
- Auto-crop - detects and removes black bars
- Auto-scale - downscales to a target height
- Auto-keyint - derives
--keyintfrom source FPS for a ~5 s keyframe interval - Audio control - copy or re-encode per codec, language whitelist, per-codec rules
- Subtitle control - copy or strip, language whitelist
services:
avxs:
image: ivenos/avxs:latest
volumes:
- ./input:/input
- ./output:/output
environment:
- AVXS_POLL_INTERVAL=60
restart: unless-stoppedGrab the latest AppImage for your architecture from the releases page, or run:
ARCH=$(uname -m)
wget "https://github.com/ivenos/avxs/releases/latest/download/avxs-${ARCH}.AppImage"
chmod +x "avxs-${ARCH}.AppImage"
"./avxs-${ARCH}.AppImage"avxs creates ./input/ and ./output/ next to its working directory and watches them. All required tools (ffmpeg, mkvmerge, SvtAv1EncApp, ffmsindex, libffms2) are bundled inside the AppImage - nothing else to install.
Place an encode.toml next to your video files and configure your encoding profile. See docs.md for the full reference.
Encoded files land flat in the output directory. Source files are moved to input/processed/ after a successful encode.
| Variable | Default | Description |
|---|---|---|
AVXS_INPUT_DIR |
./input |
Input directory |
AVXS_OUTPUT_DIR |
./output |
Output directory |
AVXS_POLL_INTERVAL |
60 |
Directory scan interval in seconds |
RUST_LOG |
info |
Log verbosity. Set to debug for verbose output |
The official Docker image presets AVXS_INPUT_DIR=/input and AVXS_OUTPUT_DIR=/output, which is why the Compose example above mounts to those paths.
For AppImage, prefix the command: RUST_LOG=debug ./avxs-x86_64.AppImage.
encoder value |
Binary | Version |
|---|---|---|
svt-av1 |
SvtAv1EncApp |
v4.1.0 |
svt-av1-hdr |
SvtAv1EncApp-hdr |
v4.1.0 |
BSL 1.1 - free for personal and non-commercial use.