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

快速入门

1

验证 ffmpeg 是否已安装

管道需要 ffmpegffprobe 进行解码+编码。大多数系统已经具备它们;如果不:
Terminal
# macOS
brew install ffmpeg

# Ubuntu / Debian
sudo apt install ffmpeg
使用 npx hyperframes doctor 确认 — 两者都应该是绿色的。
2

从视频中删除背景

Terminal
npx hyperframes remove-background subject.mp4 -o transparent.webm
第一次运行时,CLI 将约 168 MB 的模型权重下载到 ~/.cache/hyperframes/background-removal/models/。后续运行将重用缓存。输出:
◇  Removed background from 240 frames in 38.4s (6.3 fps, CoreML) → ./transparent.webm
3

将其放入合成中

输出是标准的 VP9-with-alpha WebM。 Chrome 的 <video> 元素本地解码 alpha 平面 - 不需要特殊的播放器:
composition.html
<div class="scene">
  <!-- background layer -->
  <img src="city.jpg" class="bg" />

  <!-- transparent subject floats on top -->
  <video src="transparent.webm" autoplay muted loop playsinline></video>
</div>
使用通常的 hyperframes render 渲染合成。

它是如何运作的

该管道运行四个阶段,全部在本地:
ffmpeg decode  →  u²-net_human_seg inference  →  alpha composite  →  ffmpeg encode
   (raw RGB)         (320×320 mask, then upsampled)                    (VP9-alpha)
该模型是 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 平面就会被浏览器默默地丢弃。

输出格式

扩大编解码器何时使用尺寸(4s @ 1080p)
.webm(默认)VP9 与阿尔法放入 <video> 进行 HTML5 原生透明播放〜1MB
.mov带 Alpha 的 ProRes 4444在 Premiere / Resolve / Final Cut 中进行往返编辑〜50MB
.png带阿尔法的PNG单图剪切(仅当输入也是单图时)各不相同
Terminal
npx hyperframes remove-background subject.mp4 -o transparent.webm        # web playback
npx hyperframes remove-background subject.mp4 -o transparent.mov         # editing
npx hyperframes remove-background portrait.jpg -o cutout.png       # still image

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

传递 --background-output (别名 -b)以在剪切旁边写入第二个透明视频。相同的 RGB 源,alpha 是蒙版 - 周围环境不透明,主体所在透明。结果是在一次推理过程中实现干净的两层分离:
Terminal
npx hyperframes remove-background subject.mp4 \
  -o subject.webm \
  --background-output plate.webm
输出阿尔法使用它作为
subject.webm遮罩 — 主体不透明前景层(堆栈顶部)
plate.webm255 − mask — 主题区域透明背景层;在此和 subject.webm 之间放置任何你想要的东西在拍摄对象的轮廓下方**
两个编码器共享源 W/H/fps 和您的 --quality 预设,因此各层是像素对齐的。编码成本大约翻倍;分割成本不变。
这是一个打孔的板,而不是修复的干净板。 plate.webm 中的主题区域是完全透明的 - 您必须在其下方合成一些不透明的东西(图形、模糊的副本、不同的场景)来填充孔。如果您需要主题所在的实际填充背景,请使用视频 inpainter(LaMa、ProPainter、RunwayML Inpaint) - remove-background 不是合适的工具。

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

打孔板保留了原始环境并使拍摄对象区域透明。 干净的板用重建的背景填充主题区域 - 由单独的修复模型生成。将每个单独显示为黑色:
孔板切割(此命令)洁净板(修补)
主题区域透明剪影重建背景像素
你独自看到的一个人形的洞一个空房间
成本一次推理过程,一次额外的 ffmpeg 编码第二个模型(LaMa、ProPainter、E2FGVI)
工具remove-background --background-output在此 CLI 之外
这条线是:是否有任何东西需要通过主体的轮廓(主体曾经所在的位置)可见?
使用案例你需要什么
文本/图形位于切口和板之间*(上面的示例)打孔 — 图形填充孔。
将主题合成到不相关的场景上两者都不。只需使用 subject.webm 即可;盘子是无关紧要的。
将“无人的房间”作为真实的背景干净的板 — 打孔板会显示出透明的空隙。
用不同的主题替换此人(重新定位)干净的板 - 新的主题需要其下方的真实像素。
视觉特效动态观察/“从这个镜头中删除额外的内容”干净的板 - 规范的修复用例。
如果不透明的东西总是覆盖轮廓,打孔就足够了,而且比运行修补程序便宜约 1000 倍。

两层组合模式

两层模式在功能上是 text-behind-subject 的替代品,不需要项目中的原始 presenter.mp4 — 板将其替换为底层:
<!-- z=1 inverse-alpha plate fills everything except the subject's silhouette -->
<video src="plate.webm" data-start="0" data-duration="6" data-track-index="0" muted playsinline></video>

<!-- z=2 anything you want occluded by the subject lives here -->
<h1 style="z-index:2; position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);">
  MAKE IT IN HYPERFRAMES
</h1>

<!-- z=3 the cutout puts the subject back on top -->
<div class="cutout-wrap" style="position:absolute;inset:0;z-index:3">
  <video src="subject.webm" data-start="0" data-duration="6" data-track-index="1" muted playsinline></video>
</div>
约束:该标志需要视频输入和 .webm.mov 用于两个输出。它对于图像输入无效(无需进行时间配对),并且不接受 .png 板。

表现

来自 matting eval 的真实世界数字,在 4 秒 1080p 剪辑上运行 u²-net_ human_seg:
平台提供者毫秒/帧30 秒剪辑
苹果芯片(M2 Pro / M3 / M4)核心机器学习~263约 2 分钟
NVIDIA GPU(T4、A10、RTX)CUDA~80–150~30–60 秒
Linux x86中央处理器~1100约 16 分钟
macOS 英特尔中央处理器~900约 13 分钟
抠图是离线预处理——每个资产运行一次并重复使用输出。仅使用 CPU 速度较慢,但​​始终有效;如果您重复使用同一主题剪辑,请在更快的计算机上运行一次,然后将透明输出签入您的项目中。

明确选择设备

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

在合成中使用透明视频

透明 WebM 的行为与任何其他视频元素一样。您最常使用的两种模式: 主题位于背景图像上:
<div style="position: relative; width: 1920px; height: 1080px;">
  <img src="background.jpg" style="position: absolute; inset: 0;" />
  <video
    src="transparent.webm"
    autoplay
    muted
    loop
    playsinline
    style="position: absolute; right: 80px; bottom: 0; height: 90%;"
  ></video>
</div>
HyperFrames场景的主题:
<!-- scene contents (text, animations, etc.) -->
<div class="title-card">Welcome</div>

<!-- subject layered on top -->
<video src="transparent.webm" autoplay muted loop playsinline class="subject"></video>
剪切图继承了合成的帧速率和时间线 - 它在场景持续时间内播放一次,因此请尽可能将源剪辑长度与场景长度相匹配。如果场景比剪辑长,则 loop 会处理它。
当渲染包含 <video> 元素的合成时,渲染器通过 ffmpeg 在内部读取源。透明 WebM 被解码并保留 alpha 平面。

合成模式和陷阱

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

三种模式

图案剪纸后面结果
剪切不同的场景 (最常见)静态图像、渐变、动画背景或不相关的素材干净的。剪纸是主题的唯一来源——没有重影,没有边缘光晕。使用任何 --quality
在其自己的源 mp4 上剪切 (主题后面的文本,带覆盖的头部说话)生成剪切图的相同 mp4同一个人的两个 RGB 源。默认情况下 --quality balanced (crf 18),加倍几乎不可见;在 --quality fast (crf 30) 处,您会看到轮廓上有轻微的颜色偏移/软边缘。使用 --quality best (crf 12) 进行英雄射击。
同一主题的不同镜头的剪切同一个人的另一个镜头看起来就像两个重叠的人。避免——重新拍摄或重新切断源。

Text-behind-subject:推荐的布局

将标题放在演示者“后面”,以便他们的轮廓遮挡文本:
<!-- z=1 base mp4: full lobby + presenter, plays the whole scene -->
<video
  id="cf-base"
  data-start="0" data-duration="6" data-media-start="0" data-track-index="0"
  src="presenter.mp4"
  muted playsinline
></video>

<!-- z=2 headline -->
<h1 id="cf-headline" style="position:absolute;top:50%;left:50%;
     transform:translate(-50%,-50%); z-index:2;
     color:#fff; text-shadow:0 6px 32px rgba(0,0,0,.55);
     clip-path:inset(0 0 100% 0); font-size:220px; font-weight:900;">
  MAKE IT IN HYPERFRAMES
</h1>

<!-- z=3 cutout: same source, alpha around presenter, hidden until the cut.
     The wrapper carries the opacity, NOT the <video> itself. -->
<div class="cutout-wrap" style="position:absolute;inset:0;z-index:3;opacity:0">
  <video
    id="cf-cutout"
    data-start="0" data-duration="6" data-media-start="0" data-track-index="1"
    src="presenter.webm"
    muted playsinline
  ></video>
</div>
const tl = gsap.timeline({ paused: true });
const CUT = 3.3;

// Reveal the headline early
tl.to("#cf-headline", { clipPath: "inset(0 0 0% 0)", duration: 0.6, ease: "expo.out" }, 0.25);

// At the cut, flip the cutout wrapper visible — silhouette punches through the headline
tl.set(".cutout-wrap", { opacity: 1 }, CUT);

// Sentinel: extend timeline to the composition's full duration so the renderer
// doesn't bail past the last meaningful tween.
tl.set({}, {}, 6);

两条不明显的规则

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 直接影响边缘处加倍的可见程度:
--quality病例报告表文件大小(12s @ 1080p)何时使用
fast30〜2MB剪切图位于不相关的背景上,文件大小很重要
balanced (默认)18〜6MB推荐用于主题后面的文本和覆盖在源上的任何图案
best12〜12MB英雄镜头、大师镜头或您将在下游重新编码的任何内容
编码器还写入 BT.709 + 有限范围的颜色元数据,因此 Chrome 的 YUV→RGB 管道与源 mp4 相匹配。如果没有这些标签,即使在无损质量下,剪切图的渲染也会与底层 mp4 略有不同(可见红色/皮肤变化)。

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

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

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

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

免费、开源 CLI 和库

这些都在本地运行,没有帐户,没有上传,没有水印。
工具何时使用它抓住
rembg(Python,麻省理工学院)您需要不同的主题类型 - isnet-general-use 用于对象/动物/产品,birefnet-portrait 用于头发的质量上限,silueta 用于约 40 MB 的微小占用空间。与我们的默认型号相同的系列,更多种类。需要 Python + pip install rembg。某些捆绑模型 (birefnet-*) 需要 ~4 GB RAM 并且仅支持 CPU
BiRefNet(PyTorch,麻省理工学院)提供最高保真度的肖像遮罩 — 头发边缘明显比 u²-net 更好重(约 4 GB 推理 RAM),CPU 速度慢,在评估时在 Apple CoreML 上损坏
强大的视频抠图 (RVM) (PyTorch, GPL-3.0)唯一广泛使用的内置时间一致性的模型 - 移动主体上没有边缘闪烁。当您安装长的说话头夹并且框架到框架的稳定性很重要时,这是最佳选择GPL-3.0 许可证与大多数商业/专有代码库不兼容。使用前请阅读您的存储库的许可证
背景去除器(Python,麻省理工学院)u²-net 的简单 pip install 包装器;如果您想要 Python API 而不是我们的 Node CLI,那就太好了与我们的产品系列相同,没有质量差异 - 选择适合您的堆栈的产品
ComfyUI(开源,GPL-3.0 核心)自定义工作流程:链接分割模型 + alpha 细化 + 时间平滑。处理棘手案件的正确工具(多个主题、相似背景下的头发、体育镜头)涉及设置(Python、模型、节点图)。值得重复专业工作
在外部运行其中任何一个之后,使用以下命令将输出编码为与 HyperFrames 兼容的透明 WebM:
Terminal
ffmpeg -i frames-%04d.png -c:v libvpx-vp9 \
  -pix_fmt yuva420p \
  -metadata:s:v:0 alpha_mode=1 \
  -auto-alt-ref 0 -b:v 0 -crf 30 \
  transparent.webm

免费桌面/GUI 工具

工具何时使用它抓住
达芬奇决心 — 魔法面具您已经在 Resolve 中进行编辑,想要一个带有手动细化功能的基于画笔的 UI,并且需要将 Alpha 往返到更大的编辑中macOS / Windows / Linux 桌面安装。免费套餐包括 Magic Mask;付费 Studio 版本在某些功能上解锁了更高的分辨率
Backgroundremover.app(网络)一次性图片剪切,无需注册,无水印仅单个图像,而不是视频。托管免费层,但底层工具是相同的 rembg 模型系列
PhotoRoom 背景去除器(网络)快速的一次性图像、精美的 UI、无需注册仅单张图像,电子商务调整模型

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

工具何时使用它抓住
unscreen.com快速一次性视频,无需安装,拖放免费套餐带有水印并限制在短片中(~10 秒预览)。付费删除了两者。由remove.bg背后的团队运行
RunwayML — 绿屏精美的用户界面,具有画笔细化和时间感知跟踪功能;最接近专业轮转的 SaaS存在免费套餐,但有信用限制;认真使用就是订阅
Kapwing — 背景去除剂基于浏览器,与视频编辑器集成免费套餐带有水印;付费删除它

如何选择

  • 人物/肖像视频、网络播放、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
# Manually download and drop into the cache
mkdir -p ~/.cache/hyperframes/background-removal/models
curl -L -o ~/.cache/hyperframes/background-removal/models/u2net_human_seg.onnx \
  https://github.com/danielgatis/rembg/releases/download/v0.0.0/u2net_human_seg.onnx
随后的 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
ffmpeg -i in.webm -c:v libvpx-vp9 \
  -pix_fmt yuva420p \
  -metadata:s:v:0 alpha_mode=1 \
  -auto-alt-ref 0 \
  out.webm
要验证 WebM 是否具有 Alpha,请提取第一帧并检查:
Terminal
ffmpeg -y -c:v libvpx-vp9 -i out.webm -frames:v 1 -pix_fmt rgba -update 1 frame0.png
解码后的 frame0.png 应该是 RGBA 并且具有重要的 alpha 值。

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

如果 CoreML 绑定失败,管道会自动回退到 CPU,并发出警告。如果您想完全跳过 CoreML 尝试,请强制使用 CPU:
Terminal
npx hyperframes remove-background subject.mp4 -o transparent.webm --device cpu

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

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

参考