Raveler/ffmpeg-cpp

A clean, easy-to-use C++ wrapper around the ffmpeg libraries

简介

ffmpeg-cpp 是一个封装了 FFmpeg 库的 C++ 库,为您处理常见的视频/音频任务(如读取、过滤、编码和写入媒体文件)提供了一个简洁易用的接口。您无需运行 FFmpeg 命令行工具,而是直接调用 C++ 函数。它还包含一个简化的接口,可以通过 DllImport 从 C# 项目中调用。

功能

只需几行 C++ 代码,您就可以加载视频文件、应用滤镜(如缩放或旋转)并将其保存为新文件。README 展示了一个完整的流水线:解封装(读取容器)、解码、过滤、编码和封装(写入文件)。

如何获取

  • 平台:目前仅正式支持 Windows 和 Visual Studio。作者表示代码本身与平台无关,但由于缺乏 CMake/Linux 经验,目前尚无 Linux 构建版本。
  • 安装:克隆仓库,从 Zeranoe 下载相应的 FFmpeg dev(用于头文件和导入库)和 shared(用于 DLL)构建版本(已在 FFmpeg 4.1 上测试),将其解压到 ffmpeg 文件夹中,然后打开 Visual Studio 解决方案进行构建。这将生成一个 .lib 和一个 include 文件夹,供您在自己的项目中使用。

如何使用

在 C++ 中

您可以通过创建 Muxer、VideoCodec、VideoEncoder、Filter 和 Demuxer 等对象来构建处理流水线。README 展示了一个完整示例,步骤如下:

  1. 为输出文件创建一个 muxer。
  2. 创建一个 codec(例如 MPEG‑2)和一个 encoder。
  3. 创建一个 filter(例如 scale=640:150,transpose=cclock,vignette)并附加 encoder。
  4. 使用 demuxer 加载输入文件,并将最佳视频流发送到 filter。
  5. 准备流水线,逐帧处理直到完成,最后关闭 muxer 以完成操作。

此外还有一个简化接口,降低了复杂度——您只需创建一个句柄,添加视频/音频流和滤镜,然后调用 ffmpegCppGenerate。该接口使得 C# 互操作变得简单。

在 C# 中

该简化接口以 DLL (simple_interface.dll) 的形式公开,包含 C 风格函数。README 提供了一个完整的 C# 示例,使用 [DllImport] 调用诸如 ffmpegCppCreate、ffmpegCppAddVideoStream、ffmpegCppAddVideoFilter、ffmpegCppGenerate 等函数。错误检查通过 ffmpegCppIsError 和 ffmpegCppGetError 完成。

存在原因

作者需要将 FFmpeg 集成到程序中,而不启动 FFmpeg 可执行文件作为独立进程。这是因为启动外部可执行文件可能会被杀毒软件拦截并导致其他问题。通过直接链接 FFmpeg 库,功能被嵌入到您的应用程序中。

限制与未来计划

  • 平台支持:目前仅支持 Windows。路线图提到将增加 Linux/Mac 构建支持。
  • 测试:该项目已测试了常见功能,但尚未建立完善的单元测试。
  • 编解码器/容器覆盖:已在部分编解码器和容器上进行了测试,路线图计划测试更多类型。

许可

该库采用 LGPL 许可。然而,FFmpeg 本身根据构建方式的不同,可能是 LGPL 或 GPL。如果您使用 GPL 版本的 FFmpeg,那么使用 ffmpeg-cpp 的项目也必须是 GPL 许可。


以上所有信息均直接取自项目的 README。未添加或推断任何其他内容。

相关

  • 项目
  • 项目
  • 项目
  • 项目