rsmpeg
is a thin&safe layer above the raw FFmpeg's Rust binding, it's main goal is safely exposing FFmpeg inner APIs in Rust as much as possible.
Taking advantage of Rust's language design, you can build robust multi-media project even quicker than using FFmpeg's C API.
To use your first rsmpeg demo, you need to compile your FFmpeg: 1. https://github.com/ffmpeg/ffmpeg. 2. https://trac.ffmpeg.org/wiki/CompilationGuide
If you found the compilation compilcated, there are some helpful compiling scripts for you(in utils
folder).
To build a FFmpeg with default parameters: (don't forget to install the build dependencies)
```bash
zsh utils/mac_ffmpeg.rs
bash utils/linux_ffmpeg.rs
bash utils/windows_ffmpeg.rs ```
Ensure that you have compiled the FFmpeg.
Start by adding rsmpeg
to your Cargo.toml
file:
rust
[dependencies]
rsmpeg = "x.x.x"
Write your simple image info dumper:
```rust use std::ffi::{CStr, CString}; use std::error::Error; use rsmpeg::avformat::AVFormatContextInput;
fn dumpimageinfo(imagepath: &CStr) -> Result<(), Box
fn main() { dumpimageinfo(&CString::new("./test.jpg").unwrap()).unwrap(); } ```
Prepare an simple image in your current folder:
Run with FFMPEG_PKG_CONFIG_PATH
set to the pkgconfig file path in your artifact folder(xxx/lib/pkgconfig
).
```bash
export FFMPEGPKGCONFIGPATH=xxx/ffmpegbuild/lib/pkgconfig
set FFMPEGPKGCONFIGPATH=xxx/ffmpegbuild/lib/pkgconfig
cargo run ```
Then it works:
Input #0, image2, from './test.jpg':
Duration: 00:00:00.04, start: 0.000000, bitrate: 1390 kb/s
Stream #0:0: Video: mjpeg, none, 25 fps, 25 tbr, 25 tbn, 25 tbc