【ImageMagick】png序列转gif(适合处理带透明度的图片)
最近需要将几组png序列转成gif,之前有用过“Ulead GIF Animator” 和 “Photoshop”,“Ulead GIF Animator”只有windows版,这些年mac是主力机,一直刻意减少使用PS,通过命令行应该有法子可以生成gif?
首先想到的是ffmpeg,虽然ffmpeg主要是视频处理,最近发现可以用它来做一些图片处理,例如 png转jpg、gif转png序列、裁切图片等。
一般用ffmpeg基本都是截取视频生成gif,gif没有透明度,使用 ffmpeg -i %04d.png merge.gif 这种简单的命令基本就实现了。不过,我的情况有点不一样,png带有透明度,转出来的gif也要求有透明度,摸索了好久,下面的代码解决了早期的问题。
ffmpeg代码
inFile=/Users/hf/Desktop/cmd_gif/case1/pngs/%04d.png
outFile=/Users/hf/Desktop/cmd_gif/case1/merge.gif
ffmpeg -y -i "${inFile}" -r 12 \
-filter_complex "[0:v]split[a][b]; [a]palettegen=transparency_color=ffffff[p]; [b][p]paletteuse" \
"${outFile}"
上面是mac上的终端代码,windows上运行请改成这样
ffmpeg -y -i "d:\case1\pngs\%04d.png" -r 12 ^
-filter_complex "[0:v]split[a][b]; [a]palettegen=transparency_color=ffffff[p]; [b][p]paletteuse" ^
"d:\case1\merge.gif"
-r 表示gif的fps,-r 12,表示gif是12帧每秒
“\”是mac上的续行符,“^”是windows上的续行符,代码太长了可以使用续行符进行换行处理
使用上面的命令行做了两组测试
第一次转换测试 效果还不错~
第二次转换测试 就不太理想,gif有明显的重影,在mac上双击gif使用“预览”能查看gif关键帧情况,可以发现第2、第3个关键帧有上一帧的重影
摸索了很久仍然没有解决重影问题,最后转投ImageMagick~~
inFile=/Users/hf/Desktop/cmd_gif/case2/pngs/*.png
outFile=/Users/hf/Desktop/cmd_gif/case2/merge.gif
convert -delay 10 -loop 0 "${inFile}" -set dispose background +repage "${outFile}"
-delay 10 可以根据实际情况进行调整,越小播放速度就越快
嗯~ 真 香 !
两组测试用到的图片资源,已分享到百度网盘了
链接:https://pan.baidu.com/s/1zIoFaY08ET7vLGns1N9Elw 密码:l0cv
*图片资源来自某款像素游戏,仅供学习交流使用!
本文地址:https://blog.csdn.net/hufang360/article/details/107291163