image - Imagemagick:如何减小具有大静态区域的动画 GIF 的大小?
问题描述
我从屏幕截图创建了一个动画output.gif
,最终是 89MB 未压缩。一半的 GIF 是静态的,但最好将它们放在一起,而不是图像 + 包含移动部分的 GIF。
使用 Imagemagick 和以下命令,我设法将其大小减小到 18.1MB:
convert output.gif -coalesce -fuzz 3% +dither -layers Optimize compressed.gif
增加百分比会产生更小的尺寸结果,但质量会受到影响。
鉴于此 GIF 包含较大的静态非动画区域,您是否建议使用一个选项来减少文件大小而不影响质量?
更新我为此使用 Ubuntu,这是我的完整工作流程:
- 使用Kazam精确截取我需要的内容,因此无需进行任何类型的编辑。
- 使用命令
ffmpeg -i input.avi output.mp4
转换为mp4。 - 为框架制作目录
mkdir frames
。 - 生成中间图像
ffmpeg -i output.mp4 -r 25 'frames/frame-%04d.png'
。 - 转到帧
cd frames
。 - 从图像生成 GIF
convert -delay 4 -loop 0 *.png output.gif
。 - 优化和压缩 GIF 以减小文件大小
convert output.gif -coalesce -fuzz 3% +dither -layers Optimize compressed.gif
解决方案
减小 GIF 大小的最佳方法是将尽可能多的帧置于“组合”模式。这些帧仅包含与前一帧相比发生变化的内容,并且可能非常小,但这可能需要使用完全相同的颜色图对所有帧进行编码,并且相同的部分是真正相同的(没有模糊性,没有随机编码伪影) . Gimp 可以做到这一点,但其他专门从事 GIF 处理的实用程序也可以做到这一点(也许是 Gifsicle)?
此外,屏幕截图的动画 GIF 不需要为 25fps,10fps 就足够了。
推荐阅读
- php - 为数据透视表生成控件
- javascript - 将动态 HTML 页面转换为 React/JSX
- python - 如何为不同的区域添加颜色
- python - Python 的 id() 方法提供的内存地址是绝对的还是相对于某个会话的?
- apache-kafka - 生产者和消费者仅在 1 个端口上工作
- javascript - 使用 localStorage 的待办事项列表
- javascript - 如果 React Native 中没有互联网连接,则获取存储数据
- ios - 我需要什么类型的工具来构建一个简单的 react-native 多人纸牌游戏?
- akka.net - Akka.NET 使用什么协议与集群中的节点通信?
- javascript - 更新时如何保存textarea