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

相关推荐
简鹿办公1 天前
FFmpeg vs 去水印软件:哪种方式更适合你?
ffmpeg·怎样去除视频水印·如何去视频logo视频水印
小狮子安度因1 天前
ffplay数据结构分析
数据结构·ffmpeg
小狮子安度因2 天前
ffplay音频重采样
ffmpeg·音视频
小狮子安度因2 天前
AAC ADTS格式分析
网络·ffmpeg·aac
勘察加熊人2 天前
ffmpeg切割音频
ffmpeg·音视频
xiaohouzi1122333 天前
Python读取视频-硬解和软解
python·opencv·ffmpeg·视频编解码·gstreamer
kimble_xia@oracle4 天前
性能优化笔记
ffmpeg
wang_chao1184 天前
RK3399平台ffmpeg-VPU硬编码录制USB摄像头视频、H264或MJPEG编码
ffmpeg·音视频
鹅毛在路上了6 天前
C++, ffmpeg, libavcodec-RTSP拉流,opencv实时预览
c++·opencv·ffmpeg
Hi202402177 天前
Orin-Apollo园区版本:订阅多个摄像头画面拼接与硬编码RTMP推流
ffmpeg·apollo·orin·图像拼接·图传