是否有工具可以从一组gif文件中创建一个png动画?

我尝试了ImageMagick套件中的convert命令,但这并不总是成功。另外,我对此有几个问题:


我无法知道进度如何。
无论我尝试什么,-delay标志都不会改变框架gif动画的速率。

convert根据文件名的字母顺序确定帧顺序。这意味着name500.png将被放置在name50.png之后,而不是name450.png之后。我可以通过添加0来解决此问题,但这很烦人。


评论

[新闻] Ubuntu Stackexchange与Unix Stackexchange之间存在大量重叠。我试图在这里对一些线程进行分类。

关于第3项,在对文件进行排序后,您仍然可以使用convert。大概这样的东西可以工作files = $(ls name * png | sort -n -tname -k1);转换$ files animation.gif

对于点1:convert具有-monitor参数,该参数可跟踪进程

@hhc-所有分类只是一个包含5个链接的答案的链接;其中只有一个看起来相关,但这只是上述问题的链接。 -@Luke的评论提供了一种简单的解决方案:convert -delay 200 -loop 0 * .jpg output.gif。

#1 楼


较新版本的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


评论


该指令已过期。

–本·阿弗莱克
14年7月16日在19:03

sameq选项不再可用。此外,对我来说,这将覆盖原始图像文件,并且不会产生有效的电影文件。

–罗德岛
2014年11月8日在18:57

将-sameq代码保留在那里有什么意义?您为什么还要临时使用有损视频格式(output.mp4)?如果是这样,为什么将“相同质量”作为输入,而不是很高的比特率?由此产生的假象只会使GIF编码器变得更糟。如果确实需要将视频用作临时视频,则可以使用无损的视频,例如huffyuv。或没有转码的MJPEG,只需将输入的jpeg重新混合为MJPEG。 (-codec:视频副本)。

– Peter Cordes
16 Dec 7'在15:25

-loop_output参数不存在。

– herrbischoff
20年7月3日在8:55

#2 楼

convert是一种方便的命令行工具。
cd到包含png文件的文件夹并运行以下命令:

convert -delay 10 -loop 0 *.png animation.gif


来源:http: //ubuntuforums.org/showthread.php?t=1132058

评论


问题提到了转换以及使用它的一些问题。您的答案没有解决任何一个。

–垫子
2011年11月6日,0:36

从ImageMagick版本6.8.7-4 2013-11-02 Q16开始,这对我有用。

–鲁迪·马特拉(Rudy Matela)
13年11月6日在17:11



这可以工作,但是10表示10 * 10ms,因此非常快。延迟100为1秒。

–Anne van Rossum
2015年9月27日在8:01

如果使用透明PNG,请使用-dispose previous或-dispose 2选项

–HảiPhong
16年8月31日在1:00

给我自己说明:大括号扩展有助于将图像列表指定为参数,例如pic_ {0..20..2} .png扩展到pic_0.png,pic_2.png一直扩展到pic_20.png

–杨艺博
17年9月6日在2:51

#3 楼

convert--delay选项仅适用于命令行中的下一个图像。因此,convert -delay 10 *只会将第一帧的延迟设置为0.1秒。需要重复此选项:

convert $(for a in *; do printf -- "-delay 10 %s " $a; done; ) result.gif


对于您的排序需求,convert不对框架进行排序,而外壳globe *则对。如果您知道帧的编号是从0到700,则您可以自己计算数字:

convert $(for ((a=0; a<700; a++)); do printf -- "-delay 10 name%s.png " $a; done;) result.gif


评论


我没有通过convert遇到这种行为,对我来说,convert -delay 1000 -loop 0 * .png animation.gif确实在每个图像之间增加了10s的延迟。

–罗德岛
2014年11月8日18:52

您也可以使用ls命令的版本排序。也就是说:convert -delay 1000 $(ls -v name * png)output.gif

–erik
2015年4月5日20:37



#4 楼

ffmeg重要的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
ffmpeg \
  -framerate 60 \
  -pattern_type glob \
  -i 'tmp.*.png' \
  -r 15 \
  -vf scale=512:-1 \
  out.gif \
;




测试数据是生成于:https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292

重要的ffmpeg选项我想强调的是:


-patter_type glob:选择图像的便捷方法
-framerate 60-r 15:假设输入图像上的帧率为60 FPS(ffmpeg不能否则会知道,因为图像中没有FPS数据(如视频格式),所以请每4张图像选择一个,从而减小尺寸(4 == 60 / 15

-vf scale=512:-1:按比例设置宽度,比例高度,通常是为了减小尺寸并节省空间

另请参阅:


来自图像的视频:https://stackoverflow.com/questions/24961127/how-to-create-a-video-from -images-with-ffmpeg / 37478183#37478183

视频中的GIF:https://askubuntu.com/questions/648603/how-to-create-an-animated-gif-from-mp4- v ideo-via-command-line


在Ubuntu 18.10,ffmpeg 4.0.2中进行了测试。

评论


非常感谢,这对我非常有用。

– herrbischoff
20年7月3日在8:54

#5 楼

更新:

convert用作png-to-gif,然后将gifsicle用作动画。
这不是一个应用程序即可完成所有任务的解决方案,但是可以确定地编写脚本。
/>

GIMP可以创建动画gif并提供对定时/延迟和重复等的控制

评论


我知道gimp,但不知道如何编写脚本。此外,使用gimp制作动画就像用大炮杀死苍蝇一样

– Yotam
2011年11月7日7:58

那是个坏主意;由于每个帧将被单独量化,因此质量将很糟糕。

–Clément
16年7月5日在13:27

#6 楼

ImageMagick可以生成高质量的gif动画。观看此视频-http://www.youtube.com/watch?v=OFusYizJ-bA

评论


欢迎使用Unix和Linux!通常,我们希望网站上的答案能够独立存在-链接很棒,但是,如果该链接中断,则答案应该具有足够的信息,仍然会有所帮助。请考虑编辑您的答案以包括更多详细信息。有关更多信息,请参见FAQ。

–slm♦
13年4月18日在20:20

上面的评论真有用。

–卢克
18年7月10日在6:42

转换-delay 200 -loop 0 * .jpg output.gif

–卢克
18年7月10日在6:42

@Luke-在此问题下发布的所有混乱中,您的评论最有用

–cipricus
19-10-26在22:07

#7 楼

关于第2点,我拥有的ImageMagick“显示”版本(ImageMagick 6.7.2-7 2017-01-12)忽略了使用convert命令设置的帧频来生成动画gif。尝试使用另一个程序查看诸如Firefox的动画gif。