---
title: ComfyUI 视频分割系统 - 安装与搭建步骤
date: 2026-04-22
tags:
  - comfyUI
  - 安装步骤
  - SAM2
  - 工作流搭建
---

# ComfyUI 视频分割系统 - 安装与搭建步骤

## 前置要求

在 ComfyUI 界面中操作前，请确保已通过 **ComfyUI Manager（管理扩展功能）** 安装以下节点包：

| 节点包 | 作用 |
|-------|------|
| `ComfyUI-VideoHelperSuite` | 视频加载、帧提取、视频合成 |
| `ComfyUI-segment-anything-2` | SAM2 模型加载、图像/视频分割与追踪 |
| `ComfyUI-Impact-Pack` | Grounding DINO 语义检测 |
| `rgthree-comfy` | Fast Muter / Bypass 节点 |

安装后**重启 ComfyUI**。

---

## 搭建步骤（共 10 步）

以下所有节点均通过 **双击画布空白处** 或 **右键 → 添加节点** 创建。

### 第 1 步：选择加载节点

1. 右键/双击空白处打开节点菜单
2. 在第二级菜单中找到 **Video Helper Suite**（带有紫色摄像机图标的那一项）
3. 在右侧弹出的第三级菜单中，根据你的需求选择以下任意一个节点：
   - **Load Video (Upload)**：如果你想从电脑本地上传一个视频文件
   - **Load Video (Path)**：如果你想通过输入电脑上的文件夹路径来读取视频
4. 点击创建节点
5. 节点出现在画布上，把它拖到左上角区域

### 第 2 步：提取第一帧（关键帧）

1. 回到 **Video Helper Suite**（紫色摄像机图标）的第三级菜单
2. 找到 `图像` 分类下的 **`Select Images`**：
   - 在较新版本的 Video Helper Suite 中，它取代了旧版的 `VHS_SelectFrames` 名称，功能完全一致，都是通过索引（Index）从视频流中挑选特定帧
3. （可选抽帧）如果你不想逐帧处理，也可以使用它上方的 **`Select Every Nth Image`**，每隔几帧取一张
4. 连接：`Load Video` 的 `IMAGE` 输出 → `Select Images` 的 `image` 输入
5. 设置参数：`index = 0`（表示取第一帧）

> 这就是你的关键帧，后续所有分割以此为基础。

### 第 3 步：SAM2 模型加载器

- 搜索：`SAM2` → `(Down)Load SAM2Model`
- 拖到画布**中上方**，作为公共模型源
- 参数设置：
  - `model`: `sam2.1_hiera_base_plus.safetensors`
  - `segmentor`: 根据用途选择（单图或视频）
  - `device`: `cuda`
  - `precision`: `fp16`（省显存）

### 第 4 步：单帧分割测试（Sam2Segmentation）

- 搜索：`SAM2` → `Sam2Segmentation`
- 连接：
  - `Select Images`（第一帧）→ `image`
  - `(Down)Load SAM2Model` → `sam2_model`

**选择以下任意一种提示方式填入：**

- **方式 A：手绘 Mask（最直观，强烈推荐）**
  - 将图像连到 `Preview Image`，右键预览图 → `Open in Mask Editor`
  - 用画笔涂抹目标区域，Save 后得到 `mask`，连到 `Sam2Segmentation` 的 `mask` 输入
  - 无需精确坐标，手绘粗略区域即可引导 SAM2 分割

- **方式 B：点坐标（适合精确控制）**
  - `coordinates_positive`: 填入正选点坐标（如 `[[0.45, 0.52]]`）
  - `coordinates_negative`: 填入反选点坐标（可选）
  - 坐标获取技巧：先用 `Sam2AutoSegmentation` 跑一下看 `bbox` 参考；或在画图软件中读像素坐标再归一化

- **方式 C：检测框**
  - `bboxes`: 填入边界框 `[x1, y1, x2, y2]`，可通过 Florence-2 / Grounding DINO 自动生成

- 再加一个 `image` → `Preview Image`，连到 `Sam2Segmentation` 的 `mask` 输出
- **点击右上角「运行」**，先确认第一帧分割正确
- **效果不佳时**：直接修改 mask（重画）或坐标数值，再次运行即可快速迭代

### 第 5 步：视频追踪核心链路

**5.1 Sam2VideoSegmentationAddPoints（注入提示）**
- 搜索：`SAM2` → `Sam2VideoSegmentationAddPoints`
- 连接：
  - `(Down)Load SAM2Model` → `sam2_model`
  - `Load Video` 的完整图像批次 → `image`
  - `coordinates_positive`: 第一帧的正选点坐标
  - `coordinates_negative`: 反选点坐标（可选）
- 参数：
  - `frame_index`: `0`（在第 0 帧添加标注）
  - `object_index`: `0`（单目标默认）
  - `prev_inference_state`: 首次追踪时留空

**5.2 Sam2VideoSegmentation（执行追踪）**
- 搜索：`SAM2` → `Sam2VideoSegmentation`
- 连接：
  - `(Down)Load SAM2Model` → `sam2_model`
  - `Sam2VideoSegmentationAddPoints` 的 `inference_state` → `inference_state`
- 参数：`keep_model_loaded` 推荐开启
- 输出：`mask`（完整视频的分割结果）

### 第 6 步：可视化与保存

| 节点 | 路径 | 用途 |
|------|------|------|
| `MaskToImage` | `image` → `MaskToImage` | 将 mask 转为可视图像 |
| `Preview Image` | `image` → `Preview Image` | 预览效果 |
| `Save Image` | `image` → `Save Image` | 保存 mask 序列 |
| `VHS_VideoCombine` | `video` → `VHS_VideoCombine` | 合成带遮罩的视频 |

### 第 7 步：人工纠正分支（RGThree Fast Muter）

- 搜索：`rgthree` → `Fast Muter`
- **核心思路**：利用 `Sam2VideoSegmentationAddPoints` 的 `prev_inference_state` 链式追加修正，默认通过 Fast Muter / Bypass 跳过修正节点
- 具体搭建：
  1. 新建第二个 `Sam2VideoSegmentationAddPoints`，命名为 "Fix_AddPoints"
  2. `prev_inference_state` 接入主链路第一个 AddPoints 的 `inference_state`
  3. `image`: 接入 `Load Video` 的完整批次
  4. `frame_index`: 问题帧号（如 `45`）
  5. `coordinates_positive`: 修正后的点坐标
  6. 该节点的 `inference_state` → `Sam2VideoSegmentation`
  7. 对该修正节点使用 **Bypass** 或在其坐标输入前加 **`Fast Muter`**，默认关闭
- **默认状态**：修正节点被跳过（红色/关闭），不参与运算
- **需要修正时**：取消 Bypass / Fast Muter 变绿（启用），修改帧号和坐标，重新运行

### 第 8 步：总连线检查

确保以下四点：
- `Sam2VideoSegmentationAddPoints` 的 `image` 接入的是**完整视频批次**，不是单帧
- `Sam2VideoSegmentationAddPoints` 的 `frame_index` 指向了正确的标注帧
- `Sam2Segmentation`（单帧预览）只吃了 `index=0` 的单帧
- Fast Muter / 修正节点 Bypass 状态符合预期

---

## 建议的执行顺序

不要一次性连完所有节点再运行！按以下顺序验证：

1. **只连第 1~4 步**（到 Preview Image）→ 运行 → 确认第一帧分割正确
2. **接入第 5~6 步**（VideoSegmentationAddPoints + VideoSegmentation + 输出）→ 运行 → 确认整段视频能跑通
3. **最后加第 7 步**（Fast Muter 修正分支）→ 测试一次纠正流程

---

## Fast Muter 实际操作流程

```
首次运行：
  Fix_AddPoints 被 Bypass / Fast Muter 关闭
  → 点击「运行」→ 检查 Preview Image

发现第 N 帧错了：
  1. 修改 "Fix_AddPoints" 的 frame_index = N
  2. 修改 "Fix_AddPoints" 的 coordinates_positive 为正确坐标
  3. 取消 Bypass / Fast Muter = 绿色（打开）
  4. 再次点击「运行」
  5. 系统以第 0 帧 + 第 N 帧为锚点，综合追踪整个视频

修好了：
  恢复 Bypass / Fast Muter = 红色（关闭）
  → 保存最终工作流模板
```

---

## 常见问题速查

| 问题 | 排查方向 |
|------|---------|
| 节点呈红色/无法创建 | 节点包未安装或加载失败，检查 ComfyUI 启动日志 |
| SAM2 节点报错显存不足 | 换 `sam2.1_hiera_tiny.safetensors`，或降低视频分辨率，或启用 fp16 |
| 追踪结果全黑/全白 | 检查 `coordinates_positive` 是否正确传入；检查坐标格式（0~1 vs 像素）；确认 `frame_index` 与标注帧一致 |
| Florence-2 / Grounding DINO 无检测结果 | 降低 `threshold`，或简化 prompt（如只写 `"person"`） |
| 修正后重新追踪无变化 | 确认修正节点已取消 Bypass / Fast Muter 已启用；确认修正节点的 `prev_inference_state` 正确接入上游 |
| 视频输出帧率不对 | 在 `Load Video` 和 `VideoCombine` 中统一设置 fps 参数 |
