gif
有没有可以从一组文件创建动画的工具png
?
我尝试了convert
来自的命令图像魔术师套件,但这并不总是成功。另外,我对此有几个问题:
- 我无法说出进展如何。
- 无论我如何尝试,该
-delay
标志都不会改变 gif 动画的帧速率。 convert
根据文件名的字母顺序确定帧顺序。这意味着它将被放置在我可以通过添加 0 来解决此问题name500.png
之后name50.png
,而不是之后,但这很烦人。name450.png
答案1
ImageMagickconvert
是一个方便的命令行工具来做到这一点。
cd
到包含您的文件夹PNG-files 并运行此命令:
convert -delay 10 -loop 0 *.png animation.gif
答案2
较新版本的 ffmpeg 没有 -sameq (请参阅常见问题解答)但有 GIF 支持。
ffmpeg -i %03d.png output.gif
其中 %03d 是 3 位数的帧 ID。
您还可以尝试使用ffmpeg
图像序列创建电影,然后将电影转换为 GIF 动画(再次使用ffmpeg
)。
# cf. http://pages.uoregon.edu/noeckel/MakeMovie.html
# first convert an image sequence to a movie
ffmpeg -sameq -i %03d.jpg output.mp4
# ... and then convert the movie to a GIF animation
ffmpeg -i output.mp4 -pix_fmt rgb24 -s qcif -loop_output 0 output.gif
答案3
convert
的选项--delay
仅适用于命令行上的下一个图像。所以convert -delay 10 *
只会将第一帧的延迟设置为0.1秒。需要重复该选项:
convert $(for a in *; do printf -- "-delay 10 %s " $a; done; ) result.gif
为了满足您的排序需求,convert 不会对帧进行排序,而 shell globing*
会进行排序。如果您知道帧的编号是从 0 到 700,您可以自己计算数字:
convert $(for ((a=0; a<700; a++)); do printf -- "-delay 10 name%s.png " $a; done;) result.gif