ff-preview
Real-time video preview and proxy workflow for Rust. Provides frame-accurate seek, audio-master A/V sync, a FrameSink trait for custom renderers, RGBA pixel delivery, and proxy generation with transparent auto-substitution.
Project status (as of 2026-06-04): The library foundation is in place. Development continues through avio-editor-demo, a real-world video editing application built on
avio, which surfaces bugs and drives API improvements. Pull requests, bug reports, and feature requests are welcome — see the main repository for full context.
Installation
[]
= "0.15"
# Enable async support
= { = "0.15", = ["tokio"] }
# Enable proxy generation
= { = "0.15", = ["proxy"] }
Quick Start
Playback with a custom RGBA sink
PreviewPlayer::open probes the file and prepares the pipeline. Call split()
to obtain an exclusive PlayerRunner (owns the decode pipeline; register the
sink and drive it with run()) and a cloneable PlayerHandle (non-blocking
play / pause / seek / stop controls).
use thread;
use ;
Frame-accurate seek
use Path;
use Duration;
use ;
let mut buf = open.build?;
buf.seek?;
loop
Proxy generation
use Path;
use ;
let proxy_path = new?
.resolution
.output_dir
.generate?;
println!;
Feature Flags
| Feature | What it enables |
|---|---|
| (default) | PreviewPlayer, PlayerRunner, PlayerHandle, DecodeBuffer, PlaybackClock, FrameSink, RgbaSink, RgbaFrame, seek |
tokio |
AsyncPreviewPlayer |
proxy |
ProxyGenerator, ProxyJob, ProxyResolution |
timeline |
TimelinePlayer, TimelineRunner |
MSRV
Rust 1.93.0 (edition 2024).
License
MIT OR Apache-2.0