291 lines
12 KiB
Markdown
291 lines
12 KiB
Markdown
---
|
||
title: ComfyUI 视频分割系统 - 界面搭建操作指南
|
||
date: 2026-04-22
|
||
tags:
|
||
- comfyUI
|
||
- 操作指南
|
||
- SAM2
|
||
- 工作流搭建
|
||
---
|
||
|
||
# ComfyUI 视频分割系统 - 界面搭建操作指南
|
||
|
||
> 前置假设:你已安装以下节点包。如未安装,请先通过 ComfyUI Manager 安装:
|
||
> - `ComfyUI-Manager`(管理器本身)
|
||
> - `ComfyUI-VideoHelperSuite`(视频加载/保存)
|
||
> - `ComfyUl-segment-anything-2`(SAM2 分割,推荐 kijai 版)
|
||
> - `ComfyUI-Impact-Pack`(Grounding DINO / 检测器)
|
||
> - `rgthree-comfy`(Fast Muter / Bypass 节点)
|
||
|
||
---
|
||
|
||
## 第一步:打开节点添加菜单
|
||
|
||
在画布空白处 **双击鼠标左键**,或 **右键单击空白处** → 选择 `添加节点`。
|
||
|
||
你会看到一个分类菜单(如 `image`, `video`, `SAM2`, `rgthree` 等)。
|
||
|
||
---
|
||
|
||
## 第二步:搭建视频输入端
|
||
|
||
### 2.1 加载视频
|
||
|
||
1. 右键/双击空白处打开节点菜单
|
||
2. 在第二级菜单中找到 **Video Helper Suite**(带有紫色摄像机图标的那一项)
|
||
3. 在右侧弹出的第三级菜单中,根据你的需求选择以下任意一个节点:
|
||
- **Load Video (Upload)**:如果你想从电脑本地上传一个视频文件
|
||
- **Load Video (Path)**:如果你想通过输入电脑上的文件夹路径来读取视频
|
||
4. 点击创建节点
|
||
5. 节点出现在画布上,把它拖到左上角区域
|
||
|
||
### 2.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`(表示取第一帧)
|
||
|
||
> **操作技巧**:ComfyUI 中,鼠标从一个节点的**圆形输出端**拖拽到另一个节点的**圆形输入端**即可完成连线。
|
||
|
||
---
|
||
|
||
## 第三步:放置 SAM2 模型加载器
|
||
|
||
这是整个系统的核心引擎。
|
||
|
||
1. 右键/双击空白处
|
||
2. 找到分类:`SAM2` ,别选 `segment_anything2 `
|
||
3. 选择节点:`(Down)Load SAM2Model`(名称可能为 `SAM2ModelLoader` 或 `SAM2::Model Loader`)
|
||
4. 参数设置:
|
||
- `model_name`: 选择 `sam2.1 hiera_base_plus.safetensors`(精度与速度平衡)
|
||
- `device`: `cuda`(若显存不足可选 `cpu`,但极慢)
|
||
- `precision`: `fp16`(推荐,省显存)
|
||
|
||
将这个节点放在画布**中上部**,作为公共模型源。
|
||
|
||
---
|
||
|
||
## 第四步:创建交互式提示(三选一或组合)
|
||
|
||
根据你的需求,添加以下**至少一种**提示节点。建议**三种都创建**,后期灵活切换。
|
||
|
||
### 4.1 点标注(正选/反选)
|
||
|
||
1. 添加节点:`SAM2 → `SAM2 Point Prompt` 或 `Point Prompt`
|
||
2. 参数设置:
|
||
- `points`: `[[0.5, 0.5]]`(归一化坐标,格式为 JSON 列表)
|
||
- `labels`: `[1]`(`1` = 正选前景,`0` = 反选背景)
|
||
- **示例**:`points = [[0.45, 0.52], [0.55, 0.48]]`, `labels = [1, 0]` 表示第一个点是前景、第二个点是背景排除
|
||
|
||
> **注意**:SAM2 的坐标通常是**归一化坐标**(0~1),而非像素坐标。部分节点包也支持像素坐标,请查看节点说明。
|
||
|
||
### 4.2 框标注
|
||
|
||
1. 添加节点:`SAM2` → `SAM2 Box Prompt` 或 `Box Prompt`
|
||
2. 参数:
|
||
- `box`: `[0.3, 0.3, 0.7, 0.8]`(xyxy 格式,归一化坐标)
|
||
|
||
### 4.3 语义提示(文本 → 检测框 → Mask)
|
||
|
||
这是**自动化程度最高**的路径,需要两步:
|
||
|
||
#### Step A:文本转检测框
|
||
1. 添加节点:`Impact` → `GroundingDinoDetector` 或 `UltralyticsDetectorProvider`
|
||
- 选择 `Grounding DINO` 节点
|
||
2. 参数:
|
||
- `prompt`: `"a person"`(你的目标描述)
|
||
- `threshold`: `0.3`(置信度阈值)
|
||
|
||
#### Step B:检测框转 SAM2 框提示
|
||
1. `Grounding DINO` 的 `BOXES` 输出 → 连接到 `Box Prompt` 节点的 `box` 输入
|
||
2. 这样文本自动生成了空间位置信息
|
||
|
||
---
|
||
|
||
## 第五步:单帧分割(SAM2 Image Predictor)
|
||
|
||
1. 添加节点:`SAM2` → `SAM2 Image Predictor`
|
||
2. 连线如下:
|
||
- `SelectFrames` 的图像输出 → `SAM2 Image Predictor` 的 `image`
|
||
- `SAM2 Model Loader` 的模型输出 → `SAM2 Image Predictor` 的 `sam2_model`
|
||
- `Point Prompt` / `Box Prompt` 的提示输出 → `SAM2 Image Predictor` 的 `prompt`
|
||
3. 参数:
|
||
- `multimask_output`: `False`(一般场景单 mask 即可,复杂场景可开 True 再筛选)
|
||
|
||
**此时你可以先点击「运行」测试单帧分割效果。**
|
||
|
||
---
|
||
|
||
## 第六步:视频追踪核心(SAM2 Video Predictor)
|
||
|
||
这是将单帧结果传播到全视频的关键节点。
|
||
|
||
1. 添加节点:`SAM2` → `SAM2 Video Predictor` 或 `SAM2VideoPredictor`
|
||
2. 连线:
|
||
- `SAM2 Model Loader` → `sam2_model`
|
||
- `Load Video` 的完整图像批次 → `video_frames`(或 `images`)
|
||
- `SAM2 Image Predictor` 输出的 `mask` → `initial_mask`
|
||
- `SelectFrames` 的帧索引(或通过常量节点设置 `frame_index=0`)→ `frame_index`
|
||
3. **内部逻辑**:该节点会对视频所有帧预编码,并在第 0 帧注入你刚才分割的 mask
|
||
|
||
---
|
||
|
||
## 第七步:双向追踪(Track Range)
|
||
|
||
部分 SAM2 节点包将追踪拆分为独立节点,部分内嵌在 Video Predictor 中。
|
||
|
||
### 情况 A:有独立追踪节点
|
||
1. 添加节点:`SAM2` → `SAM2 Track Forward` 和 `SAM2 Track Backward`
|
||
2. 或者查找:`SAM2` → `Track Range` / `Track Bidirectional`
|
||
3. 连线:`SAM2 Video Predictor` 的 `state` 输出 → `Track Range` 的 `video_state`
|
||
4. 参数:
|
||
- `start_frame`: 关键帧索引(如 0)
|
||
- `direction`: `both` 或分别创建前向/后向节点
|
||
|
||
### 情况 B:追踪内嵌在 Video Predictor 中
|
||
- 若你的节点包版本直接输出 `mask_sequence`,则跳过此步,直接连到预览/保存节点。
|
||
|
||
---
|
||
|
||
## 第八步:输出与可视化
|
||
|
||
### 8.1 预览 Mask
|
||
|
||
1. 添加节点:`image` → `MaskToImage`(将 mask 转为可视图像)
|
||
2. 再添加:`image` → `Preview Image`
|
||
3. 连接追踪输出的 mask → `MaskToImage` → `Preview Image`
|
||
|
||
### 8.2 合成视频(原图 + Mask 叠加)
|
||
|
||
1. 添加节点:`video` → `VHS_VideoCombine`(VideoHelperSuite)
|
||
2. 或:`image` → `Composite Mask` / `ImageCompositeMasked`
|
||
3. 参数:
|
||
- `color`: `#FF0000`(Mask 颜色)
|
||
- `alpha`: `0.6`(透明度)
|
||
|
||
### 8.3 保存 Mask 序列
|
||
|
||
1. 添加节点:`image` → `Save Image`(批量保存时每个 mask 会存为独立文件)
|
||
2. 或使用 `VHS_SaveImageSequence`
|
||
3. 建议设置 `filename_prefix`: `mask_segment`
|
||
|
||
---
|
||
|
||
## 第九步:人工纠正分支(RGThree Fast Muter)
|
||
|
||
这是提升迭代效率的核心技巧。
|
||
|
||
### 9.1 创建 Fast Muter 节点
|
||
|
||
1. 右键/双击空白处
|
||
2. 找到:`rgthree` → `Fast Muter`(或 `Fast Bypasser`)
|
||
3. 该节点有一个开关按钮,点击可在 **启用(绿色)** 和 **跳过/静音(红色)** 之间切换
|
||
|
||
### 9.2 搭建纠正分支
|
||
|
||
**思路**:在主线旁创建一条「修正输入」的旁路,默认关闭(Bypass)。发现问题时打开,覆盖原追踪结果。
|
||
|
||
#### 具体步骤:
|
||
|
||
1. **创建修正用的 Frame Picker**:
|
||
- 再添加一个 `SelectFrames` 节点,命名为 "Fix_Frame"
|
||
- 参数 `frame_index`:留空或设为 `45`(示例问题帧)
|
||
|
||
2. **创建修正用的 Point Prompt**:
|
||
- 再添加一个 `Point Prompt`,命名为 "Fix_Points"
|
||
- 填入修正后的坐标
|
||
|
||
3. **创建修正用的 SAM2 Image Predictor**:
|
||
- 添加第二个 `SAM2 Image Predictor`,命名为 "SAM2_Fix"
|
||
- 输入:`Fix_Frame` 的图像 + `Fix_Points` + 公共 `SAM2 Model Loader`
|
||
|
||
4. **插入 Fast Muter 控制修正流**:
|
||
- 在 "SAM2_Fix" 的 `mask` 输出后,连接到一个 `Fast Muter` 节点
|
||
- `Fast Muter` 的输出 → `SAM2 Video Predictor` 的 `correction_mask` 或 `additional_hint` 输入
|
||
- **默认状态**:点击 `Fast Muter` 使其变为红色(Muted/跳过),此时修正分支不参与运算
|
||
- **需要修正时**:点击变绿(启用),修正 mask 被注入追踪器
|
||
|
||
5. **创建重新追踪控制**:
|
||
- 如果 SAM2 Video Predictor 支持 `retrack_from_frame` 输入,将 `Fix_Frame` 的帧索引连入
|
||
- 或使用第二个 `Track Range` 节点,设置 `start_frame` 为修正帧
|
||
|
||
### 9.3 实际操作流程
|
||
|
||
```
|
||
第一次运行:
|
||
1. Fast Muter = 红色(关闭)
|
||
2. 运行完整工作流
|
||
3. 检查 Preview Image / 输出视频
|
||
|
||
发现问题(如第 45 帧漂移):
|
||
1. 修改 "Fix_Frame" 的 frame_index = 45
|
||
2. 修改 "Fix_Points" 的坐标为正确位置
|
||
3. 点击 Fast Muter → 绿色(启用)
|
||
4. 重新点击「运行」
|
||
5. 系统从第 45 帧重新追踪,覆盖错误区间
|
||
|
||
确认修复后:
|
||
1. Fast Muter → 红色(关闭,避免影响后续运行)
|
||
2. 保存最终工作流
|
||
```
|
||
|
||
---
|
||
|
||
## 第十步:工作流连线总览
|
||
|
||
按以下逻辑检查你的连线是否完整:
|
||
|
||
```
|
||
[Load Video] ──→ [SelectFrames(0)] ──→ [SAM2 Image Predictor] ←── [SAM2 Model Loader]
|
||
│ ↑
|
||
│ [Point Prompt / Box Prompt / Text→Grounding→Box]
|
||
│ │
|
||
│ [Fast Muter] ←── [SelectFrames(N)] ──→ [SAM2 Image Predictor(修正)]
|
||
│ (默认关闭) ↑
|
||
│ [Fix Points]
|
||
↓
|
||
[SAM2 Video Predictor] ←── initial_mask ───┘
|
||
│
|
||
├──→ [Track Forward] ──┐
|
||
└──→ [Track Backward] ─┼──→ [合并 Mask Sequence] ──→ [MaskToImage] ──→ [Preview Image]
|
||
└────────────────────────────────────────────────→ [Save Image]
|
||
```
|
||
|
||
---
|
||
|
||
## 运行前检查清单
|
||
|
||
- [ ] SAM2 模型文件已下载到 `ComfyUI/models/sam2/` 目录
|
||
- [ ] Grounding DINO 模型已下载(如使用语义提示)
|
||
- [ ] `Load Video` 已选择有效视频路径
|
||
- [ ] `SelectFrames(0)` 正确提取了第一帧
|
||
- [ ] Prompt 节点的坐标格式与节点要求一致(归一化 0~1 或像素坐标)
|
||
- [ ] `SAM2 Video Predictor` 接收的是**完整视频批次**,而非单帧
|
||
- [ ] `Fast Muter` 当前状态符合预期(首次运行应为关闭/红色)
|
||
- [ ] 输出节点的保存路径可写
|
||
|
||
---
|
||
|
||
## 常见问题速查
|
||
|
||
| 问题 | 排查方向 |
|
||
|------|---------|
|
||
| 节点呈红色/无法创建 | 节点包未安装或加载失败,检查 ComfyUI 启动日志 |
|
||
| SAM2 节点报错显存不足 | 换 `sam2_hiera_tiny.pt`,或降低视频分辨率,或启用 fp16 |
|
||
| 追踪结果全黑/全白 | 检查 `initial_mask` 是否正确传入;检查坐标格式(0~1 vs 像素) |
|
||
| Grounding DINO 无检测结果 | 降低 `threshold`,或简化 prompt(如只写 `"person"`) |
|
||
| 修正后重新追踪无变化 | 确认 `Fast Muter` 已启用(绿色),且修正 mask 正确连入 Video Predictor |
|
||
| 视频输出帧率不对 | 在 `Load Video` 和 `VideoCombine` 中统一设置 fps 参数 |
|
||
|
||
---
|
||
|
||
## 下一步建议
|
||
|
||
1. **先跑通单帧分割**:不连 Video Predictor,只用 Image Predictor + Preview Image 确认第一帧分割正确
|
||
2. **再接入视频追踪**:确认单帧无误后,再连 SAM2 Video Predictor
|
||
3. **最后添加纠正分支**:等标准流程跑通后再加入 RGThree Fast Muter 机制
|
||
4. **保存工作流模板**:`Workflow` → `Save`(或 Ctrl+S),命名为 `VideoSeg_Template.json`
|