☰
首页
/
FFmpeg 技术教程
目录
FFmpeg 技术教程
目录
1. 项目概述
1.1 版本信息
1.2 许可协议
1.3 目录结构一览
2. 架构总览
2.1 分层架构
2.2 数据流模型
2.3 库间依赖关系
3. 核心库详解
3.1 libavutil — 通用工具库
3.1.1 核心功能模块
3.1.2 引用计数系统
3.1.3 AVFrame 结构
3.2 libavcodec — 编解码库
3.2.1 核心 API 头文件
3.2.2 编解码器注册与查找机制
3.2.3 新版编码参数获取 API
3.2.4 编解码模型
3.2.5 AVPacket 结构
3.2.6 硬件加速支持
3.3 libavformat — 封装/解封装库
3.3.1 核心 API 头文件
3.3.2 解封装流程
3.3.3 封装流程
3.3.4 协议与 I/O
3.3.5 AVIOContext — 自定义 I/O
3.4 libavfilter — 滤镜库
3.4.1 核心 API 头文件
3.4.2 滤镜图概念
3.4.3 编程构建滤镜图
3.4.4 滤镜图数据流
3.4.5 常用滤镜分类
3.5 libswscale — 图像缩放与色彩转换
3.5.1 核心 API
3.5.2 内部架构
3.6 libswresample — 音频重采样
3.6.1 核心 API
3.7 libavdevice — 设备抽象层
4. 命令行工具
4.1 ffmpeg — 多媒体转换工具箱
4.1.1 内部模块结构
4.1.2 调度器设计
4.1.3 基本用法
格式转换
编码器选择
使用滤镜
硬件加速转码(VA-API 示例)
查看支持的所有编码器/解码器/滤镜/格式
4.2 ffplay — 极简多媒体播放器
4.3 ffprobe — 流分析工具
JSON 格式输出
仅显示关键信息
5. API 编程指南
5.1 完整转码示例架构
5.2 错误处理模式
5.3 元数据操作
5.4 官方示例程序速查
方法1: 在源码树内编译
方法2: 使用 pkg-config 外部编译
6. 滤镜开发
6.1 滤镜文件结构
6.2 注册新滤镜
6.3 格式协商
6.4 帧处理回调模式
6.5 帧权限管理
6.6 切片线程化
6.7 时间轴编辑
7. 构建系统
7.1 configure 脚本
7.2 关键配置选项
=== 基本安装配置 ===
=== 许可证控制 ===
=== 常用外部编码器 ===
=== 硬件加速 ===
=== 网络与安全 ===
=== 滤镜/格式特殊依赖 ===
=== 调试与开发 ===
=== 体积裁剪 ===
只编译特定需求的 ffmpeg:
=== 交叉编译 ===
7.3 组件自省命令
列出 configure 可识别的所有组件
7.4 Makefile 目标
FATE 测试套件
7.5 构建变量
7.6 从源码构建 FFmpeg
Linux / macOS
Windows (MSYS2/MinGW)
外部构建(对象文件与源码分离)
8. 多线程架构
8.1 切片线程(Slice Threading)
8.2 帧线程(Frame Threading)
9. 开发与贡献
9.1 编码规范
9.2 贡献流程
9.3 调试技巧
启用 FFmpeg 自身的日志系统
日志级别:quiet, panic, fatal, error, warning, info, verbose, debug, trace
在代码中使用日志
使用 valgrind 检查内存泄漏
9.4 文档体系
附录 A. 版本与 API 稳定性
附录 B. 关键文件索引