Thanks to visit codestin.com
Credit goes to lib.rs

#transcoding #multimedia #api-bindings

rust_ffmpeg

Safe and idiomatic Rust wrapper for FFmpeg

2 releases (1 stable)

Uses new Rust 2024

1.0.0 Jul 19, 2025
0.1.0 Jul 19, 2025

#342 in Video


Used in firefly_music

MIT/Apache

170KB
4K SLoC

Safe and idiomatic Rust wrapper for FFmpeg

This crate provides a high-level, safe interface to FFmpeg functionality, allowing you to transcode, filter, and manipulate multimedia files.

Examples

Simple conversion

use ffmpeg_rs::FFmpegBuilder;

// Convert a video file
let output = FFmpegBuilder::convert("input.mp4", "output.webm")
    .run()
    .await?;

Complex transcoding

use ffmpeg_rs::{FFmpegBuilder, Input, Output};
use ffmpeg_rs::codec::presets;
use ffmpeg_rs::filter::VideoFilter;
use ffmpeg_common::{Codec, Duration};

let output = FFmpegBuilder::new()?
    .input(
        Input::new("input.mp4")
            .seek(Duration::from_secs(10))
            .duration(Duration::from_secs(30))
    )
    .output(
        Output::new("output.mp4")
            .video_codec_opts(presets::h264::youtube_1080p())
            .audio_codec(Codec::aac())
            .metadata("title", "My Video")
            .faststart()
    )
    .video_filter(VideoFilter::scale(1920, 1080))
    .overwrite()
    .on_progress(|p| {
        println!("Progress: {:?}", p);
    })
    .run()
    .await?;

Dependencies

~12–21MB
~320K SLoC