跳转到内容

转换流程概览

console2svg 并非单纯将终端输出文本放入图像容器中的基础截图工具。 它通过操作系统级伪终端(PTY)启动子进程,将原始输出字节流送入内存终端仿真器中维持准确的虚拟屏幕画面,并最终转换为高度优化的 SVG 矢量图、光栅图像、视频流和实时网络广播。

为了在保留极高画面还原度的同时实现极致的体积精简,console2svg 将整个转换逻辑拆分为明确的五个处理阶段:

[子进程启动 / 输入回放]
│ 原始 VT 字节流
▼
[阶段 1: 输入捕获与数据流控制]
│ 聚合事件流
▼
[阶段 2: 终端仿真与转义序列解析]
│ 虚拟屏幕缓冲区 (ScreenBuffer)
▼
[阶段 3: 机密信息检测与遮盖]
│ 遮蔽处理后的单元格网格
▼
[阶段 4: SVG 图层组织与结构优化]
│ 优化后的矢量标记
├─► [阶段 5A: 静态图 / 动画 SVG]
├─► [阶段 5B: 高速栅格化 / 视频编码]
└─► [阶段 5C: 实时网页流式广播]

整个转换处理流程分为以下五个核心阶段:

精准还原终端画面的基础在于捕获原始子进程输出时,避免字节损坏与时序抖动。

  • PTY 启动、控制与数据流捕获:屏蔽 Windows ConPTY 与 Unix PTY 的底层差异,保障多字节 UTF-8 边界完整性,并通过邻近事件聚合降低解析器负担。
  • 确定性输入回放:规范化记录按键的时间戳,并合成规范的 VT 转义序列,确定性地复现终端操作行为。

阶段 2: 终端仿真与转义序列解析

Section titled “阶段 2: 终端仿真与转义序列解析”

终端输出流并非纯文本,而是包含光标跳转、屏幕清除以及 SGR 样式修饰等 ANSI 控制序列。

在捕获用于文档或公开视频的终端会话时,必须防止敏感凭据泄漏到最终画面中。

将虚拟屏幕网格映射为标准 SVG 矢量时,需进行严谨的分层与结构合并以防体积膨胀。

  • SVG 分层结构与坐标系设计:在统一的字符网格坐标系下,将外边距、窗口外观饰边、投影、背景填充与前景文字清晰解耦为独立图层。
  • 转换管线中的多层优化策略:结合写时复制(CoW)快照、XxHash3 行签名校验以及水平相邻单元格矩形/路径合并算法,实现极端的文件体积压缩。

经过结构化与优化的屏幕状态,将根据具体的 CLI 命令分支分发至多种输出管线:

  • SMIL 动画 SVG 生成技术:将去重后的行数据存入 <defs> 字典,通过离散型 SMIL <animate> 属性切换与行级局部差异更新生成极轻量的动画 SVG。
  • 基于 resvg 的高速 PNG 栅格化:通过 C ABI 在进程内嵌入 Rust 编写的 resvg 引擎,跨执行周期缓存系统字体扫描结果,在数毫秒内完成单帧渲染。
  • ffmpeg 视频编码管线:依托单向推进的仿真引擎、两级内存状态缓存、多线程并行栅格化以及直通 ffmpeg 的 image2pipe 管道,稳定高效地输出确定性视频文件。
  • live-server 流式架构:内置轻量 HTTP/SSE 服务,通过三层分离推送、静默延迟防抖与客户端 rAF 批量合并机制,在浏览器中流畅投屏终端状态。

关于各处理环节的具体算法实现与技术决策细节,请参阅上述对应章节。