Skip to main content
生产者包将引擎 帧捕获与 FFmpeg 编码相结合,以提供完整的 HTML 到视频渲染管道。它支持 MP4 (h264) 和 WebM(具有 alpha 透明度的 VP9),并处理运行时注入、就绪门、音频混合和可选的基于 Docker 的确定性渲染。

何时使用

当您需要时使用 @hyperframes/producer
  • 以编程方式从 Node.js 将合成渲染为 MP4 或 WebM(例如,在后端服务或 CI 管道中)
  • 通过对管道的细粒度控制构建自定义渲染服务
  • 针对黄金基线运行视觉回归测试
  • 不同配置下的基准渲染性能
如果您愿意,请使用不同的包:
  • 从命令行渲染,无需编写代码 - 使用 CLI (npx hyperframes render)
  • 在浏览器中预览合成 — 使用 CLIstudio
  • 无需编码即可捕获帧 — 使用 engine
  • Lint 或解析 HTML 组合 — 使用 core
如果您正在构建只需要渲染视频的 Web 应用程序或脚本,那么 CLI 是最快的路径。生产者包适用于需要在 Node.js 内部进行编程控制的情况。

它的作用

制作人协调完整的渲染管道:
1

加载合成 HTML

读取您的 index.html 和任何引用的子组合。
2

注入 Hyperframes 运行时

添加管理时间线搜索、剪辑生命周期和媒体播放的运行时脚本。
3

等待就绪门

轮询 window.__playerReadywindow.__renderReady 以确保在捕获开始之前加载所有资源(字体、图像、视频)。
4

通过引擎捕获帧

使用 engine’s BeginFrame 管道将每个帧捕获为像素缓冲区。
5

通过 FFmpeg 编码为 MP4 或 WebM

使用选定的质量预设将帧缓冲区传输到 FFmpeg。 MP4使用h264; WebM 使用带有 alpha 透明度支持的 VP9。
6

混合音轨

从视频剪辑和音频元素中提取音频,应用 data-volumedata-media-start 偏移量,并将它们混合到最终的 MP4 中。

程序化使用

生产者使用两步 API:创建渲染作业配置,然后执行它。

渲染配置

具有透明度的 WebM

设置 format: 'webm' 使用 VP9 Alpha 以透明背景渲染:
format: 'webm' 时:
  • 帧被捕获为 PNG(保留 Alpha 通道)
  • Chrome的页面背景通过CDP设置为透明
  • FFmpeg 使用 VP9 + yuva420p 像素格式进行编码
  • 音频编码为 Opus(而不是 MP4 的 AAC)

HDR输出

设置 hdr: true 以启用 HDR 检测。制作者会探测每个视频和图像源的 BT.2020 / PQ / HLG 颜色标记 - 如果找到任何 HDR 源,则输出将使用带有 HDR10 静态元数据的 H.265 10 位 BT.2020。仅 SDR 组合不受影响。
hdr: true 时:
  • 通过 ffprobe 探测源;当两者都存在时,PQ 优先于 HLG
  • HDR 视频和图像被提取为 16 位线性光像素并本地合成
  • SDR DOM 叠加层在叠加到顶部之前从 sRGB → BT.2020 转换
  • 输出使用 libx265yuv420p10le 和 HDR10 母带/内容光级别元数据
  • format 必须是 'mp4''mov''webm' 回退到 SDR
  • HDR <img> 支持仅限静态图像;带有 HDR 标签的动画图像仅使用第一帧
有关源要求、后备规则和验证的完整详细信息,请参阅 HDR 渲染

进度回调

消除

HTTP服务器

生产者包括一个内置的 HTTP 服务器,用于作为渲染服务运行:

服务器端点

对于自定义服务器集成,请使用较低级别的处理程序:

Docker 渲染

对于确定性输出,制作者可以使用固定的 Chrome 版本和字体集在 Docker 容器内进行渲染。这保证了机器之间的相同输出——对于 CI 管道和生产服务至关重要。
Docker 模式需要安装并运行 Docker。运行 npx hyperframes doctor 来验证您的环境。有关 Docker 模式具有确定性的详细信息,请参阅确定性渲染

质量预设

GPU编码

生产者支持硬件加速编码以实现更快的渲染: 启用 GPU 编码后,Hyperframes 会自动检测可用的 FFmpeg 硬件编码器。要检查您的系统的功能:
CLI 自动启用本地 Chrome/WebGL GPU 捕获,并支持 --no-browser-gpu 作为选择退出。直接使用生产者 API 时,传递引擎配置覆盖:

额外出口

为了方便起见,生产者还重新导出关键引擎功能:

记录

生产者提供了一个小型可插拔记录器,因此调用者可以注入 Pino、Winston 或任何结构化后端,而无需依赖它。
createConsoleLogger(level) 返回一个控制台支持的实现,该实现按级别进行过滤并对可选的 meta 对象进行 JSON 字符串化。 defaultLoggerlevel="info" 处的单例。

跳过热路径中昂贵的元数据

isLevelEnabled可选,因此现有的自定义记录器保持不变。当您在热循环中构建一个重要的元对象只是为了附加到调试日志时,请使用 nullish-coalescing 模式来控制构造,以便生产运行 (level=info) 无需支付任何费用,而没有该方法的记录器的行为与以前完全相同:
?? true 回退意味着使用未实现 isLevelEnabled 的自定义记录器的调用者继续构建并传递元对象 - 优化是针对需要它的记录器实现的选择。

回归测试

生成器包含一个回归工具,用于将渲染输出与黄金基线进行比较。这对于在更改运行时、引擎或渲染管道时捕获视觉回归非常有用。

标杆管理

找到适合您的硬件的最佳渲染设置:
该基准测试运行多个具有不同质量和 FPS 设置的组合,并报告每个组合的时间。

外部资产(projectDir 之外的文件)

组合可以引用项目外部资源的绝对路径 目录 — ~/Downloads 中的本地画外音、共享驱动器映像、 在绝对路径上生成的夹具。生产者通过以下方式处理这些问题:
  1. 检测。 在编译期间,HTML 编译器会遍历每个 [src] / [href] 以及 <style> 中的每个 url(...)。一条路径 解析为 projectDir 之外的文件被收集到 externalAssets 地图。
  2. 经过消毒的密钥。 每个绝对路径都被转换为安全的、 以 hf-ext/ 为前缀的跨平台相对密钥。视窗 驱动器盘符冒号被剥离 (D:\foo\x.wavhf-ext/D/foo/x.wav) 以便 path.join(compileDir, key) 保留在编译中 每个操作系统上的目录。
  3. 复制 + 重写。 Orchestrator 将文件复制到 <compileDir>/hf-ext/... 并且 HTML 被重写以指向 已消毒的钥匙。然后,文件服务器同时服务于项目内部和 外部资产同根同源。
遏制检查使用 path.relative() 而不是硬编码 分隔符,因此外部资源在 macOS、Linux 和 视窗。请参阅 packages/producer/src/utils/paths.ts 了解帮助程序。

相关套餐

命令行界面

命令行界面,包装生产者以进行渲染、预览等。

引擎

生产者用来抓取帧的低级捕获管道。

生产者所依赖的类型、运行时和 linter。

工作室

用于在与制作人一起渲染之前构建合成的可视化编辑器。