freeMKV

4K UHD, Blu-ray, and DVD recovery — done right.

Every readable byte. Every label. Every track. One static binary, no dependencies.

Three ways to use it

$

Rip

Disc to MKV in one command. AACS + CSS decryption. HEVC / HDR10 / Dolby Vision passthrough. TrueHD, DTS-HD MA, Atmos. Chapters, subtitles, every audio track preserved.

Stream

Seven stream types — disc, ISO, MKV, M2TS, network, stdio, null. URL-addressable. Pipe to ffmpeg, stream over LAN, remux between formats. The same primitives the rip pipeline uses.

Automate

Docker container with built-in web dashboard. Insert a disc, get an MKV on your NAS. TMDB titles + posters, organized into Movies/Title (Year)/, Jellyfin / Discord / n8n webhooks.

See it work

$ freemkv disc:// mkv://Dune.mkv freemkv 0.18.4 Opening disc:///dev/sg1...OK Scanning...Dune: Part Two (UHD, AACS: Encrypted) HEVC 2160p HDR10 TrueHD Atmos 7.1 eng AC-3 5.1 eng · AC-3 5.1 fra · TrueHD 5.1 deu PGS eng · PGS eng SDH · PGS fra · PGS deu · +9 more 19 chapters Ripping title 1 of 1... ██████████████████████████████████ 78% · 52.3 / 67.1 GB · 18.2 MB/s · ETA 14:22

Features

4K UHD · Blu-ray · DVD — every disc format, every codec, one tool
Multi-pass damage recovery — sweep + targeted retry on bad sectors. If your kernel can read it, freemkv can read it.
AACS 1.0 / 2.0 + CSS — transparent decryption with KEYDB lookup, no extra tooling
HDR10 · Dolby Vision — passthrough with correct dynamic-range metadata in MKV
Stream labels — recovers commentary / SDH / descriptive flags and codec variants from BD-J authoring data the BD spec doesn't expose. Unique to freemkv.
Chapters + subtitles — every chapter mark, every PGS / VobSub track, forced flags preserved
Firmware unlock — removes drive riplock for full-speed reads on supported BD/UHD drives
7 stream types — disc, ISO, MKV, M2TS, network, stdio, null. URL-addressable, composable.
Batch mode — rip every main title in one command, organized by playlist + chapter
Pure Rust — single static binary, no runtime dependencies, library published on crates.io
AGPL-3.0 — truly open source. No telemetry, no phone-home, no ads.
Containerized end-to-end pipeline — the included autorip service automates the whole loop: insert disc → rip → tag → file → notify

Autorip

Insert a disc. Get an MKV.

Docker container with a built-in web dashboard. Detects disc insertion, rips to MKV, looks up the title on TMDB, organizes into your media library, triggers a Jellyfin scan, and ejects. Hands-free.

Configurable webhooks for Discord, Jellyfin, n8n, or any HTTP endpoint. Supports MKV, M2TS, ISO, and network output formats. Multi-pass recovery + abort-on-loss thresholds for damaged discs.

$ docker run -d --privileged \ -v /dev:/dev \ -v ./config:/config \ -v /mnt/media:/output \ -p 8080:8080 \ ghcr.io/freemkv/autorip:latest

Open localhost:8080. Configure KEYDB URL and TMDB key in Settings. Insert disc. --privileged and /dev:/dev are both required for optical drive access. Full compose example →

Install

Linux

curl -sL https://github.com/freemkv/freemkv/releases/latest/download/freemkv-x86_64-unknown-linux-musl.tar.gz | tar xz
Download

macOS

curl -sL https://github.com/freemkv/freemkv/releases/latest/download/freemkv-aarch64-apple-darwin.tar.gz | tar xz
Download

From Source

cargo install freemkv
crates.io
DVD works out of the box. Blu-ray and UHD require a KEYDB.cfg for AACS decryption.

Streams

Any source to any destination

StreamInputOutputURL
DiscYesdisc://
ISOYesYesiso://image.iso
MKVYesYesmkv://path
M2TSYesYesm2ts://path
NetworkYesYesnetwork://host:port
StdioYesYesstdio://
NullYesnull://
# Rip disc to MKV
freemkv disc:// mkv://Movie.mkv

# ISO to MKV
freemkv iso://disc.iso mkv://Movie.mkv

# Remux M2TS to MKV
freemkv m2ts://Movie.m2ts mkv://Movie.mkv

# Stream over network
freemkv disc:// network://10.1.7.11:9000

# Pipe to ffmpeg
freemkv disc:// stdio:// | ffmpeg -i pipe:0 -c:v libx265 output.mp4