rivet
A modular, GPU-accelerated video transcoding library.
rivet bundles two lower-level crates — [codec] (decode / encode /
colorspace / probe) and [container] (demux / mux / CMAF / HLS) — behind
a small, ergonomic facade for the common case: take an arbitrary input
file and produce a single AV1 + Opus MP4.
Output policy
The output codec is AV1 (video) + Opus / AAC passthrough (audio)
muxed into MP4. This is a deliberate, royalty-clean target — see the
project README. Input may be any container/codec the [container] and
[codec] crates can demux + decode (H.264, HEVC, VP8/VP9, AV1, MPEG-2,
MPEG-4, ProRes; MP4/MOV/MKV/WebM/MPEG-TS/AVI).
Quick start
// Transcode a file on disk to an AV1/Opus MP4.
let outcome = rivet::transcode_file("input.mkv", "output.mp4")?;
println!("{} frames, {} bytes out", outcome.frames_processed, outcome.output_bytes.len());
// Or inspect an input without transcoding it.
let info = rivet::probe_file("input.mkv")?;
println!("{}x{} {} @ {:.3} fps", info.width, info.height, info.video_codec, info.frame_rate);
# Ok::<(), anyhow::Error>(())
Lower-level access
The component crates are re-exported for callers that need finer control than the facade offers (custom encoder configs, segment-level CMAF output, per-frame access, etc.):
use EncoderConfig;
use Av1Mp4Muxer;