我正在使用ImageMagick将png
文件的序列转换为动画gif
。基本上命令是
convert -delay 5 img/gif_part_*.png animation.gif
文件从gif_part_1.png
转到gif_part_27.png
,但gif从gif_part_10.png
(可能是9)开始,然后转到最后一个。你可以在这里看到它。 Stack不允许我上传gif
文件,因此我稍后会对其进行修改。
那么我可以对gif
中的文件数量进行限制(现在看起来最大值大约为18)?我正在研究龟图形,我想通过递归函数创建图形时显示过程。 png
个文件的数量可能是100个或更多。
我也尝试过使用ffmpeg,但无法使其正常工作。
更新
我尝试用两个较小的gif
制作一个gif
,然后完成了这项工作。但我认为这是一种可怕的方式 - 这将是一项非常重要的工作,将它们放在一起。
我认为问题可能在于命名文件。我在某处读过,可能需要添加零,因为gif_part_10.png
可能会在gif_part_1.png
之前。
答案 0 :(得分:2)
基本上,解决方案是我更新的问题。但为了更好的可读性,我将添加一个答案。问题在于命名单个png
文件。当ImageMagick-command convert
创建gif
文件时,它需要以某种方式对png
文件进行排序。 错误命名将是
img1.png
img2.png
.
img10.png
.
.
img90.png
因为在这种情况下convert
会将img10.png
放在img1.png
之前,这肯定会破坏输出。 正确方式是:
img01.png
img02.png
img03.png
img04.png
img05.png
img06.png
img07.png
img08.png
img09.png
img10.png
.
.
.
img90.png
现在convert
将按正确的顺序对文件进行排序
png
文件,因此我可以轻松地更正脚本,这要归功于this整洁的方法。我假设您知道,要将多少张图片转换为gif
,请将其放入变量`num_images'然后你可以这样做:
path = 'img_'+ str(index + 1).zfill( len( str( num_images) ) )
path += '.png'
将添加必要数量的前导零。例如。您要转换236
张图片(在我们的案例中为num_images = 236
)。另一个巧妙的技巧是len( str( num_images ) )
。首先,它从236
创建一个字符串 - > '236'
然后找到len( '236' ) = 3
这是最终文件的外观zfill
:
img_001.png
img_002.png
.
.
.
img_010.png
img_011.png
.
.
img_100.png
.
.
.
img_236.png