FFmpeg的简单使用
简单聊一聊FFmpeg的使用;
其有非常强大的功能:包括但不限于 视频采集功能、视频格式转换、视频抓图、给视频加水印等。
以下来源于百度百科:FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
简单介绍一下使用方法:
应用场景1:格式转换
我想把用iPhone拍的.MOV文件转成.avi文件。最简单了,可以执行下面的命令:
1 | ffmpeg -i D:\Media\IMG_0873.MOV D:\Media\output.avi |
【意思是,把D:\Media目录下的源文件IMG_0873.MOV(视频:h.264,音频:aac)转换成output.avi(编码格式自动选择为:视频mpeg4,音频mp3),目标文件仍然保存到D:\Media目录下。】
问题来了:我想自己指定编码格式,怎么办呢?可通过目标文件的扩展名(.flv、.mpg、.mp4、.wmv等)来控制,比如:
1 | ffmpeg -i D:\Media\IMG_0873.MOV D:\Media\output2.flv |
应用场景2:调整大小
若源文件的图像帧尺寸是1920x 1080,我不需要这么大——能有720 x 480就够了。于是,就要用上-s参数了。为了保证图像缩放后的质量,最好加上码流参数-b:v。如下:
1 | ffmpeg -i D:\Media\IMG_0873.MOV -s 720x480 -b:v 1500k D:\Media\output2.avi |
应用场景3:翻转视频
手机拍的视频中,有些是颠倒的,我想让它顺时针旋转90度。这时候,可以使用-vf参数加入一个过滤器,如下:
1 | ffmpeg -i D:\Media\IMG_0873.MOV -vf "rotate=90*PI/180" D:\Media\output3.avi |
注:如果想逆时针旋转90度,90前面加个负号就可以了。
应用场景4:截取一段
需要从源视频里截取一小段,怎么办呢?比如从第2秒的地方开始,往后截取10秒钟。命令行可以这样:
1 | ffmpeg -ss 2 -t 10 -i D:\Media\IMG_0873.MOV D:\Media\output4.avi |
注:这种情况下,-ss和-t参数必须放在-i前面,表示是限定后面跟着的输入文件的。
应用场景5:视频合成
用手机拍的视频有时候背景噪音比较大。怎么把噪音去掉,换成一段美妙的音乐呢?使用FFmpeg也能轻易做到。
第一步:把源文件里的音频去掉,生成一个临时文件tmp.mov
1 | ffmpeg -i D:\Media\IMG_0873.MOV -vcodec copy -an D:\Media\tmp.mov |
注:-vcodec copy的意思是对源视频不解码,直接拷贝到目标文件;-an的意思是将源文件里的音频丢弃。
第二步:把这个无声的视频文件(tmp.mov)与一个音乐文件(music.mp3)合成,最终生成output.mov
1 | ffmpeg -i D:\Media\tmp.mov -ss 30 -t 52 -i D:\Media\music.mp3 -vcodec copy D:\Media\output5.avi |
为了保证良好的合成效果,音乐时长必须匹配视频时长。这里我们事先知道视频时长为52秒,于是截取music.mp3文件的第30秒往后的52秒与视频合成。另外,为了保证音频时长截取的准确性,我们这里没有使用-acodec copy,而是让音频重新转码。
还有一种情况:我们希望在一段视频上叠加一张图片(将视频画面全部显示该图片)。可以简单实现如下:
1 | ffmpeg -i D:\Media\IMG_0873.MOV -i D:\Media\logo.png -filter_complex 'overlay' D:\Media\output6.avi |
应用场景6:视频播放
格式转换或合成之后,我们需要试着播放一下。播放器的选择很多。这里顺手用ffplay工具也行:
1 | ffplay -i D:\Media\output6.avi |
应用场景7:获取视频信息
有时候,我只是想看看这个视频文件的格式信息。可以用ffprobe工具:
1 | ffprobe -i D:\Media\IMG_0873.MOV |
应用场景8:截取视频前3秒 并转化为gif
1 | ffmpeg -ss 00:00:01 -t 3 -i 123.mp4 -vf crop=iw:ih*2/3 -s 320x240 -r 7 456.gif |
ps: -ss 00:00:01表示从视频第一秒开始截取 ; - t 表示截图3秒钟的视频 ; -vf crop=iw:ih*2/3 表示截取视频的部分区域,其中宽为视频宽度,高为原视频的2/3 ; -r 7 表示每秒帧率为7帧 ;
应用场景9:把AVI里的音频保存成mp3文件
1 | ffmpeg -i source_video.avi -vn -ar 44100 -acodec libmp3lame -ac 2 -ab 192K -f mp3 sound.mp3 |
应用场景10:分离视频音频流
1 | ffmpeg.exe -i G:\test\123.mp4 -f mp3 -vn G:\test\fgsiug.mp3 |
应用场景11:截取音频
1 | ffmpeg -i demo.mp3 -ss 00:26 -to 01:16:43 -c copy demo1.mp3 |
应用场景12:拼接视频
1 | ffmpeg -f concat -i filelist.txt -c copy output.mp4 |
应用场景13:添加封面
1 | ffmpeg -i output.mp4 -i cover.jpg -map 1 -map 0 -c copy -disposition:0 attached_pic -y output_1.mp4 |
ps:以上来源于互联网以及FFmpeg官方文档
最后
附上FFmpeg官网链接:FFmpeg/FFmpeg: Mirror of https://git.ffmpeg.org/ffmpeg.git (github.com)