essi-ffmpeg

Crates.ioessi-ffmpeg
lib.rsessi-ffmpeg
version0.2.0
sourcesrc
created_at2024-02-26 11:33:17.624138
updated_at2024-02-26 23:15:07.916343
descriptionAn easy to use FFmpeg CLI wrapper
homepage
repositoryhttps://github.com/MrAdhit/essi-ffmpeg
max_upload_size
id1153452
size52,562
MrAdhit (MrAdhit)

documentation

README

essi-ffmpeg

Use FFmpeg easily, includes downloading FFmpeg binaries, executing FFmpeg commands, and handling I/O processing tasks. Provides a simplified interface for utilizing the power of FFmpeg.

Features

  • Automatic FFmpeg Download: Automatically download FFmpeg binaries suitable for your platform if FFmpeg is not found in the environment.
  • Flexible Command Execution: Build and execute FFmpeg commands with ease for handling various multimedia processing tasks.

Getting Started

Adding to Your Project

Add essi-ffmpeg to your Cargo.toml dependencies:

[dependencies]
essi-ffmpeg = { git = "https://github.com/MrAdhit/essi-ffmpeg" }

Basic Usage

use essi_ffmpeg::FFmpeg;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    // Automatically download FFmpeg if not found
    if let Some((handle, mut progress)) = FFmpeg::auto_download().await.unwrap() {
        tokio::spawn(async move {
            while let Some(state) = progress.recv().await {
                println!("{:?}", state);
            }
        });

        handle.await.unwrap().unwrap();
    } else {
        println!("FFmpeg is downloaded, using existing installation");
    }

    // Build and execute an FFmpeg command
    let mut ffmpeg = FFmpeg::new()
        .stderr(std::process::Stdio::inherit())
        .input_with_file("input_file.flv".into()).done()
        .output_as_file("output_file.mp4".into()).done()
        .start().unwrap();

    ffmpeg.wait().unwrap();

    Ok(())
}

Examples

This crate includes several examples demonstrating different use cases:

  • basic_usage.rs: Shows the basic usage of using this library.
  • muxing_hardware_accelerated.rs: Demonstrates muxing with hardware acceleration.
  • muxing_multiple_output.rs: Shows how to mux multiple outputs.
  • override_ffmpeg_download_directory.rs: Illustrates how to override the default FFmpeg download directory.
  • windows_screen_recorder.rs: Provides an example of a simple screen recorder on Windows using FFmpeg.

To run an example, use:

cargo run --example example_name

Contributing

Contributions are welcome! Here are several ways you can contribute:

License

This project is licensed under the MIT License. See the LICENSE file for details.

Commit count: 0

cargo fmt