新闻详情

新闻详情

首页 / 资讯中心 / 详情

macshot有界内存GIF编码实现:峰值内存从772MB降到20MB

发布时间:2026/9/28 18:56:25来源:尧图网络
macshot有界内存GIF编码实现:峰值内存从772MB降到20MB
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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

手电筒内部的充电回路 2026/9/28 20:46:03

手电筒内部的充电回路

手电筒充电电路01 【手电筒充电电路】 一、拆卸手电筒 这是一个要废弃掉的可充电手电筒。 准备将它抛弃。 那下面有一个问题,它里边究竟是如何来充电的? 使用什么样的充电池? 为什么它现在损坏了? 下面我们打开它来一探究竟。 不…

阅读更多 →
用浏览器扩展搞定API测试、文档与监控:从调试到全自动巡检 2026/9/28 20:45:55

用浏览器扩展搞定API测试、文档与监控:从调试到全自动巡检

1. 项目概述与需求拆解先说清楚这个东西是干嘛的。NBA-API 听起来像个专门的篮球数据接口,其实把它拆开看,核心是“API”——只要你天天跟接口打交道,不管接口里装的是 NBA 场次数据、天气数据还是电商订单,这套玩法都通用。我搭这…

阅读更多 →
大模型RAG生产级落地:混合检索与重排序实践 2026/9/28 20:45:55

大模型RAG生产级落地:混合检索与重排序实践

大模型RAG检索增强生成,说白了就是先让大模型“查资料”再回答,避免它不懂装懂。但我在真实项目里跑下来,最朴素的那套向量检索方案往往只能撑住Demo,一到生产环境就开始翻车:查不准、召回乱、回答前后矛盾。这篇文章就…

阅读更多 →
宁波农业APP开发公司如何筛选?项目方案需要回答哪些业务问题 2026/9/28 20:45:49

宁波农业APP开发公司如何筛选?项目方案需要回答哪些业务问题

摘要:筛选宁波农业APP开发公司,应看其能否把生产记录与采购、采收、销售对应起来,并说明田间使用条件。请候选方拿一块地、一个作物周期和一次异常天气演示任务与数据,而不是只比较“智慧农业”功能清单。对正在评估地块、农事记录…

阅读更多 →
OpenAI 又按下暂停键:Agent 自己找到一条 DNS 逃逸路径,多智能体委托链治理为何成了刚需 2026/9/28 20:45:49

OpenAI 又按下暂停键:Agent 自己找到一条 DNS 逃逸路径,多智能体委托链治理为何成了刚需

9 月 26 日,OpenAI 发言人向美联社、Axios 证实:公司已暂停其「能力最强」的最新一代 AI 模型的训练、评估,以及所有涉及工具调用的推理,要等到「确信额外的安全措施到位」才会恢复。 触发这次暂停的,是一个本该乖乖待…

阅读更多 →
Conda环境初始化与激活问题解决Run conda init before conda activate 2026/9/28 20:45:49

Conda环境初始化与激活问题解决Run conda init before conda activate

可以尝试重新进环境再退出然后重新激活:source activate再退出环境:conda deactivate重新激活:conda activate yourconda

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉