从 PNG 文件创建 GIF 动画

Yot*_*tam 109 graphics imagemagick conversion

是否有gif从一组png文件创建动画的工具?

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

  1. 我说不上来有什么进展。
  2. 无论我尝试什么,该-delay标志都不会改变 gif 动画的帧速率。
  3. convert根据文件名的字母顺序确定帧顺序。这意味着name500.pngname50.pngname450.png我可以通过添加 0 解决此问题之后而不是之后放置,但这很烦人。

Rob*_*inJ 107

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

convert -delay 10 -loop 0 *.png animation.gif
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您使用透明 PNG,请使用选项 `-dispose previous` 或 `-dispose 2` (11认同)
  • 问题提到了 `convert` 以及使用它的一些问题。您的回答没有针对其中任何一个。 (9认同)
  • 这是有效的,但 `10` 意味着 10 * 10ms,所以非常快。'100' 的延迟是 1 秒。 (9认同)
  • 自己注意:[支撑扩展](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html) 可以帮助指定图像列表作为参数,例如`pic_{ 0..20..2}.png` 扩展为 `pic_0.png`,`pic_2.png` 一直到 `pic_20.png` (7认同)
  • 从 ImageMagick 版本`6.8.7-4 2013-11-02 Q16`开始,这对我有用。 (4认同)

小智 60

较新版本的 ffmpeg 没有 -sameq(请参阅 faq),但有 GIF 支持。

ffmpeg -i %03d.png output.gif
Run Code Online (Sandbox Code Playgroud)

其中 %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
Run Code Online (Sandbox Code Playgroud)

  • 此说明已过时。 (12认同)
  • `sameq` 选项不再可用。此外,对我来说,这会覆盖原始图像文件并且不会生成有效的电影文件。 (3认同)

Bat*_*hyX 22

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

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

对于您的排序需要, convert 不会对帧进行排序,而 shell globing*会排序。如果你知道你的帧编号从 0 到 700,你可以自己计算这些数字:

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

  • 我没有使用 `convert` 遇到这种行为,对我来说 `convert -delay 1000 -loop 0 *.png animation.gif` 确实在 *每个 * 图像之间添加了 10 秒的延迟。 (6认同)

Cir*_*郝海东 11

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 \
;
Run Code Online (Sandbox Code Playgroud)

测试数据是通过以下方式生成的: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:按比例设置宽度、缩放高度,通常是为了缩小尺寸和节省空间

也可以看看:

在 Ubuntu 18.10、ffmpeg 4.0.2 中测试。


gre*_*aig 7

更新:

使用convert的PNG到GIF,然后使用gifsicle的动画。这不是一个应用程序来完成所有解决方案,但肯定是可编写脚本的。


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

  • 我知道 gimp,但我不知道如何编写脚本。此外,使用gimp制作动画就像用大炮杀死苍蝇 (4认同)