说明:ffmpeg是一款非常好用的媒体操作工具,包含了许多对于视频、音频的操作,有些视频播放器,实际上就是套了一个ffmpeg的壳子。本文介绍ffmpeg的使用以及一些较为实用的命令。
安装
ffmpeg是命令行操作的,不需要安装,可在官网下载压缩包;
解压到一个没有中文、没有数字的路径下,配置一下环境变量,这些都是基本操作,不再详细介绍;
打开CMD,输入ffmepg
,出现以下信息表示环境变量配置成功;
使用
命令1:提取视频所有帧
有时我们需要对视频图像进行处理,可以考虑把视频按帧提取出来成图片,再使用代码对图像进行逐帧处理,可使用以下命令:
ffmpeg -i <视频文件名> -r 60(帧数) -qscale:v 2 out/%04d.jpg(图片路径及命令规则)
参数介绍:
- out/%04d.jpg:表示提取出来的图片放在当前目录下的out文件夹,名称按照"0001.jpg、0002.jpg……"的方式命名;
比如,我这里有一个视频(before.mp4)
在当前目录创建一个out文件夹,用于接收图片,输入下面命令,将视频按照24帧/秒转为图片。
需要注意哦,帧数不是随意设置的,一般视频帧数是24。如果你需要对手头上的视频按帧处理,在提取帧之前应该要先了解这段视频文件的拍摄参数,了解到视频的帧数是多少;
可以感受到提取速度还是非常快的,1分半的视频,2090帧,几秒钟就全部提取出来了,这是因为ffmpeg工具是使用C系语言开发的;
另外,记住转换的解码率,后面合并图片为视频时需要用;
命令2:图片合成视频
一般来说,我们将上面提取出来的图片进行了一些处理后,就可以将处理后的图片集合成视频,使用下面这行命令:
ffmpeg -f image2 -framerate 24(帧数) -i %04d.jpg -b:v 7920k(转码率) <生成视频名>
- %04d.jpg:表示输入的图片集合是以“0001.jpg、0002.jpg……”命名规则命名的;
比如将上面提取出来的图片再合成一个视频,如下:
啊?!视频怎么这么小,并且画质非常糟糕?
因为上面的命令中,解码率是7920k,我少了一个k
,删掉视频,重新合并:
这会正常了,而且画质也和原视频一样,所以注意合并视频时,解码率需要和提取视频帧时一致;
命令3:提取视频的音频
可使用下面的命令,提取出视频中的音频;
ffmpeg -i <视频文件> -f mp3 -vn <生成的音频文件>
比如把我这个视频(before.mp4)中的音频提取出来,命名为audio.mp3
实际使用时,可以灵活一点,比如需要把某种音频类型,转为另一种类型,直接修改后缀名可能会造成文件损坏不可用,就可以使用这种方式进行提取,达到音频类型转换的目的;
命令4:音视频合并
可以使用下面这个命令,把音频和视频进行合并;
ffmpeg -i <视频文件名> -i <音频文件名> -c:v copy -c:a aac -strict experimental <生成视频名>
像上面使用命令2合成的视频,当然是没有声音的,想做成一个完整的视频,还需要把音频进行合并,如下:
这样,一个完整的视频抽取图片,处理图片,提取音频,合成视频的制作流程就完成了;
命令5:分割视频
分割视频的命令有许多方式,如下:
ffmpeg -ss 01:00:00 -i <视频文件> -vcodec copy -acodec copy -t 00:06:00 <生成视频文件>
ffmpeg -ss 00:00:00 -i <视频文件> -c copy -t 600 <生成视频文件>
ffmpeg -i <视频文件> -ss 1 -c copy -to 75 <生成视频文件>
我最喜欢用最后这种,非常方便,前面的数字表示起始秒,后面表示末尾秒,比如把上面的视频final.mp4截取第10~20秒,如下:
需要注意,切割视频会有画面的丢失,需要手动微调一下分割点,比如从10秒开始,画面有丢失,稍微加一点,比如10.5秒,10.7秒可能丢失的画面会变少(当然减一点也可以,看自己的情况),可通过微调达到画面基本不丢失;
命令6:合并视频
可输入以下命令,合并两个视频;
ffmpeg -f concat -safe 0 -i <合并视频列表.txt> -c copy <生成视频名.mp4>
- 合并视频列表.txt:指合并的视频清单,如下表示合并part1.mp4,part2.mp4这两个视频;
我再分割出来一个视频(part2.mp4),然后把这两个视频进行合并,如下:
命令7:播放视频
上面合成后的视频通过系统播放器可能无法播放,这时可以通过ffmpeg自带的播放视频/音频的命令ffplay
来打开视频/音频文件;
ffplay <视频/音频文件>
打开上面合成的视频,如下:
命令8:提取视频片段为Gif图
可以敲下面的命令,将视频中开头的10秒动画转为Gif图,帧率为10,尺寸为960px(宽度);
ffmpeg -i <视频文件> -t 10 -vf "fps=10,scale=960:-1:flags=lanczos" -c:v gif <输出文件名.gif>
以我桌面上的这个视频文件为例;
提取出来的gif图如下;
总结
ffmpeg是一款非常方便,功能强大的媒体操作工具,本文介绍了ffmpeg较为常用的一些操作命令;