HeadlessExperimental.beginFrame API 捕获像素缓冲区。该层使HyperFrames渲染具有确定性。
何时使用
当您需要时使用@hyperframes/engine:
- 构建自定义渲染管道,完全控制帧捕获
- 将HyperFrames捕获集成到现有视频处理系统中
- 捕获单个帧(例如缩略图或精灵表),无需编码为视频
- 实现自定义编码后端(不是 FFmpeg)
它是如何运作的
该引擎实现了一个与屏幕录制根本不同的 寻找和捕获 循环:1
启动无头 Chrome
该引擎启动
chrome-headless-shell,这是一个最小的无头 Chrome 二进制文件,针对通过 Chrome DevTools 协议 (CDP) 进行编程控制进行了优化。2
加载构图
您的 HTML 组合将加载到浏览器页面中。注入 Hyperframes 运行时来管理时间线搜索。
3
寻找每一帧
对于视频中的每一帧(例如,30fps 的 30 秒视频为 900 帧),引擎调用
renderSeek(time) 将合成推进到准确的时间戳。不涉及挂钟——每个框架都是独立定位的。4
通过 BeginFrame 捕获
Chrome 的
HeadlessExperimental.beginFrame API 将合成器输出捕获为像素缓冲区。这会产生像素完美的帧,没有任何屏幕录制伪影。5
移交帧
捕获的帧缓冲区被传递给消费者 - 通常是 FFmpeg(通过生产者)用于编码为 MP4,但您可以提供自己的消费者。
配置
质量预设
FPS 选项
程序化使用
该引擎使用基于会话的 API 进行帧捕获:浏览器管理
编码
该引擎包括 FFmpeg 编码实用程序,支持 MP4 (h264) 和 WebM(带 alpha 的 VP9):WebM 与 VP9 Alpha
为透明度进行编码时,请将format: "webm" 与 getEncoderPreset() 结合使用。这配置:
- VP9 编解码器 (
libvpx-vp9) 具有支持 alpha 的yuva420p像素格式 -auto-alt-ref 0和alpha_mode=1元数据用于正确的 alpha 编码-row-mt 1用于多线程 VP9 编码- 复用步骤中的 Opus 音频(而不是 MP4 的 AAC)
流媒体编码器
对于无需将帧写入磁盘的内存高效编码:视频帧提取
从源视频文件中提取帧以注入浏览器:音频处理
并行渲染
文件服务器
通过 HTTP 提供合成文件以供浏览器加载:HDR API
该引擎导出两层 HDR 支持:颜色空间实用程序,用于对源进行分类并配置 FFmpeg 编码器,以及 WebGPU 读回运行时,用于将 CSS 动画 DOM 直接捕获到 HDR 中。 对于端到端 HDR 渲染(合成为 HDR10 MP4 的 HDR 视频和图像源),请使用 生产者 或具有 HDR 自动检测功能的 CLI 渲染管道 /--hdr / --sdr — 请参阅 HDR 渲染。以下 API 用于自定义集成。
色彩空间实用程序
getHdrEncoderColorParams 始终包含颜色标记和 HDR10 静态元数据(控制显示 + 内容亮度级别)。如果没有该元数据,下游播放器会将该文件视为 SDR BT.2020,并且会错误地进行色调映射。如果您测量了每个内容的值,则传递自定义 HdrMasteringMetadata ;否则,保守的 DEFAULT_HDR10_MASTERING 默认值与大多数 HDR10 分级套件标记内容的方式相匹配。
WebGPU HDR DOM 捕获
为了将 CSS 动画 DOM 直接捕获到 HDR(不涉及 FFmpeg 源),引擎公开了一个单独的 WebGPU 管道:window.__hf 协议
引擎通过 window.__hf 协议与浏览器页面通信。任何实现此协议的页面都可以被引擎捕获 - 您不仅限于超框架组合。
关键概念
开始帧渲染
传统的屏幕捕获以挂钟速度记录 - 如果您的系统负载过重,就会丢帧。该引擎使用 Chrome 的HeadlessExperimental.beginFrame 显式推进合成器,按需生成每一帧。这意味着:
- 无丢帧 — 捕获每一帧
- 无时间依赖性 — 60 秒的视频不需要 60 秒来捕获
- 像素完美输出 — 合成器生成要显示的精确像素
寻求合同
该引擎依赖于 Hyperframes 运行时的renderSeek(time) 函数。调用时,renderSeek:
- 暂停所有 GSAP 时间表
- 寻找每个时间线的确切时间戳
- 更新所有媒体元素(视频、音频)以匹配
- 根据
data-start和data-duration安装/卸载剪辑
Chrome 要求
该引擎需要chrome-headless-shell,它在您安装软件包时包含在内。它使用固定的 Chrome 版本来确保跨环境的一致渲染。要获得完全确定性的输出(包括字体),请通过 生产者 使用 Docker 模式。
相关套餐
制片人
通过运行时注入、FFmpeg 编码和音频混合来包装引擎,以实现完整的 MP4 输出。
核
提供引擎所依赖的类型、运行时和 linter。
命令行界面
最简单的渲染方法——在后台调用生产者(和引擎)。
工作室
用于在使用引擎渲染合成之前构建合成的可视化编辑器。