0%

FFmpeg基本概念

模块结构

  • libavformat:实现在流协议,容器格式及其本地IO访问。多媒体格式解析、解封装、封装。
  • libavutil:简化编程的工具函数库。包括随机数生成器,数据结构,数学函数,多媒体核心工具函数等等。
  • libavcodec:各种编解码器的封装。自身不做编解码,编解码器是通过插件插入的。
  • libavdevice:输入/输出设备接口封装。
  • libavfilter:音视频的后期处理。
  • libswresample:实现混音和重采样。
  • libswscale:用于执行高性能的图像缩放,颜色空间或像素格式转换的库。

FFmpeg处理音视频流程

flowchart LR
输入文件
--demuxer-->编码数据包0
--decoder-->解码后数据帧
--encoder-->编码数据包1
--muxer-->输出文件

分解器把输入的文件(一般为容器媒体),分解为多路流,这些流都是编码数据包。把编码数据包传给解码器(如果选择流拷贝则跳过),解码器产生未压缩的帧(原始视频、PCM音频等)。通过滤镜进一步处理。然后帧被传递到编码器,编码然后输出编码数据包。最后,这些数据传给复用器,把编码的数据写入输出文件。

处理流数据的基本步骤:

flowchart LR
解复用 --> 获取流 --> 读数据包 --> 释放资源

欢迎关注我的其它发布渠道