FFmpeg的基本结构

FFmpeg框架可以简单分为两层,上层是以ffmpeg、ffplay、ffprobe为代表的命令行工具;其底层支撑是一些基础库,包含AVFormat、AVCodec、AVFilter、AVDevices、AVUtils等模块库。

常用函数如下:

1. AVFormat

封装/解封装模块

|------------------------------------|----------------------------------|
| avformat_open_input() | 打开输入媒体文件或流,读取文件头并初始化相关信息。 |
| avformat_find_stream_info() | 查找媒体流的信息,如音视频流的参数、编解码器等。 |
| avformat_close_input() | 关闭输入文件并释放相关资源。 |
| avformat_alloc_output_context2() | 为输出文件分配格式上下文。 |
| avio_open() | 打开一个输出流或文件进行写入操作。 |
| avformat_write_header() | 向输出文件写入头部信息(如流信息、编码设置等)。 |
| av_write_frame() | 向输出文件写入音频或视频数据帧。 |
| av_write_trailer() | 向输出文件写入尾部数据(如流结束标记)。 |
| avformat_new_stream() | 在 AVFormatContext 中创建一个新的音视频流。 |
| avformat_get_stream_info() | 获取流信息,通常在读取文件后调用,提供音视频流的详细数据。 |
| av_read_frame() | 从输入文件中读取一个数据包(音频或视频帧)。 |
| av_seek_frame() | 在输入媒体文件中定位到特定的时间点或帧。 |
| avformat_seek_file() | 在文件中根据时间戳进行精确查找。 |
| av_strerror() | 获取错误码的详细描述信息。 |

2. AVCodec

编/解码模块

|----------------------------|----------|
| avcodec_register_all() | 注册所有解码器 |
| avcodec_find_decoder() | 查找解码器 |
| avcodec_find_encoder() | 查找编码器 |
| avcodec_alloc_context3() | 分配解码器上下文 |
| avcodec_open2() | 打开解码器 |
| avcodec_close() | 关闭解码器 |
| avcodec_receive_frame() | 接收解码后的帧 |
| avcodec_send_packet() | 发送编码数据包 |
| avcodec_encode_video2() | 编码视频帧 |
| avcodec_receive_packet() | 获取编码数据包 |

3. AVFilter

滤镜模块

|----------------------------------|---------|
| avfilter_register_all() | 注册所有滤镜 |
| avfilter_graph_alloc() | 分配滤镜图 |
| avfilter_graph_free() | 释放滤镜图 |
| avfilter_graph_config() | 配置滤镜图 |
| avfilter_graph_create_filter() | 创建滤镜 |
| avfilter_link() | 连接滤镜 |
| avfilter_graph_parse() | 解析滤镜链描述 |
| avfilter_graph_parse_ptr() | 解析滤镜链指针 |
| avfilter_init_dict() | 初始化滤镜字典 |
| av_buffersrc_add_frame() | 向源滤镜添加帧 |

4. AVDevice

设备模块

|----------------------------------|----------|
| avdevice_register_all() | 注册所有设备 |
| avdevice_capabilities_create() | 创建设备能力列表 |
| avdevice_find_input_format() | 查找输入设备格式 |
| avdevice_find_output_format() | 查找输出设备格式 |
| avdevice_list_devices() | 列出设备信息 |
| avdevice_input_create() | 创建输入设备 |
| avdevice_output_create() | 创建输出设备 |
| avdevice_set_input_format() | 设置输入设备格式 |
| avdevice_set_output_format() | 设置输出设备格式 |

5. swscale

图像转换模块

|------------------------------|----------|
| sws_getContext() | 创建转换上下文 |
| sws_scale() | 执行图像转换 |
| sws_freeContext() | 释放转换上下文 |
| sws_isSupportedInput() | 检查输入格式支持 |
| sws_isSupportedOutput() | 检查输出格式支持 |
| sws_setColorspaceDetails() | 设置色彩空间转换 |

6. swresample

音频转换模块

|-------------------------|-----------|
| swr_alloc() | 分配重采样上下文 |
| swr_alloc_set_opts() | 设置重采样选项 |
| swr_init() | 初始化重采样上下文 |
| swr_convert() | 执行音频重采样 |
| swr_free() | 释放重采样上下文 |
| swr_get_out_samples() | 获取输出样本数 |
| swr_get_delay() | 获取延迟值 |

7. postproc

视频后处理模块

|----------------------|----------|
| pp_get_context() | 创建后处理上下文 |
| pp_free_context() | 释放后处理上下文 |
| pp_postprocess() | 执行后处理操作 |
| pp_set_parameter() | 设置后处理参数 |
| pp_get_parameter() | 获取后处理参数 |
| pp_init() | 初始化后处理 |
| pp_close() | 关闭后处理 |
| pp_apply_filter() | 应用后处理滤镜 |

相关推荐
风哥2号14 小时前
数据库教程FGMT02‑生产环境Linux+Oracle19c安装配置与项目实战
linux·数据库·ffmpeg
Bruce_Liuxiaowei1 天前
录屏片段无损合并:从 ffmpeg concat 原理到 Python 自动化脚本
python·ffmpeg·自动化
工具派3 天前
口播视频怎么自动剪掉冷场?视频静音删除的阈值实测
ffmpeg·音视频·视频
❀͜͡傀儡师3 天前
移动端 360° 商品展示方案:从 20MB 雪碧图到 800KB 丝滑视频
ffmpeg·webgl·sprite
2501_930472443 天前
深度复盘|数据库迁移实战(上):腾讯云助手解析慢查询日志,定位索引缺失与语法不兼容
数据库·阿里云·ffmpeg·云计算·腾讯云·aws
我就是DaLing呀!3 天前
flutter + ffmpeg_kit_extended_flutter 大视频合并下载
flutter·ffmpeg·音视频
可乐鸡翅yeah_5 天前
多浏览器 HLS 兼容性差异排查,Chrome、Firefox、Safari 表现不一致定位
chrome·ffmpeg·音视频·firefox·safari·m3u8
行者-全栈开发6 天前
Spring Boot + FFmpeg 视频批量处理实战:压缩、HLS切片与异步任务引擎
spring boot·ffmpeg·异步处理·视频压缩·hls切片·批量任务·redis队列
可乐鸡翅yeah_6 天前
M3U8测试流使用指南,流媒体开发自测与环境校验标准化方案
网络·ffmpeg·音视频·m3u8·m3u8在线·音视频在线播放
heqingchun166 天前
Ubuntu 22.04 交叉编译 RK3568 MPP + FFmpeg 完整指南
linux·ubuntu·ffmpeg