FFmpeg的使用

最近做视频抽帧处理的时候,利用opencv处理视频,原视频只有8M左右,抽帧处理后保存的视频竟然有56M!!!不可思议,输出视频的数据速率和总比特率有很大提升。然而,这并不是我想要的提升。在Opencv保存视频的参数中,没能找到设置码率的参数。最后求助于FFmpeg

什么是FFmpeg?

FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec ─这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。

ffmpeg的官网地址是:https://ffmpeg.org/

ffmpeg的Github项目地址是:https://github.com/FFmpeg/FFmpeg

FFmpeg的组成

FFmpeg的项目由一下部分组成:

  • FFmpeg视频文件转换命令行工具,也支持经过实时电视卡抓取和编码成视频文件;
  • ffserver基于HTTP、RTSP用于实时广播的多媒体服务器.也支持时间平移;
  • ffplay用 SDL和FFmpeg库开发的一个简单的媒体播放器;
  • libavcodec一个包含了所有FFmpeg音视频编解码器的库。为了保证最优性能和高可复用性,大多数编解码器从头开发的;
  • libavformat一个包含了所有的普通音视格式的解析器和产生器的库。

谁在使用?

  • 使用FFMPEG作为内核视频播放器:Mplayer,ffplay,射手播放器,暴风影音,KMPlayer,QQ影音
  • 使用FFMPEG作为内核的Directshow Filter:ffdshow,lav filters
  • 使用FFMPEG作为内核的转码工具:格式工厂

如何安装?

FFmpeg可以在Windows、Linux还有Mac OS等多种操作系统中进行安装和使用。

这篇文章主要介绍其在Windows下面的安装:

  1. 下载编译好的Windows版本:http://ffmpeg.zeranoe.com/builds/(与官网同步)
  2. 解压缩,放入合适位置,并在系统的环境变量中添加bin目录路径
  3. FFmpeg分为3个版本:Static、 Shared、 Dev
  4. 前两个版本可以直接在命令行中使用。包含了三个exe:ffmpeg.exe,ffplay.exe,ffprobe.exe
  5. Static版本中的exe体积较大,那是因为相关的Dll都已经编译进exe里面去了。
  6. Shared版本中exe的体积相对小很多,是因为它们运行的时候还需要到相关的dll中调用相应的功能
  7. Dev版本用于开发,里面包含了库文件xxx.lib以及头文件xxx.h

怎么使用?

使用命令行工具

ffmpeg.exe

用于转码的应用程序,如以下代码将input.mp4转成码率为640kbps的视频output.mp4:

ffmpeg.exe -i input.mp4 -b:v 640k output.mp4  

具体用法可以参考:ffmpeg参数中文详细解释

英文官方说明:http://ffmpeg.org/ffmpeg.html

ffplay.exe

主要用于播放音视频的应用程序

ffplay.exe test.avi

中文参考:https://blog.csdn.net/leixiaohua1020/article/details/15186441

英文参考:http://ffmpeg.org/ffplay.html

ffprobe.exe

主要用于查看文件格式的应用程序

英文文档说明:http://ffmpeg.org/ffprobe.html

使用ffmpeg库进行开发

这部分内容暂时不作介绍

参考资料

  1. FFmpeg官方文档