关键词: ffmpeg, Animated Webp,动图,逆向,倒放,抖音,预览图,
需求
-
给视频动态预览图(参考抖音)
(图片来源于抖音) -
为了使动图更自然,需要 正向 + 逆向 播放。
即 1 2 3 4 5 4 3 2 1 循环播放
思路
ffmpeg 原生自带通过视频生成webp
ffmpeg 暂时没找到生成正向+逆向视频的方式(如果有评论告诉我)
- 使用ffmpeg 将视频前1秒的视频,切成图片
- 将图片进行逆向copy
- 将图片合并为视频
- 将视频处理为 webp格式动画
仅提供一个思路,还有个思路是生成一个逆向视频,把正向视频和逆向视频组合起来,然后再生成webp(-vf reverse
).
疑问
-
为什么不直接生成Animated Webp?
因为直接生成Webp没有正向+逆向的帧 -
为什么不直接将图片生成Animated Webp
好像没有api(如果有评论告诉我)
具体操作
变量用{}
表示
- 将视频切割为图片
ffmpeg -ss 1 -t 1 -i {video_uri} -r 8 -y {filename}-%05d.jpg
%05d
表示为 5位数字,比如 00001.jpg
-ss
为seek到 第1秒(因为有可能前面是黑屏)
-t
为截取 1 秒的视频
-r
设置 fps 为 8
-y
为一路yes
- 生成逆序图片
类似于
cp {filename}-00001.jpg {filename}-000020.jpg
…
cp {filename}-00009.jpg {filename}-000012.jpg
如果有 10张图,那么 00010 是最后一张截图。因为要倒放,那么这一张保留一张即可,所以不再复制这一张图片(否则会在这里有明显卡顿)。所以整体的图片序列缺失一个 00011 的编号。
-
将正序+逆序的图片合成为视频
ffmpeg -i {filename}-%05d.jpg -vcodec mpeg4 -y {filename}.mov
-
将视频处理为 Animated Webp
ffmpeg -v quiet -threads 2 -t 1 -i {filename}.mov -vf scale=360:-1 -r 8 -q 75 -loop 0 -timelimit 60 -y {filename}.webp
-v quiet
为静默执行,不输出那一坨infomation
-threads 2
为使用2个进程
-vf scale=360:-1
缩放到 宽360,高自适应
-q 75
质量 75%
-loop 0
无限循环播放
-timelimit 60
最多程序执行 60秒
生成 正序+逆序 无限循环播放的视频动态预览图 Animated Webp 完毕。
其他
iOS和Android分别要引库来支持Webp。