FFmpeg知识体系

目录

目录

1.简介定义

1.1 muxer和demuxer

2.基本组成

2.1 FFmpeg的封装模块AVFormat

     2.1.1  MP4在FFmpeg中的Demuxer

     2.1.2  MP4在FFmpeg中的Muxer       

           ----封装格式

          ----MP4格式标准

      2.1.3 音视频文件音视频流抽取

2) FFmpeg的编解码板块AVCodec

3)FFmpeg的滤镜模块AVFilter

4)FFmpeg的视频图像转换计算模块swscale

5)FFmpeg的音频转换计算模块swresample

3.安装教程

4.FFmpeg的编解码工具ffmpeg

4.1 代码格式:

4.2 代码实例

5. FFmpeg的播放器ffplay

6. FFmpeg的多媒体分析器ffprobe

6.1 ffprobe常用命令 

7. FFmpeg常用的命令

7.1  help

7.2 version

7.3 formats

7.4 codecs


 

1.简介定义

FFmpeg既是一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频的调用接口。FFmpeg中的“FF”指的是“Fast Forward”,FFmpeg中的“mpeg”则是“Moving Picture Experts Group(动态图像专家组)”。

1.1 muxer和demuxer

  • muxer是指合并文件,即将视频文件、音频文件和字幕文件合并为某一个视频格式。比如把rmvb格式的视频,mp3格式的音频文件以及srt格式的字幕文件,合并成为一个新的mp4或者mkv格式的文件。
  • demuxer是muxer的逆过程,就是把合成的文件中提取出不同的格式文件。

2.基本组成

FFmpeg框架的基本组成包括AVFormat、AVFilter、AVDevice、AVUtil等模块库。

2.1 FFmpeg的封装模块AVFormat

     AVFormat中实现了目前多媒体领域中的绝大多数媒体封装格式,包括封装和解封装,如MP4、FLV、KV、TS等文件封装格式,RTMP、RTSP、MMS、HLS等网络协议封装格式。FFmpeg是否支持某种媒体封装格式,取决于编译时是否包含了该格式的封装库。根据实际需求,可进行媒体封装格式的拓展,增加自己定制的封装格式,即在AVFormat中增加自己的封装处理模块。

     2.1.1  MP4在FFmpeg中的Demuxer

MP4文件的Demuxer信息查看

ffmpeg -h demuxer=mp4
Demuxer mov,mp4,m4a,3gp,3g2,mj2 [QuickTime / MOV]:
    Common extensions: mov,mp4,m4a,3gp,3g2,mj2.

   2.1.2  MP4在FFmpeg中的Muxer       

           ----封装格式

封装格式(也叫容器),就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,也就是说仅仅是一个外壳,或者大家把它当成一个放视频轨和音频轨的文件夹也可以。

 

          ----MP4格式标准

   MP4文件中的所有数据都装在box(QuickTime中为atom)中,也就是说MP4文件由若干个box组成,每个box有类型和长度,可以将box理解为一个数据对象块。

mp4主要box的示意图

2.1.3 音视频文件音视频流抽取

ffmpeg -i /data/input.mp4 -vn -acodec copy /data/output.aac

 

 

2) FFmpeg的编解码板块AVCodec

     AVCodec中实现了目前多媒体领域绝大多数常用的编解码格式,既支持编码,也支持解码。AVCodec除了支持MPEG4、AAC、MJPEG等自带的媒体编解码格式之外,还支持第三方的编解码器,如H.264(AVC)编码,需要使用x264编码器;H.265(HEVC)编码,需要使用X265编码器;MP3(mp3lame)编码,需要使用libmp3lame编码器。如果希望增加自己的编码格式,或者硬件编解码,则需要在AVCodec中增加相应的编解码模块。

 

3)FFmpeg的滤镜模块AVFilter

    AVFilter库提供了一个通用的音频、视频、字幕等滤镜处理框架。在AVFilter中,滤镜框架可以有多个输入或多个输出。

4)FFmpeg的视频图像转换计算模块swscale

  swscale模块提供了高级别的图像转换API,例如它允许进行图像缩放和像素格式转换,常见于将图像从1080p转换成720p或者480p等的缩放,或者将图像数据从YUV420P转换成YUYV,或者YUV转RGB等图像格式转换。

5)FFmpeg的音频转换计算模块swresample

  swresample模块提供了高级别的音频重采样API。例如它允许操作音频采样、音频通道布局转换与布局调整。

 

 

3.安装教程

以MAC为例

brew install ffmpeg

安装后利用ffmpeg查看版本

ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple LLVM version 10.0.1 (clang-1001.0.46.4)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1.3_1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-11.0.2.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-11.0.2.jdk/Contents/Home/include/darwin' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-videotoolbox --disable-libjack --disable-indev=jack --enable-libaom --enable-libsoxr
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

 

4.FFmpeg的编解码工具ffmpeg

ffmpeg是FFmpeg源代码编译后生成一个可执行程序,其可以作为命令行工具使用。

4.1 代码格式:

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

4.2 代码实例

ffmpeg -i /data/input.mp4 /data/output.avi

过程输出:

 

5. FFmpeg的播放器ffplay

FFmpeg不但可以提供转码、转封装等功能,同时还提供了播放器相关功能,使用FFmpeg的avformat与avcodec,可以播放各种媒体文件或者流。ffplay是FFmpeg源代码编译后生成的另一个可执行程序,与ffmpeg在FFmpeg项目中充当的角色基本相同,可以作为测试工具进行使用,ffplay提供了音视频显示和播放相关的图像信息、音频的波形信息等。

 

6. FFmpeg的多媒体分析器ffprobe

fprode也是FFmpeg源码编译后生成的一个可执行程序。ffprode是一个非常强大的多媒体分析工具,可以从媒体文件或者媒体流中获得你想要了解的媒体信息,比如音频的参数、视频的参数、媒体容器的参数信息等。
例如它可以帮助分析某个媒体容器中的音频是什么编码格式、视频是什么编码格式,同时还可以得到媒体文件中媒体的总时长、复合码率等信息。使用ffprode可以分析媒体文件中每个包的长度、包的类型、帧的信息等。

6.1 ffprobe常用命令 

 


7. FFmpeg常用的命令

7.1  help

ffmpeg --help          基本查询帮助
ffmpeg --help   long   获取高级参数部分
ffmpeg --help   full   全部的查询信息

7.2 version

ffmpeg -version

7.3 formats

ffmpeg -formats

  • 第一列是多媒体文件封装格式的Demuxing支持与Muxing支持
  • 第二列是多媒体文件格式
  • 第三列是文件格式的详细说明

7.4 codecs

ffmpeg -codecs

 

参考资料:

1. http://ffmpeg.org

2.《FFmpeg从入门到精通》

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值