FFmpeg基础知识

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: