Project Icon

rsmpeg

轻量级FFmpeg Rust绑定层 助力多媒体项目快速开发

rsmpeg是一个轻量级的FFmpeg Rust绑定层,专注于安全地封装FFmpeg内部API。该项目支持FFmpeg 6.*和7.*版本,要求Rust 1.70.0及以上。rsmpeg充分利用Rust语言特性,使开发者能够比使用FFmpeg C API更高效地构建稳定的多媒体应用。项目提供了简洁的配置流程和示例代码,便于快速上手和整合。

Rsmpeg

文档 Crates.io CI

rsmpeg是FFmpeg的Rust绑定之上的一个轻量级安全层,其主要目标是尽可能安全地在Rust中暴露FFmpeg的内部API。

利用Rust语言设计的优势,你可以比使用FFmpeg的C API更快地构建稳健的多媒体项目。

依赖要求

支持的FFmpeg版本为6.*7.*

最低支持的Rust版本为1.70.0(稳定通道)。

入门指南

FFmpeg编译

要使用你的第一个rsmpeg演示,你需要编译FFmpeg:

  1. https://github.com/ffmpeg/ffmpeg
  2. https://trac.ffmpeg.org/wiki/CompilationGuide

如果你觉得编译过程复杂,这里有一些有用的编译脚本供你使用(在utils文件夹下)。

要使用一些常用参数构建FFmpeg:(别忘了安装构建依赖)

# macOS
zsh utils/mac_ffmpeg.rs
# Linux
bash utils/linux_ffmpeg.rs
# Windows
# 你需要一台Linux机器进行交叉编译,然后将生成的文件复制到你的Windows机器上。
bash utils/windows_ffmpeg.rs

这些脚本默认构建最新的稳定版FFmpeg。你也可以明确构建特定的FFmpeg版本:

# macOS & FFmpeg 7.0
zsh utils/mac_ffmpeg.rs release/7.0

通过cargo-vcpkg编译FFmpeg

使用vcpkg管理ffmpeg依赖可能更简单,因为所有配置都包含在你的Cargo.toml中。 这对于下载你的项目的用户来说特别方便,因为他们可以通过运行一个命令来构建所有必要的依赖。 请注意,使用这种方法构建ffmpeg可能需要很长时间,尽管在第一次之后,生成的库文件可能会被缓存。

首先,安装cargo-vcpkg工具:

cargo install cargo-vcpkg

添加vcpkg依赖:

[package.metadata.vcpkg]
dependencies = ["ffmpeg"]
git = "https://github.com/microsoft/vcpkg"
rev = "4a600e9" // 尽管可以链接到vcpkg的主分支,但最好固定一个特定的修订版本,以避免不必要的破坏性更改。

你可能想要根据你需要的FFmpeg模块指定一个特性子集。例如,如果你的代码使用x264和VPX编解码器,依赖应该看起来像这样:

dependencies = ["ffmpeg[x264,vpx]"]

在某些情况下,你可能需要指定三元组和/或额外的依赖。例如,在Windows上,上述部分可能看起来类似于以下内容:

[package.metadata.vcpkg]
dependencies = ["ffmpeg[x264,vpx]:x64-windows-static-md"]
git = "https://github.com/microsoft/vcpkg"
rev = "4a600e9"

特性可能会根据你的应用程序而有所不同,在我们的例子中,为了构建演示,我们需要x264。

设置环境:

# *nix(以三元组命名的文件夹路径可能会有变化)
export FFMPEG_PKG_CONFIG_PATH=${PWD}/target/vcpkg/installed/x64-linux/lib/pkgconfig
# Windows(CMD)
set FFMPEG_PKG_CONFIG_PATH=%CD%\target\vcpkg\installed\x64-windows-static-md\lib\pkgconfig
# Windows(PowerShell)
$env:FFMPEG_PKG_CONFIG_PATH="$(($PWD).path)\target\vcpkg\installed\x64-windows-static-md\lib\pkgconfig"

运行vcpkg构建:

cargo vcpkg --verbose build

--verbose选项不是必需的,但如果构建失败,它可能有助于识别任何错误。

完成这些步骤后,您就可以构建和运行您的项目了。下一节中介绍的演示代码的完整工作示例可在 https://github.com/aegroto/rsmpeg-vcpkg-demo 获取。

Rsmpeg演示

确保您已编译FFmpeg。

首先在Cargo.toml文件中添加rsmpeg

[dependencies]
# 如果您使用的是ffmpeg 6.*,请添加以下内容
rsmpeg = { version = "0.15.1", default-features = false, features = ["ffmpeg6"] }
# 如果您使用的是ffmpeg 7.*,请添加以下内容(默认启用`ffmpeg7`特性)
rsmpeg = "0.15.1"

编写您的简单媒体文件信息转储器:

use std::ffi::{CStr, CString};
use std::error::Error;
use rsmpeg::avformat::AVFormatContextInput;

fn dump_av_info(path: &CStr) -> Result<(), Box<dyn Error>> {
    let mut input_format_context = AVFormatContextInput::open(path, None, &mut None)?;
    input_format_context.dump(0, path)?;
    Ok(())
}

fn main() {
    dump_av_info(&CString::new("./test.jpg").unwrap()).unwrap();
}

在当前文件夹中准备一个简单的图像:

test.jpg

运行时将FFMPEG_PKG_CONFIG_PATH设置为构件文件夹中pkgconfig文件的路径(绝对路径!)(xxx/ffmpeg_build/lib/pkgconfig)。

# macOS和Linux
export FFMPEG_PKG_CONFIG_PATH=xxx/ffmpeg_build/lib/pkgconfig
# Windows
set FFMPEG_PKG_CONFIG_PATH=xxx/ffmpeg_build/lib/pkgconfig

cargo run

然后它就可以工作了:

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

(在25fps下,单个图像的持续时间为0.04秒)

您也可以在这里放置任何视频或音频文件,该程序将为您转储媒体信息。

高级用法

  1. FFmpeg链接:参考rusty_ffmpeg的文档,了解如何使用环境变量静态或动态链接FFmpeg。

  2. rsmpeg的高级用法:查看tests文件夹。

贡献者

感谢您的贡献!

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号