
macshot有界内存GIF编码实现峰值内存从772MB降到20MB【免费下载链接】macshotFeature-packed native macOS screenshot recording tool: annotate, auto-redact PII, record GIFs, OCR translate, scroll capture, beautify, and more. No Electron, no subscription.项目地址: https://gitcode.com/gh_mirrors/mac/macshotmacshot 是一款功能丰富的原生 macOS 截图与录屏工具19 种标注工具、自动打码 PII、GIF 录屏、OCR 翻译、滚动截图、美化导出全部用 Swift/AppKit 原生实现——没有 Electron也没有订阅制。近期它做了一次关键的底层升级有界内存 GIF 编码。长录像导出 GIF 时峰值内存从772 MB 直接降到 20 MB而且无论录像多长内存占用都保持一条平线。长 GIF 为什么会吃光内存传统做法是把整段动画先攒在内存里要么逐帧解码后全部保留要么把每一帧写成临时 PNG 再统一编码最后一次性收尾。带来的后果很直接内存随帧数线性增长——录 10 秒和录 10 分钟是两个量级依赖外部 gifski 可执行文件且要求所有 PNG 路径塞进一个命令行参数向量录像越长参数越长收尾finalize阶段可能读到已释放的像素缓冲长录像直接崩溃。有界内存编码逐帧流式写入新实现的思路只有一句话任何时刻内存里最多只有两帧的状态。核心由两个模块协作完成见 GIFExporter.swift 与 GIFEncoder.swift流式读取AVAssetReader按视频合成的显式节奏逐帧吐出样本读出哪帧就处理哪帧从不缓存整条时间线流式写入编码器每次只让 ImageIO 看到一张图量化后的调色板 LZW 图像块立即追加写入磁盘上的 GIF89a 容器状态有界编码器内部只保留上一帧像素和待写入的编码块处理完即释放内存峰值与录像时长完全无关。整个导出的剪切、变速、冻结等编辑效果照常生效进度条实时刷新随时可取消。去重 变化矩形检测再砍掉一半冗余除了流式还有两个让编码又小又快的巧思静帧去重如果一帧和上一帧像素完全相同静止画面非常常见就不重新编码只延长当前帧的停留时长。3000 帧完全静态的输入最终 GIF 只含 1 帧编码耗时 0.14 秒。变化矩形检测桌面录像通常只有光标或几行文字在动。编码器用逐行/逐像素的字节比对找出最小变化矩形只编码这个区域其余部分靠 GIF 的消隐方式 1保留上一帧内容。每帧使用独立局部调色板而不是共享全局调色板配合 100 Hz 的 GIF 时间戳保证节奏准确超长的静止时段会在格式 16 位延迟上限处自动拆分不丢帧、不重编码。实测数据772 MB 如何变成 20 MB官方基准脚本 benchmark-gif-encoding.swift 用合成像素对比了新旧两代编码器640×360、30 帧/秒测试场景旧实现新实现300 帧 · 光标运动1.33 s /772 MiB 峰值/ 59 KB0.78 s /20.6 MiB 峰值/ 60 KB300 帧 · 全屏渐变1.63 s / 772 MiB / 3.8 MB1.65 s / 54.5 MiB / 10.4 MB3000 帧 · 每帧全变—16.46 s /60.5 MiB 且全程持平/ 104 MB三个值得注意的点内存无斜率3000 帧全变测试中后半段驻留内存稳定在约 59.5 MiB没有出现帧数越多内存越高的增长趋势速度不降反升光标场景从 1.33 s 提速到 0.78 s诚实的取舍全屏剧烈变化时文件会更大局部调色板放弃了跨帧优化作者明确指出这不是普遍意义上的体积或速度提升。独立解码器验证确认新旧输出均含 300 帧、总时长精确 10 秒重建误差处于同一量级。值得一提的工程细节⚡原子发布通过 AtomicMediaSave.swift 先写入暂存文件成功后才原子替换到目标路径失败或取消时自动清理绝不留下半成品 GIF零外部依赖不再需要 Homebrew 安装 gifski不再需要临时 PNG 目录也不再需要与录像时长成正比的命令行参数✋随时可取消取消检查穿插在每一帧之间进度窗口支持点击取消或按 Esc。相关源码与文档想深入阅读可以从以下入口入手编码器核心GIFEncoder.swift、GIFExporter.swift基准测试脚本benchmark-gif-encoding.swift回归测试GIFEncoderTests.swift、GIFExporterTests.swift完整实测记录implementation-review.md版本演进CHANGELOG.md 一句话总结把攒够再算改成来一帧、算一帧、写一帧再加上去重与变化区域检测macshot 的 GIF 导出从此内存有界——录多久都不慌。【免费下载链接】macshotFeature-packed native macOS screenshot recording tool: annotate, auto-redact PII, record GIFs, OCR translate, scroll capture, beautify, and more. No Electron, no subscription.项目地址: https://gitcode.com/gh_mirrors/mac/macshot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考