ScreenToGif 时间轴:一个被低估的「时间外科医生」
你有没有过这样的经历?
录完一段IDE操作,想突出某次点击——结果删一帧,光标跳变;加速两倍,高亮一闪而过;手动调延迟,整段节奏全乱……最后导出的GIF像喝醉了一样晃。
这不是你的问题。是绝大多数GIF工具根本没把「时间」当第一公民来对待。
ScreenToGif 的时间轴模块,恰恰反其道而行之:它不假装自己是视频编辑器,也不妥协于GIF格式的古老枷锁,而是用一套轻量但严密的时间契约系统,在毫秒级尺度上做精准干预。它不是进度条,不是帧列表,而是一个能“切开时间、缝合节奏、钉住重点”的微型手术台。
它怎么做到“看得见时间”?
GIF本身没有时间轴概念——只有帧+延迟(单位是1/100秒)。ScreenToGif 却硬生生在内存里建了一套双轨制时间模型:
- 逻辑轨道(Frame Index):0, 1, 2, 3… 是帧的身份证号,永不改变;
- 物理轨道(Absolute Time):0ms, 100ms, 210ms, 390ms… 是每帧真正“落点”的时刻,由前序所有延迟累加而来。
这两条轨道之间,靠一个函数实时映射:
// 累计延迟 = 前N-1帧 delay × 10 (GIF规范单位转毫秒) public TimeSpan CumulativeDelay(int frameIndex) => TimeSpan.FromMilliseconds( Frames.Take(frameIndex).Sum(f => f.Delay * 10) );这意味着:你拖动第5帧到第2位,系统不会重写它的delay字段,而是悄悄把它从数组索引5挪到2——后续所有帧的累计时间自动重算。原始数