我有一个动画 gif,我想截取最后 5 秒。有人知道如何在 Linux/Ubuntu 中做到这一点吗?
答案1
有多种方法可以做到这一点。
选项1:使用名为吉夫西勒。它在默认的 Ubuntu/Debian 存储库中可用。
它速度快,不会影响质量,但它只接受帧数,而不是时间,所以如果你需要剪切精确的时间,你应该自己找出帧数。你可以用这个命令查看总帧数和每帧之间的延迟时间:
gifsicle --info YOURFILE.gif
然后,您可以用帧延迟除以您想要剪切的时间,它会给出这段时间内的帧数,这样您就可以找出开始帧和结束帧。
将 XXXX 替换为您希望 GIF 开始的帧,将 YYYY 替换为您希望 GIF 结束的帧。
gifsicle YOURFILE.gif '#XXXX-YYYYY' -O3 > cut.gif
选项 2:使用 FFMPEG。它也可以在 apt 中使用。
FFMPEG 直接接受时间,因此非常简单,但在某些情况下它可能会降低输出 gif 的质量并增加文件大小。
ffmpeg -i YOURFILE.gif -ss 00:00:04 -t 00:00:08 -async 1 cut.gif
选项 3:如果你可以使用在线工具,并且你的 GIF 不超过 20MB,这个在线工具可以按帧号或者按时间剪切 GIF,并且不会影响质量。
答案2
这里还有一个例子。使用图像魔术师, 命令:
magick Long.gif[0-100] Short.gif
取出前 100 帧Long.gif
并保存为Short.gif
您可以看到开始使用多少帧:
magick identify Long.gif
输出的最后一行将在方括号中显示帧数,例如:
Long.gif[829] GIF 64x64 64x64+0+0 8-bit sRGB 256c 1.86076MiB 0.031u 0:00.034
这表明Long.gif
有830帧。
请注意,ImageMagick 的许多旧文档都引用了identify
(now magick identify
) 和convert
(now magick
) 命令,这些命令可能正是您所需要的,具体取决于您的版本有多新。