ffmpeg 视频生成Animated Webp

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/EI__Nino/article/details/84893709

关键词: ffmpeg, Animated Webp,动图,逆向,倒放,抖音,预览图,

需求

  1. 给视频动态预览图(参考抖音)
    图片来源于抖音
    (图片来源于抖音)

  2. 为了使动图更自然,需要 正向 + 逆向 播放。
    即 1 2 3 4 5 4 3 2 1 循环播放

思路

ffmpeg 原生自带通过视频生成webp
ffmpeg 暂时没找到生成正向+逆向视频的方式(如果有评论告诉我)

  1. 使用ffmpeg 将视频前1秒的视频,切成图片
  2. 将图片进行逆向copy
  3. 将图片合并为视频
  4. 将视频处理为 webp格式动画

仅提供一个思路,还有个思路是生成一个逆向视频,把正向视频和逆向视频组合起来,然后再生成webp(-vf reverse).

疑问

  1. 为什么不直接生成Animated Webp?
    因为直接生成Webp没有正向+逆向的帧

  2. 为什么不直接将图片生成Animated Webp
    好像没有api(如果有评论告诉我)

具体操作

变量用{}表示

  1. 将视频切割为图片
    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

  1. 生成逆序图片
    类似于
    cp {filename}-00001.jpg {filename}-000020.jpg

    cp {filename}-00009.jpg {filename}-000012.jpg

如果有 10张图,那么 00010 是最后一张截图。因为要倒放,那么这一张保留一张即可,所以不再复制这一张图片(否则会在这里有明显卡顿)。所以整体的图片序列缺失一个 00011 的编号。

  1. 将正序+逆序的图片合成为视频
    ffmpeg -i {filename}-%05d.jpg -vcodec mpeg4 -y {filename}.mov

  2. 将视频处理为 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。

猜你喜欢

转载自blog.csdn.net/EI__Nino/article/details/84893709