ffmepg介绍

ffmepg介绍

ffmpeg是一个开放原码的自由软件,可以运行音频和视频多种格式的录影、转换、流功能。
具体地,ffmpeg包括一组应用程序和函数库。

命令行应用程序

  • ffmpeg:用于对视频文档或音频档案转换格式
  • ffplay:一个简单的播放器,基于SDL与FFmpeg库
  • ffprobe:用于显示媒体文件的信息
    函数库
  • libswresample
  • libavresample
  • libavcodec:包含全部FFmpeg音频/视频编解码库
  • libavformat:包含demuxers和muxer库
  • libavutil:包含一些工具库
  • libpostproc:对于视频做前处理的库
  • libswscale:对于影像作缩放的库
  • libavfilter

基本语法

这里介绍ffmpeg应用程序的使用语法

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

ffmepg的输入文件可以是多个(比如将视频和音频文件合成为一个带有声音的视频),输出文件也可以是多个(比如从视频中截取多帧图片)。输入文件地址用命令-i接地址指定,没有命令指定的地址是输出文件地址。
ffmpeg对选项的顺序敏感,选项作用于下一个指定的文件。所以,在一个命令中,可以出现多次相同的选项。例外是全局选项(global_options)必须在最前面指定。
例如,下面的命令包含两个-r,令输入文件的fps为1,输出文件的fps为24。

ffmpeg -r 1 -i input.m2v -r 24 output.avi

处理流程

ffmepg的处理流程可以用下图描述:
ffmepg介绍_第1张图片
这里首先说明一下多媒体数据的封装格式和编码格式。编码是对数据的压缩算法,常见的编码格式有:h264、h265、mpeg、wmv、aac 等。封装格式也称为容器格式,作为编码格式的载体,将至少一个编码格式的数据按照特定格式组织起来,并提供一些辅助功能。一个视频文件格式可以看成一个容器,这个容器包含了如音频轨道、视频轨道和其他一些元数据。常见的封装格式有mp4、mkv、avi等。

上图中demuxer是解封装器,muxer是封装器,decoder是解码器,encoder是编码器。ffmpeg首先读取输入源,然后通过demuxer将音视频包进行解封装,这个动作通过调用libavformat中的接口即可实现;接着通过decoder进行解码,将音视频通过decoder解包为YUV或者PCM这样的数据,decoder通过libavcodec中的接口即可实现;然后通过encoder将对应的数据进行编码,编码可以通过libavcodec中的接口实现;接下来将编码后的音视频数据包通过muxer进行封装,muxer封装通过libavformat中的接口即可实现,输出成为输出流。

过滤器filter

对于解码得到的原始数据,ffmpeg可以对其进行操作,并将这些操作称之为过滤。ffmpeg通过libavfilter中的接口进行过滤。
过滤分为两种,简单过滤和复杂过滤。
简单过滤如下图只有一个输入输出,可以用线性的过程来表示。
在这里插入图片描述
复杂过滤如下图,不能用一个线性的过程来表示。
ffmepg介绍_第2张图片

例子

提取带音频的视频文件中的视频流,屏蔽音频

ffmpeg -i input.mp4 -an output.mp4

提取带音频的视频文件中的音频,屏蔽视频

ffmpeg -i input.mp4 -vn output.aac

参考资料

ffmpeg官方文档
wiki百科ffmpeg
https://zhuanlan.zhihu.com/p/37516093

你可能感兴趣的:(ffmepg介绍)