初识ffmpeg4.2.3

下载编译

  1. 下载 git clone https://git.ffmpeg.org/ffmpeg... ffmpeg
  2. 编译

    • ./configure —help 查看所有的编译配置
    ./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-filter=delogo --enable-debug --disable-optimizations --enable-libspeex --enable-videotoolbox --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --cc=clang --host-cflags= --host-ldflags= --disable-x86asm
    • 可能的错误

      ERROR: libfdk_aac not found

      git clone git://github.com/mstorsjo/fdk-aac
      cd fdk-aac
      autoreconf -i
      ./configure
      make install

      ERROR: speex not found using pkg-config

      brew install speex
    • 编译 make &&sudo make install,相关的应用程序,文档,生成到/usr/local/ffmpeg下面

ffmpeg模块

libavutil      56. 31.100
libavcodec     58. 54.100
libavformat    58. 29.100
libavdevice    58.  8.100
libavfilter     7. 57.100
libswscale      5.  5.100
libswresample   3.  5.100
libpostproc    55.  5.100

主要包含的模块及版本号

  • libavutil

核心工具库,最基础模块之一,数学函数,字符串操作,内存管理相关,数据结构相关,错误码及错误处理,日志输出,其他辅助信息,比如密钥、哈希值、宏、库版本、常量。
官网上有一句话很有意思
It is not a library for code needed by both libavcodec and libavformat.
libavcodec和libavformat不依赖于libavutil
非常小巧的,高效的工具库,可以在非常弱的cpu和低内存的环境中运行。

  • libavcodec
    非常强大的音视频编解码库,对开发来说,屏蔽了大量的硬件底层接口跨平台性,你不用在intle的cpu如何去调用IntelQuickSync实现硬件加速,同时也集成了几乎所有的音视频格式的编解码方案。部分的codec是具备自己的License的,ffmpeg默认不添加libx264、FDK-AAC等编解码库,可以用第三方codec插件的方式添加进来,实际上也就是configure配置一下,brew安装一下,编译出来的ffmpeg就带了相关的编解码库,关键是统一的接口。

    ffmpeg configure -encoders
    ffmpeg configure -decoders

    用这两个命令可以查看支持的编解码详情。

  • libavformat

编码器格式的解封装和封装,比如本地的mp4,avi,flv,包括各种网络协议,rtmp,hls等,都是由libavformat

ffmpeg configure -demuxers
ffmpeg configure -muxers
ffmpeg configure -protocols

用这两个命令可以查看支持的支持的解封装和封装格式,第三个命令看一下查看支持的网络网络协议

  • libavdevice

多媒体设备交互的库,库提供了用于从许多常见的多媒体输入/输出设备获取通用框架,并支持多种输入和输出设备,比如linux上的Video4Linux2,windows上的dx,都通过该库来提供统一的框架

ffmpeg -devices   //显示支持的设备
ffmpeg -f avfoundation -list_devices true -i ""  //查看mac下的采集设备列表
  • libavfilter

通用的音视频filter框架。使用avfilter可以对音视频数据做一些效果处理如去色调、模糊、水平翻转、裁剪、加方框、叠加文字,加水印等

  • libswscale

视频场景比例缩放、色彩映射转换,比如将解码后的视频数据进行缩放,YUV与RGB之间的转换,基于指令集的优化。

  • libswresample

音频的重采样的功能,高度优化的转换音频的采样频率、声道格式或样本格式的功能。
功能说明:

    • 采样频率转换:对音频的采样频率进行转换的处理,例如把音频从一个高的44100Hz的采样频率转换到8000Hz。从高采样频率到低采样频率的音频转换是一个有损的过程。API提供了多种的重采样选项和算法。
    • 声道格式转换:对音频的声道格式进行转换的处理,例如立体声转换为单声道。当输入通道不能映射到输出流时,这个过程是有损的,因为它涉及不同的增益因素和混合。
    • 样本格式转换:对音频的样本格式进行转换的处理,例如把s16的PCM数据转换为s8格式或者f32的PCM数据。此外提供了Packed和Planar包装格式之间相互转换的功能,Packed和Planar的区别见FFmpeg中Packed和Planar的PCM数据区别。
    • libpostproc

      后期效果处理,如图像的去块效应等

    • 总体来说,大概就是核心工具(libutils)、媒体格式(libavformat)、编解码(libavcodec)、设备(libavdevice)和后处理(libavfilter, libswscale, libpostproc)

    你可能感兴趣的:(ffmpeg)