答案1
听起来你正在尝试制作视频。如果是这样的话,那么我会使用适当的视频格式。
在这种情况下,我会使用ffmpeg将单个 PNG 文件转换为 H.264 视频。由于 ffmpeg 可以处理长达数小时的视频,因此处理数千张图像应该没有问题。使用 H.264 而不是动画 gif 将导致广阔的图像质量的改善。
类似这样的事情应该对你有用:
ffmpeg -framerate 1/2 -i img%04d.png -c:v libx264 -r 30 out.mp4
-framerate 1/2
:将帧速率设置为一半 FPS,即每帧 2 秒。-i img%04d.png
img0000.png
:这告诉 ffmpeg读取文件img9999.png
。-c:v libx264
:使用视频编解码器libx264。- 如果您愿意,可以在这里指定视频压缩参数:
-crf <number>
:质量设置。0 到 51。23 为默认值。0 为真正的无损编码,这将需要相当高的带宽。18 几乎是视觉上无损的。
-r 30
:将输出帧速率设置为 30 FPS。每个输入图像将被复制,以使输出达到您在此处指定的值。您可以关闭此参数,输出文件将处于输入帧速率,但刚才我尝试时,生成的影片无法正确显示。out.mp4
:输出文件名。
参考:
答案2
就我个人而言,我只会针对有限数量的文件启动它,而不是一次性启动所有文件。例如,如下所示:
#!/usr/bin/env bash
## Collect all png files in the files array
files=( *png )
## How many should be done at once
batch=50
## Read the array in batches of $batch
for (( i=0; $i<${#files[@]}; i+=$batch ))
do
## Convert this batch
convert -delay 2 -loop 0 "${files[@]:$i:$batch}" animated.$i.gif
done
## Now, merge them into a single file
convert animated.*.gif all.gif
答案3
用于-limit memory 1GiB
限制内存使用量convert
。
数千张图像会创建一个巨大的 GIF,大多数计算机都难以显示。我尽可能将动画 GIF 保持在 200 张以下。越少越好。如果您对图像进行编号,此命令将删除奇数编号的图像rm *[13579].png
。
以下是我从电影场景创建动画 GIF 的典型工作流程:
avconv -ss 00:26:00 -i someMovie.mpg %5d.png
rm *[13579].png
convert -limit memory 1GiB -loop 0 -layers optimize -resize 400 *.png output.gif