FFmpeg基础知识
- categories
- >
- Media
8 个库
- avcodec:编解码(最重要)
- avformat:封装格式处理
- avfilter:滤镜特效处理
- avdevice:各种设备的输入输出
- avutil:工具库
- postproc:后加工
- swresample:音频采样数据格式转换
- swscale:视频像素数据格式转换
处理流程
av_register_all() 注册所有组件
-> avformat_open_input() 打开输入视频文件
-> avformat_find_stream_info() 获取视频文件信息
-> avcodec_find_decoder() 查找解码器
-> avcodec_open2() 打开解码器
-> av_read_frame() 从输入文件读取一帧压缩数据
-> Get Packet? -> AVPacket -> avcodec_decode_video2() 解码一帧压缩数据 -> AVFrame -> Show On Screen …
-> avcodec_close() 关闭解码器
-> avformat_close_input() 关闭输入视频文件
数据结构
AVFormatContext:封装格式上下文结构体,统领全局的结构体,保存了视频文件封装格式相关信息
- iformat 输入视频的 AVInputFormat
- nb_streams 输入视频的 AVStream 个数
- streams 输入视频的 AVStream[] 数组
- duration 输入视频的时长(以微妙为单位)
- bit_rate 输入视频的码率
AVInputFormat:每种封装格式(FLV、MKV、MP4、AVI)对应一个结构体
- name 封装格式名称
- long_name 封装格式的长名称
- extensionns 封装格式的扩展名
- id 封装格式 ID
AVStream:视频文件中每个视频(音频)流对应一个结构体
- id 序号
- codec 对应的 AVCodecContext
- time_base 时基
- r_frame_rate 帧率
AVCodecContext:编码器上下文结构体,保存了视频(音频)编解码相关信息
- codec 编码器的 AVCodec
- width, height 宽高
- pix_fmt 像素格式
- sample_rate 采样率
- channels 声道数
- sample_fmt 采样格式
AVCodec:每种视频(音频)编解码(例如 H.264 解码器)对应一个该结构体
- name 编解码器名称
- long_name 编解码器长名称
- type 编解码器类型
- id 编解码器 ID
AVPacket:存储一帧压缩编码数据
- pts 显示时间戳
- dts 解码时间戳
- data 压缩编码数据
- size 压缩编码数据大小
- stream_index 所属的 AVStream
AVFrame:存储一帧解码后像素(采样)数据
- data 解码后的图像像素数据(音频采样数据)
- linesize 图像中一行像素的大小
- width, height 图像的宽高
- key_frame 是否为关键帧
- pict_type 帧类型
comment:
- Valine
- LiveRe
- ChangYan