2 releases
new 0.1.1 | Mar 7, 2025 |
---|---|
0.1.0 | Mar 5, 2025 |
#39 in Multimedia
237 downloads per month
1MB
17K
SLoC
Overview
ez-ffmpeg
provides a safe and ergonomic Rust interface for FFmpeg integration, offering a familiar API that closely follows FFmpeg’s original logic and parameter structures.
This library:
- Ensures full safety without using
unsafe
code - Keeps the execution logic and parameter conventions as close to FFmpeg as possible
- Provides an intuitive and user-friendly API for media processing
- Supports custom Rust filters and flexible input/output handling
- Offers optional RTMP and OpenGL integration
By abstracting the complexity of the raw C API, ez-ffmpeg
simplifies configuring media pipelines, performing transcoding and filtering, and inspecting media streams.
Version Requirements
- Rust: Version 1.80.0 or higher.
- FFmpeg: Version 7.0 or higher. (Other FFmpeg versions have not been thoroughly tested and are not recommended.)
Documentation
More information about this crate can be found in the crate documentation.
Quick Start
Installation Prerequisites
macOS
brew install ffmpeg
Windows
# For dynamic linking
vcpkg install ffmpeg
# For static linking (requires 'static' feature)
vcpkg install ffmpeg:x64-windows-static-md
# Set VCPKG_ROOT environment variable
Adding the Dependency
Add ez-ffmpeg to your project by including it in your Cargo.toml
:
[dependencies]
ez-ffmpeg = "*"
Basic Usage
Below is a basic example to get you started. Create or update your main.rs
with the following code:
use ez_ffmpeg::FfmpegContext;
use ez_ffmpeg::FfmpegScheduler;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 1. Build the FFmpeg context
let context = FfmpegContext::builder()
.input("input.mp4")
.filter_desc("hue=s=0") // Example filter: desaturate (optional)
.output("output.mov")
.build()?;
// 2. Run it via FfmpegScheduler (synchronous mode)
let result = FfmpegScheduler::new(context)
.start()?
.wait();
result?; // Propagate any errors that occur
Ok(())
}
More examples can be found here.
Features
ez-ffmpeg offers several optional features that can be enabled in your Cargo.toml
as needed:
- opengl: Enables GPU-accelerated OpenGL filters for high-performance video processing.
- rtmp: Includes an embedded RTMP server for local streaming scenarios.
- flv: Provides support for FLV container parsing and handling.
- async: Adds asynchronous functionality (allowing you to
.await
operations). - static: Enables static linking for FFmpeg libraries (via
ffmpeg-next/static
).
License
ez-ffmpeg is distributed under the WTFPL (Do What The F*ck You Want To Public License). Important: While ez-ffmpeg is freely usable, FFmpeg has its own licensing terms. Ensure your usage complies with FFmpeg's license when using its components.
Dependencies
~1–12MB
~146K SLoC