Skip to content

mcpplibs/ffmpeg-m

Repository files navigation

ffmpeg

FFmpeg 的 C++ 模块化封装 — import ffmpeg.av; 即用 · 三平台 · 全从源码构建,API 不变

Release C++23 Module License

mcpp 构建工具 · 包索引 mcpp-index · FFmpeg 上游 · Issues · Releases
CI

核心特性

  • 纯模块导入import ffmpeg.av;,消费者代码零 #include,用的仍是你熟悉的 C API 与全局名(avcodec_open2AVFrameAV_CODEC_ID_H264 …)
  • 从源码构建,消费端不跑 configurecompat.ffmpeg 携带冻结 configure 快照 + 精确源码清单,mcpp 直接编译整套 FFmpeg 8.1.2(2124 .c + 157 NASM .asm,x86 SIMD 含)—— 32 核冷构建 ≈ 21 s;本仓库只是薄薄的模块层
  • 全功能 profile — 600+ decoders / 350+ demuxers / encoders / muxers / filters / swscale / swresample 全开,hermetic(不探测宿主库),LGPL-2.1+ 干净(无 --enable-gpl/nonfree)
  • 三平台 — Linux / macOS / Windows 三平台 CI

快速开始

mcpp new myplayer --template ffmpeg && cd myplayer && mcpp run -- video.mp4    # 解码骨架

或在已有项目中手动接入:

[dependencies]
ffmpeg = "0.0.3"
import std;
import ffmpeg.av;   // 整套 FFmpeg 表面,Python `import av` 风格

int main() {
    AVFormatContext* fmt { nullptr };
    avformat_open_input(&fmt, "video.mp4", nullptr, nullptr);
    // … 还是你熟悉的 C API,只是不用 #include
    avformat_close_input(&fmt);
    return 0;
}

模块一览

import 内容
ffmpeg.av 下面全部(推荐默认)
ffmpeg.avutil / ffmpeg.avcodec / ffmpeg.avformat / ffmpeg.avfilter / ffmpeg.avdevice / ffmpeg.swscale / ffmpeg.swresample 每库一个;依赖自动 re-export(import ffmpeg.avformat; 带上 avcodec + avutil)
ffmpeg ffmpeg.av 的 lib-root 别名

命名模块不能导出宏或 static inline 帮助函数。有链接的都从 import 来;宏拼写(AVERRORAV_NOPTS_VALUEAVIO_FLAG_WRITEMKTAG …)与 inline 工具(av_q2dav_clip …)在 import 前加可选侧头:

#include <ffmpeg-m/macros.h>
import ffmpeg.av;

C 的复合字面量宏有 C++ 替换从模块导出:av_err2strav_err2string(err).c_str()av_ts2strav_ts2stringav_ts2timestrav_ts2timestringav_fourcc2strav_fourcc2string

示例

示例 内容
examples/probe 版本 / 组件信息(无需输入)
examples/decode_frames 解码一个视频文件的帧
cd examples/decode_frames && mcpp run -- video.mp4

mcpp build && mcpp test 验证包(自包含 encode→decode 往返 + API 表面测试)。

工具链与运行时

包不固定工具链(mcpp 解析环境默认)。上游 FFmpeg 源码不 vendored,经 compat.ffmpeg 索引包(官方 ffmpeg.org tarball,GLOBAL + CN 镜像,sha256 锁定)到达消费端;描述符(configure 快照 inline 为 generated_files + make -n 源码清单)在 mcpp-index(tools/compat-ffmpeg/)维护。需要外部 SDK 的硬件加速头(libavutil/hwcontext_cuda.h、VAAPI …)不在模块导出面内,SDK 存在时在 import 旁 textual include。外部编解码器 / GPL 组件 / slim profile 等变体计划以 mcpp features(按 profile 的配置快照)提供。

Note

早期版本,接口可能调整。问题与想法欢迎提 issue

License

封装代码 MIT;上游 FFmpeg 经 compat.ffmpeg 提供,LGPL-2.1-or-later(无 --enable-gpl/nonfree 组件),源码分发天然满足 LGPL 重链接要求。

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors