最好能够通过命令行完成,所以命令行工具将非常受欢迎。
sudo apt-get install imagemagick
convert -delay 20 -loop 0 *.jpg myimage.gif
-resize 50%
。 - Léo Léopold Hertz 준영-deconstruct
选项。我还发现ImageMagick非常占用内存,可以参考这些基准测试:https://askubuntu.com/a/1102183/52975 - Ciro Santilli OurBigBook.comconvert -delay 0 -loop 0 *.tif myanimated.gif
运行得很好,处理了720个tif文件。 - ronconvert -resize 20% -delay 20 -loop 0 *.jpg myimage.gif
或者
convert -resize 768x576 -delay 20 -loop 0 *.jpg myimage.gif
*.jpg
在处理数值时有些不太理想,你可以生成一个包含未排序图片的 gif。
$ ls|cat
21-33-26_1.jpg
21-33-26_10.jpg // <--- this one
21-33-26_2.jpg
21-33-26_3.jpg
21-33-26_4.jpg
21-33-26_5.jpg
21-33-26_6.jpg
21-33-26_7.jpg
21-33-26_8.jpg
21-33-26_9.jpg
21-33-28_1.jpg // <--- should be here
21-33-28_2.jpg
21-33-28_3.jpg
...
convert -resize 768x576 -delay 20 -loop 0 `ls -v` myimage.gif
find
、sort
、花括号扩展等等。ls
工具在这种情况下并不适用。请使用find
命令。虽然需要一些学习曲线,但是它是值得的。 - voices-dispose Background
选项。(我意识到OP的帖子是关于不能具有透明背景的JPEG图像,但以防万一有人通过谷歌找到这个答案,就像我一样)。顺便说一下,关于ls
排序,你可以在内联中进行一些bash脚本的操作,例如:$(for f in \
seq 0 10`; do printf "21-33-26_$f.jpg\n"; done)`。 - Danielffmeg解决方案 + 测试数据
从Ubuntu 18.10开始,ffpmeg 4.0.2-2,ImageMagick 6.9.10-8,我发现ffmpeg比ImageMagick快得多,并且使用的内存要少得多。
最简单的转换命令是:
ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
-r 15 \
-vf scale=512:-1 \
out.gif \
;
wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle
测试数据是使用以下链接生成的:https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292,包含256个1024x1024的PNG图像。我要强调的ffmpeg
重要选项是:
-pattern_type glob
:方便地选择图像
-framerate 60
:假定输入图像为60 FPS,并输出相同的FPS。
ffmpeg
无法知道否则,因为图像中没有像视频格式中那样的FPS数据。
256个输入帧需要约4秒钟才能完成。
-r 15
:可选。每4个图像中挑选一个以缩小大小(4 == 60 / 15
)。
使用它,identify out.gif
表明GIF仅包含64帧。
仍然需要4秒才能播放,因此延迟被改变以使事物匹配。
-vf scale=512:-1
:可选。设置宽度,按比例缩放高度,通常是为了减小大小并节省空间。
另请参阅:
ImageMagick与ffmpeg性能对比
为了让ImageMagick正常工作,我首先需要修改其在/etc/ImageMagick-6/policy.xml
中的磁盘和内存限制,具体方法请参考:https://superuser.com/questions/1178666/imagemagick-convert-quits-after-some-pages
我进行了以下命令的比较:
/usr/bin/time -v convert *.png -deconstruct -delay 1.6 out-convert.gif
/usr/bin/time -v ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
out-ffmpeg.gif \
;
/usr/bin/time -v
:用于查找最大内存使用量,如https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process所述。
-deconstruct
:GIF图像可以只包含前一帧的最小修改矩形,以使GIF文件更小。
ffmpeg
默认计算这些差异,但ImageMagick不会,除非使用-deconstruct
选项。
您基本上希望每次在ImageMagick中使用该选项。
我们可以通过以下方式观察到差异:
identify out.gif
在压缩版本中,所有帧的大小都小于初始帧,例如:
out.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
out.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
out.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
在此示例中,第二帧仅为516x516
,而不是完整的1024x1024,并且位于偏移量252+257
处。因此,它只包含中间的三角形。
另请参阅:how can I resize an animated GIF file using ImageMagick?
-delay
:与ffmpeg
的60FPS相匹配的值。对于转换性能来说应该没有影响,但我不想冒险。
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:56.16
Maximum resident set size (kbytes): 2676856
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.41
Maximum resident set size (kbytes): 97172
-r
和-v
命令,但生成的gif文件质量比原始的png文件低得多。如何保持gif与给定的png文件相同的质量? - BhishanPoudel-framerate 60 -r 60
。使用 ImageMagick 工具像 identify
来检查生成的 GIF 和输入图像,看看到底发生了什么问题。 - Ciro Santilli OurBigBook.compalettegen
和paletteuse
以获得更好的质量和更小的文件大小,例如使用-filter_complex "[0:v] split [a][b];[a] palettegen [p];[b][p] paletteuse"
。参见:giphy engineering。另外,请注意FFmpeg不支持透明背景,这对于制作动画表情等非常重要。 - Danielconvert -resize 50% -delay 10 -loop 0 image_{0..99}.jpg output.gif
sudo apt-get install imagemagick
convert -delay 100 -size 100x100 xc:SkyBlue \
-page +5+10 balloon.gif -page +35+30 medical.gif \
-page +62+50 present.gif -page +10+55 shading.gif \
-loop 0 animation.gif
convert -delay 20 -loop 0 *.png out.gif
可以制作一个循环播放的 GIF。 - unutbu-dispose Background
以清除画布。具体如下所示:convert -delay 100 -dispose Background -loop 0 *.jpg animation.gif
ffmpeg -f concat -i list.txt output.gif
image001.jpg
duration 5
image002.jpg
duration 12
image003.jpg
duration 7
image004.jpg
duration 2