不确定你在3天内使用ImageMagick获取了什么信息 - 它是一款功能强大的软件,你可以花一生时间来学习。无论如何,让我们制作一些动画,看看我的唠叨是否能帮助到你。
首先,我们制作红色、绿色和蓝色的图像来进行操作:
convert -size 100x100 xc:red r.png
convert -size 100x100 xc:green g.png
convert -size 100x100 xc:blue b.png
接下来,我们从红色融合到绿色,使用8个中间步骤,共计10张图片,并将它们合成一个动画系列,在帧之间设置20毫秒的延迟,并称其为r2g.gif
(表示从红到绿):
convert -delay 20 r.png g.png -morph 8 r2g.gif # Make 10 frame morph called "r2g.gif"
identify r2g.gif # look at frames
r2g.gif[0] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[1] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[2] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[3] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[4] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[5] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[6] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[7] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[8] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[9] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
我们可以用同样的方法将绿色变为蓝色。
convert -delay 20 g.png b.png -morph 8 g2b.gif
这给我们带来了以下两个GIF图像:
思路1
首先,我想告诉您的是,您可以使用ImageMagick将动态GIF图像连接在一起,如下所示:
convert r2g.gif g2b.gif both.gif
让你先从红色到绿色,然后再从绿色到蓝色。
重要的是,如果你使用Fred的脚本,你可以将动画A连接到动画B。因此,只要你能在2个点之间进行动画(你可以),你就可以通过连接两个动画来动画到第三个点,因此不需要向Fred的脚本传递超过2个点。
思路2
-delay
参数是一个设置而不是一个操作,因此它会保留到命令结束或者直到你改变它。所以你可以使一帧的帧延迟时间很长,然后在随后的帧中恢复到较短的时间,如下:
convert -delay 300 r2g.gif[0] \
-delay 20 r2g.gif \
-delay 300 g2b.gif[0] \
-delay 20 g2b.gif \
staccato.gif
本质上,我们在动画的第一帧暂停了3秒,并将红绿和绿蓝动画之间的过渡帧也保持在3秒钟,同时将其他帧周期设置为20厘秒。您还应该注意,我们可以通过在文件名后面加上方括号并使用-1
来指示最后一帧,以便访问动画的各个帧。
您现在可以像这样检查由前一个命令引起的各个帧之间的时间/延迟:
identify -format "%f[%s] %T\n" anim.gif
anim.gif[0] 300 <--- first frame has 3 second frame time
anim.gif[1] 20
anim.gif[2] 20
anim.gif[3] 20
anim.gif[4] 20
anim.gif[5] 20
anim.gif[6] 20
anim.gif[7] 20
anim.gif[8] 20
anim.gif[9] 20
anim.gif[10] 20
anim.gif[11] 300 <--- first frame of second animation also held for 3 seconds
anim.gif[12] 20
anim.gif[13] 20
anim.gif[14] 20
anim.gif[15] 20
anim.gif[16] 20
anim.gif[17] 20
anim.gif[18] 20
anim.gif[19] 20
anim.gif[20] 20
anim.gif[21] 20