音视频处理FFMPeg开发实战(2) -- FFMPeg库模块简介

1、库文件

FFMPeg(3.2)库总共8个库文件:

avcodec.lib
avdevice.lib
avfilter.lib
avformat.lib
avutil.lib
postproc.lib
swresample.lib
swscale.lib

**各个版本的库文件,也许会有不同,将来可能会有变化。本例以FFMPeg(3.2)介绍。

**Linux 下库文件名与windows下稍有差别,如:avcodec.lib --> libavcodec.a.

1.avutil.lib
实用核心工具程序库,最基础模块之一,其他模块都会依赖该库做一些基本的音视频处理操作。 它包含安全可移植字符串函数,随机数生成器,数据结构,附加数学函数,加密和多媒体相关功能。

2.avformat.lib
文件格式和协议库,封装了Protocol层和Demuxer、Muxer层,使得协议和格式对于开发者来说是透明的。为音频、视频和字幕流的复用和解复用(多路复用和解复用)提供了一个通用框架。 它包括多媒体容器格式的多个多路复用器和多路分解器。

它还支持几种输入和输出协议来访问媒体资源。

3.avcodec.lib
编解码库,封装了Codec层,但是有一些codec是具备自己的License的,FFmpe不会默认添加像libx264、FDK-AAC、Lame(mp3)等库,但是FFmpeg 是一个框架,可以将其他的第三方codec以插件的方式添加进来,为开发者提供统一接口。作为编码/解码框架,并包含用于音频、视频和字幕流的多个解码器和编码器,以及多个比特流滤波器。

4.avfilter.lib
音视频滤镜库,该模块包含了音频特效和视频特效的处理,在使用FFmpeg的API进行编解码的过程中,可以使用该模块高效的为音视频数据做特效处理。

5.avdevice.lib
是输入输出设备库,提供了一个通用设备框架,用于从许多常见的多媒体输入/输出设备抓取和渲染,并支持多个输入和输出设备,包括 Video4Linux2,VfW,DShow和ALSA。

6.swresample.lib
用于音频重采样,可以对数字音频进行声道数、数据格式、采样率等多种基本信息的转换。

格式转换:是将采样类型(例如从16位有符号采样转换为无符号8位或浮点采样)的过程。当从 packed 布局(所有属于在相同缓冲器中交错的不同通道的样本)到平面布局(属于存储在专用缓冲器或“平面”中的相同通道的所有样本)时,它还处理 packed 转换。

重新采样:是改变音频速率的过程,例如从 44100Hz 的高采样率到 8000Hz 。从高到低采样率的音频转换是有损耗的过程。有几个重采样选项和算法可用。

重新矩阵化:是改变通道布局的过程,例如从立体声到单声道。当输入通道不能映射到输出流时,该过程是有损的,因为它涉及不同的增益因子和混合。通过专用选项启用各种其他音频转换(例如拉伸和填充)

7.swscale.lib
该模块用于图像缩放和颜色空间和像素格式转换、重新调整,可以将YUV的数据转换为RGB的数据。

重新调整:是更改视频大小的过程。 有几个重新调整选项和算法可用。 这通常是有损耗的过程。
像素格式转换:是转换图像的图像格式和颜色空间的过程,例如从平面 YUV420P 到 RGB24 转换。 它还可以处理 packed 转换,即从 packed 布局(属于在同一缓冲器中交织的不同平面的所有像素)转换为平面布局(属于存储在专用缓冲器或“平面”中的相同平面的所有样本)的转换。如果源和目标颜色空间不同,这通常是有损过程。

8.postproc.lib
该模块用于进行后期处理,当我们使用filter的时候,需要打开这个模块,filter会用到这个模块的一些基础函数。

2、常用函数

av_register_all():注册所有组件
avformat_open_input():打开输入视频文件
avformat_find_stream_info():获取视频文件信息
avcodec_find_decoder():查找解码器
avcodec_open2():打开解码器
av_read_frame():从输入文件读取一帧压缩数据
avcodec_decode_video2():解码一桢压缩数据
avcodec_close():关闭解码器
avformat_close_input():关闭输入视频文件

在以后的实战中演示各个函数的用法。

3、各个库的函数表

待追加。

发布了43 篇原创文章 · 获赞 9 · 访问量 2654

猜你喜欢

转载自blog.csdn.net/x879014419/article/details/105265170