Skip to main content
背景去除(在视觉特效中也称为“抠图”)将前景主体(通常是人)与其背景分开。输出是带有 Alpha 通道的视频:背景所在的位置完全透明,主体所在的位置不透明。将其作为 <video> 标签放入任何 HyperFrames 合成中,主题就会漂浮在您放在其后面的任何内容上。 CLI 附带一个在本地运行的内置 remove-background 命令 - 没有 API 密钥,没有云上传,没有绿屏。

快速入门

1

验证 ffmpeg 是否已安装

管道需要 ffmpegffprobe 进行解码+编码。大多数系统已经具备它们;如果不:
Terminal
使用 npx hyperframes doctor 确认 — 两者都应该是绿色的。
2

从视频中删除背景

Terminal
第一次运行时,CLI 将约 168 MB 的模型权重下载到 ~/.cache/hyperframes/background-removal/models/。后续运行将重用缓存。输出:
3

将其放入合成中

输出是标准的 VP9-with-alpha WebM。 Chrome 的 <video> 元素本地解码 alpha 平面 - 不需要特殊的播放器:
composition.html
使用通常的 hyperframes render 渲染合成。

它是如何运作的

该管道运行四个阶段,全部在本地:
该模型是 u²-net_ human_seg (MIT 许可证,~168 MB ONNX)。它通过 onnxruntime-node 与您计算机上最可用的执行提供程序一起运行:Apple Silicon 上的 CoreML、NVIDIA 上的 CUDA、CPU。 输出使用 Chrome 的 <video> 元素需要解码 alpha 的确切 ffmpeg 标记进行编码 — -pix_fmt yuva420p 加上 alpha_mode=1 元数据标记。如果这些错误的话,alpha 平面就会被浏览器默默地丢弃。

输出格式

Terminal

分层分离:将切口和背景板一起发射

传递 --background-output (别名 -b)以在剪切旁边写入第二个透明视频。相同的 RGB 源,alpha 是蒙版 - 周围环境不透明,主体所在透明。结果是在一次推理过程中实现干净的两层分离:
Terminal
两个编码器共享源 W/H/fps 和您的 --quality 预设,因此各层是像素对齐的。编码成本大约翻倍;分割成本不变。
这是一个打孔的板,而不是修复的干净板。 plate.webm 中的主题区域是完全透明的 - 您必须在其下方合成一些不透明的东西(图形、模糊的副本、不同的场景)来填充孔。如果您需要主题所在的实际填充背景,请使用视频 inpainter(LaMa、ProPainter、RunwayML Inpaint) - remove-background 不是合适的工具。

孔切板与干净板——差异何时重要?

打孔板保留了原始环境并使拍摄对象区域透明。 干净的板用重建的背景填充主题区域 - 由单独的修复模型生成。将每个单独显示为黑色: 这条线是:是否有任何东西需要通过主体的轮廓(主体曾经所在的位置)可见? 如果不透明的东西总是覆盖轮廓,打孔就足够了,而且比运行修补程序便宜约 1000 倍。

两层组合模式

两层模式在功能上是 text-behind-subject 的替代品,不需要项目中的原始 presenter.mp4 — 板将其替换为底层:
约束:该标志需要视频输入和 .webm.mov 用于两个输出。它对于图像输入无效(无需进行时间配对),并且不接受 .png 板。

表现

来自 matting eval 的真实世界数字,在 4 秒 1080p 剪辑上运行 u²-net_ human_seg: 抠图是离线预处理——每个资产运行一次并重复使用输出。仅使用 CPU 速度较慢,但​​始终有效;如果您重复使用同一主题剪辑,请在更快的计算机上运行一次,然后将透明输出签入您的项目中。

明确选择设备

--device auto 是默认值,几乎适合每个人。该标志存在两种情况:
  • 当您想让 GPU 自由用于其他工作或正在调试特定于 EP 的问题时,强制将 CPU 置于 GPU 盒上
    Terminal
  • **通过设置 HYPERFRAMES_CUDA=1 并提供支持 GPU 的 onnxruntime-node 构建来选择加入 CUDA(捆绑构建仅是 CPU + CoreML,以便为 99% 没有 GPU 的用户保持较小的安装量):
    Terminal
运行 npx hyperframes remove-background --info 查看您的计算机上检测到的提供程序以及 auto 会选择哪一个。

在合成中使用透明视频

透明 WebM 的行为与任何其他视频元素一样。您最常使用的两种模式: 主题位于背景图像上:
HyperFrames场景的主题:
剪切图继承了合成的帧速率和时间线 - 它在场景持续时间内播放一次,因此请尽可能将源剪辑长度与场景长度相匹配。如果场景比剪辑长,则 loop 会处理它。
当渲染包含 <video> 元素的合成时,渲染器通过 ffmpeg 在内部读取源。透明 WebM 被解码并保留 alpha 平面。

合成模式和陷阱

剪切 webm 是源 mp4 RGB 的 重新编码副本 - 物质管道将源解码为原始 RGB,运行分段,并使用 alpha 重新编码为 VP9。这个选择所产生的后果取决于你做出的选择。

三种模式

Text-behind-subject:推荐的布局

将标题放在演示者“后面”,以便他们的轮廓遮挡文本:

两条不明显的规则

1.将剪切视频包装在非定时 <div> 中并对包装而不是视频进行动画处理。 该框架在任何具有 data-start/data-duration 的元素处于“活动”状态时强制使用 opacity: 1 — 这就是它控制剪辑可见性的方式。视频元素上的 CSS opacity: 0 会被框架的剪辑生命周期悄悄覆盖,因此视频元素上的不透明度补间不会执行任何操作。将视频包装在没有 data-* 属性的 <div> 中;包装器完全归您的 CSS/GSAP 所有。 2.两个视频均从 data-start="0" 开始,并从 t=0 开始同步解码。 “后期安装”切口(data-start="3.3" 以匹配切口)很诱人。不要这样做 — Chrome 在安装时会进行搜索 + 解码器预热,这可能会在剪辑时刻从基础 mp4 上降落一帧。两个视频都是从 t=0 开始安装的,并且剪切图的包装器是不透明动画的,两个解码器都以相同的方式前进并保持帧精确度。

质量预设和颜色匹配

当剪切图叠加在其自己的源 mp4 上时,编码器的 CRF 直接影响边缘处加倍的可见程度: 编码器还写入 BT.709 + 有限范围的颜色元数据,因此 Chrome 的 YUV→RGB 管道与源 mp4 相匹配。如果没有这些标签,即使在无损质量下,剪切图的渲染也会与底层 mp4 略有不同(可见红色/皮肤变化)。

u²-net_ human_seg 的用途和用途不是什么

该模型专为肖像/人体抠图而构建。它在以下情况下表现出色:
  • ✅ 拍摄对象是一个人,头肩或全身
  • ✅ 取景相当稳定(不是广角手持拍摄)
  • ✅ 背景与主体形成对比
它在以下方面陷入困境或失败:
  • ❌ 非人类主体(产品、动物、物体)。该模型将返回一个大部分为空的掩模。
  • ❌ 在繁忙的背景上有非常精细的头发细节。 320×320 推理分辨率意味着发尖会变得柔和——对于大多数用例来说都很好,但合成人员注意到了。
  • ❌ 帧到帧的时间一致性。每帧都是独立处理的,因此带有移动主体的静态背景可以显示出微妙的边缘闪烁。对于大多数网络播放来说,这是不可见的;对于高端视觉特效来说,这可能很重要。
  • ❌ 直播或实时捕捉。该管道仅限批处理。
如果您的用例符合其中之一,请参阅下面的替代方案。

替代方案 - 当内置命令不是正确的工具时

CLI 特意提供了一种模型** - 该模型已获得 MIT 许可,可以在任何地方运行,并为人物/肖像视频生成生产质量的输出。下面的列表列出了与 HyperFrames 自然搭配的免费开源工具。每个条目都指出了实际的问题——许可证、安装工作、硬件需求——因此您可以根据自己的情况选择合适的条目。完整的基准测试位于 matting eval 中。

免费、开源 CLI 和库

这些都在本地运行,没有帐户,没有上传,没有水印。 在外部运行其中任何一个之后,使用以下命令将输出编码为与 HyperFrames 兼容的透明 WebM:
Terminal

免费桌面/GUI 工具

Web SaaS 工具(免费套餐,带字符串)

如何选择

  • 人物/肖像视频、网络播放、MIT-clean → 使用内置的 hyperframes remove-background (这就是它的调整目的)。
  • 非人类主体(产品、动物、物体)→ rembgisnet-general-use
  • 最高肖像质量,尤其是头发 → 通过 Python BiRefNet
  • 长视频,边缘闪烁可见,GPL 可以 → RVM
  • 一次性营销剪辑,无需安装 → DaVinci Resolve(免费)用于视频,Backgroundremover.app 用于静态图像。
  • 现成模型无法处理的特殊情况 → ComfyUI 具有自定义图表。

故障排除

模型下载失败或挂起

权重位于 GitHub 版本上(rembg 的 v0.0.0 版本,约 168 MB)。如果您的网络阻止 GitHub 或下载中断:
Terminal
随后的 remove-background 运行将跳过下载并使用本地副本。

“需要 ffmpeg 和 ffprobe”

管道向 ffmpeg 进行解码 + 编码。在 macOS 上通过 brew install ffmpeg 安装,在 Debian/Ubuntu 上通过 sudo apt install ffmpeg 安装。使用 npx hyperframes doctor 进行验证。

输出的 WebM 在浏览器中看起来完全不透明

当 WebM 使用 alpha_mode=1 元数据标记编码为 yuva420p 时,Chrome 仅读取 alpha 平面。 CLI 设置两者。如果您自己重新编码输出(例如使用另一个 ffmpeg 调用),请保留这些标志:
Terminal
要验证 WebM 是否具有 Alpha,请提取第一帧并检查:
Terminal
解码后的 frame0.png 应该是 RGBA 并且具有重要的 alpha 值。

CoreML“可用”,但推理无法启动

如果 CoreML 绑定失败,管道会自动回退到 CPU,并发出警告。如果您想完全跳过 CoreML 尝试,请强制使用 CPU:
Terminal

Alpha 蒙版具有粗糙或锯齿状边缘

这通常意味着源帧与相似色调的背景形成高对比度,并且模型的 320×320 推理分辨率得以显示。两条前进道路:
  1. 重新构图或重新拍摄,为拍摄对象提供更具对比的背景。
  2. 通过 rembg 尝试 birefnet-portrait (请参阅其他开源模型)——它在头发边缘的质量更高,但速度更慢、更重。

参考