什么是FFmpeg

1.1 简介

FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPLGPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。

FFmpeg提供了强大的命令行工具,非常方便用户使用以及二次开发。

官方网站:http://www.ffmpeg.org/

1.2 组件

FFmpeg项目由以下几部分组成:

1.FFmpeg视频文件转换命令行工具,也支持经过实时电视卡抓取和编码成视频文件;

2.ffserver基于HTTPRTSP用于实时广播的多媒体服务器.也支持时间平移;

3.ffplay SDLFFmpeg库开发的一个简单的媒体播放器;

4.libavcodec一个包含了所有FFmpeg音视频编解码器的库。为了保证最优性能和高可复用性,大多数编解码器从头开发的;

5.libavformat一个包含了所有的普通音视格式的解析器和产生器的库。

1.3 FFmpeg架构流程图

图片来源:http://xcshen.blog.51cto.com/2835389/565929

怎么安装FFmpeg

FFmpeg可以在WindowsLinuxMac OS等多种操作系统环境中进行安装和使用。

2.1 Windows系统下安装

http://ffmpeg.zeranoe.com/builds/中下载Windows版本的FFmpeg,假如下载的是已经编译好的二进制文件ffmpeg-latest-win32-static.7z,将其解压之后就可以使用了。

打开CMDcd进入解压之后的bin文件夹,之后就可以在CMD中使用ffmpeg的命令了。

2.2 Linux系统下安装

首先需要安装一些解码器:lamelibogglibvorbisxvidx264libdtsa52faacamr-nbamr-wblib52等,可以采用源码安装或者rpmdeb等二进制方式安装,安装步骤较简单,跳过。

上面一切安装成功之后,下面就可以安装FFmpeg了,同样可以采用源码安装或者二进制文件安装两种方式。

以源码安装为例,在http://ffmpeg.mplayerhq.hu/download.html下载最新的源码包,例如下载的是ffmpeg-2.0.tar.gz,将其上传到Linux系统的某一个目录,进入该目录然后执行下面的命令进行安装:

tar –xvf ffmpeg-2.0.tar.gz

cd ffmpeg-2.0

./configure --prefix=/usr --enable-gpl  --enable-shared --enable-libmp3lame --enable-libogg --enable-libvorbis --enable-libamr-nb  --enable-libamr-wb --enable-libxvid --enable-libx264 --enable-liba52 --enable-liba52bin --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-pp --enable-pthreads --disable-ffserver --disable-ffplay

make && make install 

 

怎么使用FFmpeg

ffmpeg相关的命令语法详见附录。

3.1 命令行工具的用法

 

3.1.1 播放音频

使用ffplay命令就可以播放一个音频文件了,例如执行下面的命令播放一个mp3文件:ffplay.exe D:\Download\4b.mp3,执行之后就会弹出一个窗口进行播放。

3.1.2 播放视频

跟播放音频文件类似,播放视频文件的时候,将命令后面的文件改为视频文件的路径即可。例如,播放一个mp4文件,执行如下命令:ffplay.exeD:\Download\beijing5-360p.mp4

3.1.3 视频格式转换

mp4转换为flv格式:ffmpeg -y -iD:\Download\beijing5-360p.mp4 -ab 56k -ar 22050 -b:v 500k -r 29.97 -s 640x358D:\Download\beijing5-360p.flv

参数说明如下:

1.–y表示覆盖输出文件;

2.–i表示输入文件;

3.–ab表示音频数据流量,一般选择326496128

4.–ar表示音频采样率,单位为Hz

5.–b:v表示视频码率;

6.–r表示帧速率,单位为Hz

7.–s640x358表示帧尺寸,输出的分辨率为640x358

8.D:\Download\beijing5-360p.flv表示输出的文件。

3.1.4 截图

执行如下命令进行截图:ffmpeg -y -iD:\Download\beijing5-360p.mp4 -ss 165.000 -frames 1 -f image2D:\Download\images\cap%3d.jpg

参数说明如下:

1.–y表示覆盖输出文件;

2.–iD:\Download\beijing5-360p.mp4表示输入文件;

3.-ss165.000表示起始时间为165.000秒;

4.-frames1表示只记录一个帧;

5.-fimage2表示格式为image2

6.D:\Download\images\cap%3d.jpg表示输出文件,%3d类似C语言的数字输出格式,输出为3位数字。

3.1.5 录制屏幕

ffmpeg录制视频的方法很简单,执行下面的命令:ffmpeg -f alsa -ac 1-i pulse -acodec aac -f x11grab -s 1024x600 -i :0.0 –sameq a.mp4

这条命令不但可以录制屏幕,还可以录制声音,其中录制声音的部分是:-f alsa -ac 1 -i pulse-acodec aac。录制视频的是: -f x11grab -s1024x600 -i :0.0 –sameq

3.1.6 视频切割

剪切的同时,格式不变,音视频参数不变:ffmpeg -y -i bjysxyt5.mp4 -ss 00:00:00.0 -t 00:01:00.0 -acodec copy -vcodec copy -async 1 bjysxyt1.mp4
剪切的同时,音视频参数不变,只转换格式:ffmpeg -y -i bjysxyt5.mp4 -ss 00:00:00.0 -t 00:01:00.0 -acodec copy -vcodec copy -async 1 bjysxyt1.flv
剪切的同时,格式不变,只转换音视频参数:ffmpeg -y -i bjysxyt5.mp4 -ss 00:00:00.0 -t 00:01:00.0 -ab 56k -ar 44100 -b:v 2200k -r 29.97 -s 640x360 bjysxyt1.mp4
剪切的同时,既转换格式又转换音视频参数:ffmpeg -y -i bjysxyt5.mp4 -ss 00:00:00.0 -t 00:01:00.0 -ab 56k -ar 44100 -b:v 2200k -r 29.97 -s 640x360 bjysxyt1.flv

说明:-i表示输入文件;-acodec copy -vcodec copy 表示音频、视频不进行编解码,直接复制源视频;-ss表示起始时间,-t表示时长,格式均为“小时:分钟:秒”。

3.1.7 获取视频信息
ffprobe -v quiet -print_format json -show_format -show_streams VIDEO_FILE