FFmpeg从入门到精通

云平台

  FFmpeg介绍

  FFmpeg既是一种音视频编解码工具,也是一组音视频解码开发套件。作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。

  FFmpeg基本组成

  在ffmpeg源码目录下,可以看到一些文件夹,都是以lib开头的,ffmpeg的基本组成主要就是这些模块,主要是AVFormat,AVCodec,AVFilter,AVDevice,AVutil等等

  libavutil包含用于简化编程的各种例程,包括随机数生成器,数据结构,数学例程,核心多媒体实用程序等等。libavcodec提供了解码和编码API,以及所有受的编解码器。libavformat提供了一个解复用和复用API,以及所有受的复用器和解复用器。实现了目前多媒体大多数媒体 封装格式,包括封装和解封装,例如mp4,flv,ts等,例如RTSP,RTMP网络协议封装,还扩展的 封装格式,扩展的格式要相应的第三方库libavdevice提供了一个接口,用于从输入设备(例如网络摄像头或输入音频)中抓取并渲染到输出设备,以及所 有受的输入和输出设备libswscale 高级别的图像转换API,提供了缩放和(原始像素)格式转换API,并具有多个缩放例程的高速/汇编 优化版本。libavfilter提供了音频,视频,字幕等滤镜处理框架libpostproc提供视频后处理例程libswresample提供了音频重采样,重矩阵化和样本格式转换API,以及许多高质量的优化例程编译完成以后主要生成了三个应用程序,详细教程资料+后台私信;资料;两个字可以免费视频领取+文档+各大厂面试题 资料内容包括:C/C++,Linux,golang,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,嵌入式 等

  ffmpeg:编解码工具

  ffemplay:播放器

  ffmprobe:内容分析工具

  FFmpeg 编解码工具 ffmpeg

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

  ffmpeg命令简单应用:

  ./ffmpeg -i input.mp4 output.avi

  1

  这是一条简单的ffmpeg命令,ffmpeg通过-i参数将input.mp4作为输入源输入,然后进行转码与转封装操作,输出到output.avi中,这条命令主要做了如下工作:

  1)获得输入源input.mp4

  2)转码

  3)输出文件output.avi

  看似简单的两步主要的工作,其实远远不止是从后缀名为MP4的文件输出成后缀名为AVI的文件,因为在ffmpeg中,MP4与AVI是两种文件封装格式,并不是后缀名就可以决定的,例如上面的命令行同样可以写成:

  ./ffmpeg -i input.mp4 -f avi output.dat

  1详细教程资料+后台私信;资料;两个字可以免费视频领取+文档+各大厂面试题 资料内容包括:C/C++,Linux,golang,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,嵌入式 等

  这条ffmpeg命令相当于前面的那条命令做了一些改变,加了一个“-f”进行约束,“-f"参数的工作非常重要,它制定了输出文件的容器格式,所以可以看到输出的文件为output.dat,文件后缀名为.dat,但是其主要工作依然与之前的指令相同。

  ffmpeg的主要工作流程相对比较简单,具体如下:

  1)解封装

  2)解码

  3)编码

  4)封装

  其中需要经过6个步骤,具体如下:

  1)读取输入源

  2)进行音视频的解封装

  3)解码每一帧音视频数据

  4)编码每一帧音视频数据

  5)进行音视频的重新封装

  6)输出到目标

  FFmpeg的播放器 ffplay

  FFmpeg不但可以提供转码、转封装等功能,同时还提供了播放器相关功能,使用FFmpeg的avformat与avcodec,可以播放各种媒体文件或者流。

  ffplay是FFmpeg源代码编译后生成的另一个可执行程序,与ffmpeg在FFmpeg项目中充当的角色基本相同,可以作为测试工具进行使用,ffplay提供了音视频显示和播放相关的图像信息、音频的波形信息等。

  FFmpeg的多媒体分析器 ffprobe

  ffprode也是FFmpeg源码编译后生成的一个可执行程序。ffprode是一个非常强大的多媒体分析工具,可以从媒体文件或者媒体流中获得你想要了解的媒体信息,比如音频的参数、视频的参数、媒体容器的参数信息等。

  例如它可以帮助分析某个媒体容器中的音频是什么编码格式、视频是什么编码格式,同时还可以得到媒体文件中媒体的总时长、复合码率等信息。使用ffprode可以分析媒体文件中每个包的长度、包的类型、帧的信息等。

  下面举一个简单的例子,以对ffprobe有一个基本的概念,输入以下命令:

  ./ffprobe -show_streams input.mp4

  1

  根据输出内容,可以看到MP4文件内容中的流信息。流信息的相关内容是通过[STREAM][/STREAM]的方式展现出来的,在[STREAM][/STREAM]之间的信息即为该视频流信息。

  总结;详细教程资料+后台私信;资料;两个字可以免费视频领取+文档+各大厂面试题 资料内容包括:C/C++,Linux,golang,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,嵌入式 等

标签: 云平台