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() | 应用后处理滤镜 |

相关推荐
路溪非溪19 小时前
关于ffmpeg的简介和使用总结
ffmpeg
gushansanren19 小时前
基于WSL用MSVC编译ffmpeg7.1
windows·ffmpeg
追随远方3 天前
Android平台FFmpeg音视频开发深度指南
android·ffmpeg·音视频
charlie1145141914 天前
编译日志:关于编译opencv带有ffmpeg视频解码支持的若干办法
opencv·ffmpeg·音视频·imx6ull·移植教程
追随远方4 天前
Android平台FFmpeg视频解码全流程指南
android·ffmpeg·音视频
urhero5 天前
Python+ffmpeg 实现给视频添加字幕
ffmpeg·音视频·python编程·视频编辑·实用视频工具·添加字幕
追随远方5 天前
Android NDK版本迭代与FFmpeg交叉编译完全指南
android·ffmpeg
带鱼工作室5 天前
ffmpeg多媒体(音视频)处理常用命令
ffmpeg·音视频
批量小王子6 天前
2025-05-07-FFmpeg视频裁剪(尺寸调整,画面比例不变)
ffmpeg·音视频
人间花木7 天前
1. 视频基础知识
c++·ffmpeg·音视频·视频基础知识