发布于 2020-03-21 19:07:10
将帧转换为WebP,然后使用webpmux
webpmux程序附带了Google的WebP参考库,即libwebp,如果还不存在,您可以通过包管理器安装它。它的手册页是:
webpmux-从非动画WebP图像创建动画WebP文件,从WebP动画图像中提取框架,并管理XMP/EXIF元数据和ICC配置文件。
如果您的单个帧是另一种格式,则首先需要将它们转换为WebP。对于此任务,可以使用ImageMagick (除非需要,否则这里-be肯定会禁用有耗压缩的更多选项):
convert frame001.png -define webp:lossless=true frame001.webp然后可以使用webpmux组合帧。语法如下,其中大写单词是占位符:
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是帧的持续时间,以毫秒为单位。Xi,Yi)是画布中帧的空间偏移量(从左上角计数,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:
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混合,之后不处理它们)。
https://stackoverflow.com/questions/58374189
复制相似问题