我想调整这样一个动画 GIF 文件do.gif 的大小 
如果我这样做,convert do.gif -resize 24x24\! do-24.gif我会在do-24.gif 中调整它的大小但没有动画
如何以正确的方式调整大小以获得相同的动画?
phi*_*bim 60
第一次运行:
convert do.gif -coalesce temporary.gif
Run Code Online (Sandbox Code Playgroud)
然后
convert -size <original size> temporary.gif -resize 24x24 smaller.gif
Run Code Online (Sandbox Code Playgroud)
Pet*_*háč 10
我一直在寻找我熟悉的 imagemagick 解决方案,但最后我接受了@sam 的gifsicle. 它做了我想要的,没有麻烦。
可以通过多种方式优化生成的文件大小,但我只是减小了大小并减少了颜色数量。像魅力一样工作:
gifsicle --resize 48x48 --colors 16 original.gif > smaller.gif
Run Code Online (Sandbox Code Playgroud)
-coalesce + -deconstruct
之后-coalesce,您可能想要添加一个-deconstruct:
convert in.gif -coalesce -resize 256x -deconstruct out-deconstruct.gif
Run Code Online (Sandbox Code Playgroud)
问题的根本原因是您的输入 GIF 被适当地最小化:GIF 允许下一帧只是从前一帧偏移的修改后的矩形。
-coalesce然后将所有帧扩展到原始大小,这使得调整大小工作,但它不会再次将帧重新压缩为您的输入图像:这-deconstruct是需要的!
使用此答案中的测试数据:如何从静止图像(最好使用命令行)创建动画 gif?我们可以清楚地看到这一点identify:
$ identify out-convert.gif | head -n 3
out-convert.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.020u 0:00.019
out-convert.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.030u 0:00.019
out-convert.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.030u 0:00.019
$ convert out-convert.gif -resize 256x out.gif
$ identify out.gif | head -n 3
out.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
out.gif[1] GIF 256x256 256x256+125+128 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
out.gif[2] GIF 256x258 256x256+123+128 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
$ convert out-convert.gif -coalesce -resize 256x out-coalesce.gif
$ identify out-coalesce.gif | head -n 3
out-coalesce.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
out-coalesce.gif[1] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
out-coalesce.gif[2] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
$ convert out-convert.gif -coalesce -resize 256x -deconstruct out-deconstruct.gif
$ identify out-deconstruct.gif | head -n 3
out-deconstruct.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out-deconstruct.gif[1] GIF 135x135 256x256+60+61 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out-deconstruct.gif[2] GIF 135x136 256x256+59+61 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
Run Code Online (Sandbox Code Playgroud)
输出.gif
out-coalesce.gif
解构.gif
首先,我们看到如何输入文件,out-convert.gif,实际上是压缩的,因为第 2 帧仅516x516在 offset 处252+257,而完整大小的第 1 帧是1024x1024。
然后,如果我们比较这三种转换:
out.gif:所有帧都是256x256或更大,大约 5MiB,TODO 为什么?
视觉上不正确,因为那些近似256x256帧具有非零偏移,例如125+128对于第 2 帧!
out-coalesce.gif:所有帧256x256都有正确的偏移量0+0。
输出在视觉上看起来正确,但输出文件大小为 2.0 MiB,大于 out-deconstruct.gif
out-deconstruct.gif:压缩帧,最终输出大小 1.9 MiB。
不比 小很多out-coalesce.gif,但我认为这只是因为黑色地面压缩得非常好,而且总体上可能非常重要。
ffmpeg 和 gifsicle
我还尝试了以下命令:
ffmpeg -i out-convert.gif -vf scale=256:-1 out-ffmpeg-small.gif
gifsicle --resize 256x256 out-convert.gif > out-gifsicle.gif
Run Code Online (Sandbox Code Playgroud)
并且两者都产生了更小正确的 1.5 MiB 输出。
另请参阅:如何从静止图像创建动画 gif(最好使用命令行)?
TODO:为什么他们可以使它小于convert?他们只是选择更好的最小差异矩形,还是其他什么?
在 Ubuntu 18.10、ffpmeg 4.0.2-2、ImageMagick 6.9.10-8 中测试。
| 归档时间: |
|
| 查看次数: |
47493 次 |
| 最近记录: |