今天分享一个我制作表情包的技巧。现在视频编辑的门槛已经非常低了,只要装个剪映稍微学一下,很容易就能把你想要的内容剪出来,真的是有手就行。但是视频剪出来的视频是无法直接用做表情包的,只有gif格式的动图才是真正可以用的表情包。另外一点,在微信、企微等通讯软件中,gif动图的大小也是有严格限制的,比如微信和企微里最大是5MB,超过这个大小就会被当成文件传输,且无法被别人收藏转发,也就失去了表情包的意义。我这里分享一些用ffmpeg来生成gif动图的命令行示例,助力大家生产出更多有趣的表情包。
首先就是将一个视频直接转成gif动图,基本命令格式如下:
ffmpeg -i 你的视频文件.mp4 生成的文件名.gif
例如:
ffmpeg -i vid20221028.mp4 out.fig
是不是相当简单。那么,如果说原始视频太长,你只想截取其中的一段视频生成gif,你可以增加-ss和-t两个参数,-ss代表的是start time,也就是开始时间,你可以指定开始的具体秒数,也可以用时:分:秒.毫秒的格式,比如00:12:14.500。-t是要截取的时长,单位是秒。假设我们想从input.mp4里的第73.5秒开始,截取12秒的视频内容生成动图,命令行你可以写成如下的方式:
ffmpeg -i input.mp4 -ss 73.5 -t 12 out.gif
ffmpeg -i input.mp4 -ss 00:01:13.500 -t 12 out.gif
但是,当gif生成后,你会发现gif的大小非常大,这是因为你没有指定目标帧率和分辨率,ffmpeg会延用原始视频的相关参数,这时候可以考虑以下几种方式来降低生成gif动态的大小。
降低动图的帧率
用-r参数来降低征率,比如原始的input.mp4是30帧的,可以用-r 15来降低成15帧。具体效果也是很明显的,生成的文件大小从原来的86MB下降到56MB,具体命令行如下:
ffmpeg -i input.mp4 -ss 00:01:13.500 -t 12 -r 15 out1.gif
关于ffmpeg的-r参数,有个很小坑,-r参数一定要放到-i参数后面,它在前在后的作用是不一样的。
调整画面分辨率
比如原始视频是1080p的,我们可以将其减低到480p,从而显著降低最终的gif文件大小,这里可以使用-s参数,后面跟具体的分辨率大小比如480x272 具体命令如下:
ffmpeg -i input.mp4 -ss 00:01:13.500 -t 12 -s 480x272 out2.gif
有些时候,我们不知道原始的视频分辨率,如果贸然指定目标分辨率的话,可能会导致画面被拉伸,观感下降,这时候可以使用一个更高级的参数-vf,-vf其实就比较复杂了,这里我们只看如何用-vf参数实现宽高等比例缩放吧,具体命令如下:
#scale后面可以指定具体的分辨率宽:高,作用同-s,也可以只指定宽或者高,
#另一者用-d代替,ffmpeg就会自动缩放,保持原比例
ffmpeg -i input.mp4 -ss 00:01:13.500 -t 12 -vf "scale=480:-1" out3.gif
从原来的1080p降低到了480p后,文件大小变化更加明显,从原来的86MB降低到了6MB。看来还是将分辨率的效果比较明显,但是6MB作为表情包还是太大了,这时候我们可以将上面两种方式结合到一起,降分辨率的同时降帧率,命令行如下:
ffmpeg -i input.mp4 -ss 00:01:13.500 -t 12 -vf "scale=480:-1" -r 15 out4.gif
最后生成的文件只有4MB了。这里我再分享一个我做表情包的小技巧,就是提前用剪映剪好你想要的片段,也可以用剪映直接做好画面,导出时选择低分辨率和低码率,这样用最开始的命令直接生成的gif大小也是会在5MB内的,就省了调整各参数的时间了。