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

相关推荐
Everbrilliant898 小时前
FFmpeg解码视频数据ANativeWindow播放
ffmpeg·音视频·ffmpeg视频解码·anativewindow·threadsafequeue·解码线程·渲染线程
hjjdebug19 小时前
ffmpeg 问答系列->demux 部分
ffmpeg·基本概念·流参数
chjqxxxx19 小时前
php使用ffmpeg实现视频随机截图并转成图片
ffmpeg·php·音视频
陈陈陈建蕾3 天前
Mac使用FFmpeg进行屏幕录制,并使用VLC本地播放
ffmpeg·github
vivo互联网技术3 天前
Android动效探索:彻底弄清如何让你的视频更加酷炫
android·ffmpeg·跨平台·图形·mediaplayer·纹理·opengl es·坐标系
stereohomology4 天前
ffmpeg视频mp4到gif用大模型很方便
ffmpeg·音视频
f***45324 天前
从MySQL5.7平滑升级到MySQL8.0的最佳实践分享
ffmpeg
努力还债的学术吗喽6 天前
ffmpeg离线安装到服务器:解决conda/sudo/无法安装的通用方案
服务器·ffmpeg·conda
zymill7 天前
hysAnalyser --- UDP实时流分析使用指南
ffmpeg·ts流分析·mpegts·音视频分析·数字电视流录制·audio vivid·视频分析工具
Everbrilliant897 天前
FFmpeg解码音频数据AudioTrack/OpenSL播放
ffmpeg·音视频·audiotrack·opensl·ffmpeg音频解码播放·decodethread·opensl播放与解码同步