ffmpeg了解
之前了解过许多的剪辑和录像软件都是内置ffmpeg的,通过ffmpeg直接来处理视频可能要更简单一点,也更酷不是吗?
那么通过浏览网上文章,并且自己试试,可以实现几个简单的功能
缩小视频
假设原始视频尺寸是 1080p(即 1920×1080 px,16:9),使用下面命令可以缩小到 480p:
$ ffmpeg -i a.mov -vf scale=853:480 -acodec aac -vcodec h264 out.mp4
各个参数的含义:
-
-i a.mov
指定待处理视频的文件名 -
-vf scale=853:480
vf 参数用于指定视频滤镜,其中 scale 表示缩放,后面的数字表示缩放至 853×480 px,其中的 853px 是计算而得,因为原始视频的宽高比为 16:9,所以为了让目标视频的高度为 480px,则宽度 = 480 x 9 / 16 = 853 -
-acodec aac
指定音频使用 aac 编码。注:因为 ffmpeg 的内置 aac 编码目前(写这篇文章时)还是试验阶段,故会提示添加参数 “-strict -2
” 才能继续,尽管添加即可。又或者使用外部的 libfaac(需要重新编译 ffmpeg)。 -
-vcodec h264
指定视频使用 h264 编码。注:目前手机一般视频拍摄的格式(封装格式、文件格式)为 mov 或者 mp4,这两者的音频编码都是 aac,视频都是 h264。
out.mp4
指定输出文件名
上面的参数 scale=853:480 当中的宽度和高度实际应用场景中通常只需指定一个,比如指定高度为 480 或者 720,至于宽度则可以传入 “-1” 表示由原始视频的宽高比自动计算而得。即参数可以写为:scale=-1:480,当然也可以 scale=480:-1
裁剪视频
是的,没有猜错,示例就是处理斗鱼小姐姐的视频,既然三部分是一样的,我们能不能直接留下一部分就好呢?
有时可能只需要视频的正中一块,而两头的内容不需要,这时可以对视频进行裁剪(crop),比如有一个竖向的视频 1920 x 1080,如果指向保留中间 640 x 1080 部分,可以使用下面的命令:
$ ffmpeg -i a.mov -strict -2 -vf crop=640:1080:640:0 out.mp4
其中的 crop=1080:1080:0:420
是裁剪参数,具体含义是 crop=width:height:x:y
,其中 width
和 height
表示裁剪后的尺寸,x:y
表示裁剪区域的左上角坐标。比如当前这个示例,我们只需要保留横向视频的中间部分,所以 y 不用偏移,故传入0,而 x 则需要向右偏移:1920 / 3 = 640 (因为两边部分可能有水印,所以这里截取中间部分)
视频缩放和裁剪是可以同时进行的,如下命令则为将一个视频缩小至 540高,然后裁剪保留横向中间部分:
$ ffmpeg -i IMG_4940.MOV -strict -2 -vf scale=-1:540,crop=320:540:320:0 out-min.mp4
剪辑视频
如果有一段很长的视频只需保留其中的一段,可以使用下面命令对视频进行剪辑。
$ ffmpeg -i a.mov -ss 00:00:21 -t 00:00:10 -acodec aac -vcodec h264 -strict -2 out.mp4
其中 -ss 00:00:21
表示开始剪辑的位置(时间点),-t 00:00:10
表示剪辑的长度,即 10 秒钟。
当然一段视频是可以在一个命令里同时进行剪辑、缩放、裁剪的,只需把相关的参数合在一起即可。