我正在使用 Fred 的 Imagemagick 脚本,特别是 fxtransitions 来创建两个图像之间的过渡效果。我正在创建 jpeg 图像帧。后面我会用ffmpeg把它们转成视频。这是我使用 Imagemagick 的第三天,目前我可以使用以下脚本成功应用两个图像之间的过渡效果。但是,我还需要满足以下两个条件:
$result = shell_exec("bash /cygdrive/path/to/fxtransitions -e explode -f 50 -d 1 -p 1 -r first.jpg second.jpg output.jpg");
echo $result;
最佳答案
不确定您使用 ImageMagick 在 3 天内设法收集了什么 - 它是一款功能强大的软件,您可以花费一生的时间。无论如何,让我们制作一些动画,看看我的散文能不能帮到你。
首先,我们制作一个红色、绿色和蓝色的图像来播放:
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
这给了我们这些家伙:
想法 1
我想告诉您的第一件事是,您可以像这样将动画 GIF 与 ImageMagick 连接在一起:
convert r2g.gif g2b.gif both.gif
所以你首先从红色到绿色,然后从绿色到蓝色。
关键是,如果您使用 Fred 的脚本,您可以将动画 A 连接到动画 B。因此,只要您可以在 2 个点之间设置动画(您可以),您就可以通过连接两个动画将动画设置为第三个点,因此您不需要将超过 2 分传递给 Fred 的脚本。
想法 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
关于php - Imagemagick 在多个图像之间转换——需要想法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31189695/