ffmpeg 编译默认会生成4个可执行文件和8个静态库。可执行文件包括用于转码、推流、Dump媒体文件的ffmpeg、用于播放媒体文件的ffplay、用于获取媒体文件信息的ffprobe,以及作为简单流媒体服务器的ffserver。8个静态库其实就是FFmepg的8个模块:
- AVUtil
核心工具库,基础模块之一。用于处理一些基础的音视频处理操作 - AVFormat
文件格式和协议库,该模块是最重要的模块之一,封装了Protocol层和Demuxer、Muxer层,使得协议和格式对于开发者来说是透明的 - AVCodec
编解码库,该模块也是最重要的模块之一,封装了Codec层,单有些Codec具备自己的License,FFmpeg是不会默认添加像x264、fdk-aac、lame等库的,但ffmpeg就像一个平台一样,可以将其他三方的Codec以插件的方式添加进来。然后为开发者提供统一的接口。 - AVFilter
音视频滤镜库,该模块提供了音视频特效处理。 - AVDevice
输入输出设备库,如ffplay就需要该模块是开启状态的。 - SwrRessample
用于音频重采样,可对数字音频进行声道数、数据格式、采样率等多种基本信息的转换。 - SWScale
将图像进行格式化转换的模块,如YUV和RGB的转换 - PostProc
该模块可用于进行后期处理,当使用AVFilter时候需要将该模块的开关打开。
配置异常
- ffprobe: error while loading shared libraries: libfdk-aac.so.2: cannot open shared object file: No such file or directory
- 安装完成后显示加载so库失败,首先找到库的位置:
find / -name "libfdk-aac.so.2"
- 添加库加载路径
hfcai@hfcai:~$ cd /etc/ld
ldap/ ld.so.conf.d/
hfcai@hfcai:~$ cd /etc/ld.so.conf.d/
hfcai@hfcai:/etc/ld.so.conf.d$ touch ffmpeg.conf
hfcai@hfcai:/etc/ld.so.conf.d$ vim ffmpeg.conf
文件中添加路径:/home/hfcai/local/lib
- 更新加载路径
hfcai@hfcai:~$sudo ldconfig
hfcai@hfcai:~$ffmpeg --help
FFmpeg API使用
术语
- 容器、文件:特定格式的多媒体文件,如MP4、flv、mov等.
- 媒体流:表示时间轴上的一段连续数据,如一段声音数据、一段视频数据或一段字幕数据,可以是压缩的,也可以是飞压缩的,压缩的数据需要关联特定的编解码器。
- 数据帧/数据包:通常一个媒体流由大量的数据帧组成的,对于压缩数据,帧对应着编解码器的最小处理单元,分属不同媒体流的数据帧交错存储于容器中。
- 编解码器: 编解码器是以帧为单位实现压缩数据和原始数据之间的相互转换的。