如何大幅提升ImageMagick将2张PNG与1张GIF并排拼接输出GIF的速度
优化后的脚本(实测提速2~3倍,耗时可降至0.5s以内)
# 先提前获取动图帧数,避免重复调用 GIF_FRAME_COUNT=$(identify -format %n sample/1/3.gif) time ( convert \ \( sample/1/3.gif -coalesce -set page +600+0 \) \ \( sample/1/1.png -duplicate $GIF_FRAME_COUNT -set page +0+0 \) \ \( sample/1/2.png -duplicate $GIF_FRAME_COUNT -set page +300+0 \) \ -layers merge \ -layers optimize -fuzz 10% \ result.gif )
核心优化逻辑
- 砍掉原脚本两次PNG转GIF的磁盘读写操作,所有中间处理全部在内存完成,避免不必要的IO开销
- 删掉重复的
-coalesce调用,仅对输入的动图做1次帧展开即可,静态图不需要反复处理 - 静态PNG直接通过
-duplicate参数复制为和动图帧数一致的序列,不需要生成临时GIF文件 - 把最终的GIF优化步骤合并到同一个convert流程中,不需要输出结果后再调用mogrify二次读写文件
- 可选额外提速:如果可以接受轻微画质损失,可在参数中加入
-depth 8-colors 256限制调色板大小,或加-limit thread N(N为你的CPU核心数)开启多线程加速
内容的提问来源于stack exchange,提问作者JR Wink
相关产品推荐
相关产品推荐

