首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一组png或webp图像转换为webp动画。

将一组png或webp图像转换为webp动画。
EN

Stack Overflow用户
提问于 2019-10-14 09:49:19
回答 1查看 3.1K关注 0票数 3

如何将一堆png或webp图像转换为webp动画?

我试过这个:

代码语言:javascript
复制
convert mytiles.png -crop 100x100 +repage tmp.webp

但我只得到了一堆webp图像,而不是动画。

另一种解决方案是使用gif2webp,但是自制 webp包不包含此命令,这与在官方文档中编写的命令不同。

EN

回答 1

Stack Overflow用户

发布于 2020-03-21 19:07:10

将帧转换为WebP,然后使用webpmux

webpmux程序附带了Google的WebP参考库,即libwebp,如果还不存在,您可以通过包管理器安装它。它的手册页是:

webpmux -从非动画WebP图像创建动画WebP文件,从WebP动画图像中提取框架,并管理XMP/EXIF元数据和ICC配置文件。

如果您的单个帧是另一种格式,则首先需要将它们转换为WebP。对于此任务,可以使用ImageMagick (除非需要,否则这里-be肯定会禁用有耗压缩的更多选项):

代码语言:javascript
复制
convert frame001.png -define webp:lossless=true frame001.webp

然后可以使用webpmux组合帧。语法如下,其中大写单词是占位符:

代码语言:javascript
复制
webpmux \
  -frame frame001.webp +D1+X1+Y1+M1±b \
  -frame frame002.webp +D2+X2+Y2+M2±b \
  -frame frame003.webp +D3+X3+Y3+M3±b \
  [-loop L]  [-bgcolor A,R,G,B] \
  -o animation.webp

每个帧都需要一些设置。所有这些,但持续时间可以是隐式的。

  • Di是帧的持续时间,以毫秒为单位。
  • (XiYi)是画布中帧的空间偏移量(从左上角计数,X向右移动,Y向下移动)。
  • Mi是此帧的dispose方法,换句话说,在此框架过期后该如何处理。它有两个可能的值:
    • 0:不要处置,保持画布原样;
    • 1:处理,即清理画布并填充背景(为此消耗能量)。

  • ±b是此框架的混合方法,它指定如何将此帧叠加在现有画布上(只有当框架具有alpha通道时才相关,否则它将覆盖其下方的内容)。这个参数有两个可能的值:
    • -b:不要混合,框架覆盖现有的画布;
    • +b:使用alpha混合,框架与现有画布相结合。

然后是应用于整个动画的可选设置:

  • -loop L指定播放动画的次数L。您可能希望它是无限的,这是指-loop 0,它是默认值。
  • -bgcolor A,R,G,B指定背景色。这四个组件(alpha、红色、绿色、蓝色)的值从0到255不等。查看者可以使用此颜色作为画布的背景,因此画布是不透明的,但不需要这样做;在实践中,画布被覆盖在其他元素之上,例如在网页中,而且我没有看到使用这种颜色。

也见关于动画的WebP规范

最后提示:由于每个帧的命令行选项不仅仅是输入文件名,所以不能直接使用frame*.webp这样的通配符,编写命令行非常麻烦。谢天谢地,您可以使用shell构建命令行,例如使用Bash:

代码语言:javascript
复制
frames=( )
for f in frame*.webp ; do
    frames+=( -frame "$f" +100+0+0+0+b )
done
webpmux "${frames[@]}" -o animation.webp

上面的示例创建了一个动画,该动画的帧都是与frame*.webp匹配的图像,持续时间为100 ms,没有空间偏移,并与以前的帧组合(对新帧使用alpha混合,之后不处理它们)。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58374189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档