7.8 KiB
7.8 KiB
title, date, tags
| title | date | tags | ||||
|---|---|---|---|---|---|---|
| ComfyUI 视频分割系统 - 安装与搭建步骤 | 2026-04-22 |
|
ComfyUI 视频分割系统 - 安装与搭建步骤
前置要求
在 ComfyUI 界面中操作前,请确保已通过 ComfyUI Manager(管理扩展功能) 安装以下节点包:
| 节点包 | 作用 |
|---|---|
ComfyUI-VideoHelperSuite |
视频加载、帧提取、视频合成 |
ComfyUI-segment-anything-2 |
SAM2 模型加载、图像/视频分割与追踪 |
ComfyUI-Impact-Pack |
Grounding DINO 语义检测 |
rgthree-comfy |
Fast Muter / Bypass 节点 |
安装后重启 ComfyUI。
搭建步骤(共 10 步)
以下所有节点均通过 双击画布空白处 或 右键 → 添加节点 创建。
第 1 步:选择加载节点
- 右键/双击空白处打开节点菜单
- 在第二级菜单中找到 Video Helper Suite(带有紫色摄像机图标的那一项)
- 在右侧弹出的第三级菜单中,根据你的需求选择以下任意一个节点:
- Load Video (Upload):如果你想从电脑本地上传一个视频文件
- Load Video (Path):如果你想通过输入电脑上的文件夹路径来读取视频
- 点击创建节点
- 节点出现在画布上,把它拖到左上角区域
第 2 步:提取第一帧(关键帧)
- 回到 Video Helper Suite(紫色摄像机图标)的第三级菜单
- 找到
图像分类下的Select Images:- 在较新版本的 Video Helper Suite 中,它取代了旧版的
VHS_SelectFrames名称,功能完全一致,都是通过索引(Index)从视频流中挑选特定帧
- 在较新版本的 Video Helper Suite 中,它取代了旧版的
- (可选抽帧)如果你不想逐帧处理,也可以使用它上方的
Select Every Nth Image,每隔几帧取一张 - 连接:
Load Video的IMAGE输出 →Select Images的image输入 - 设置参数:
index = 0(表示取第一帧)
这就是你的关键帧,后续所有分割以此为基础。
第 3 步:SAM2 模型加载器
- 搜索:
SAM2→(Down)Load SAM2Model - 拖到画布中上方,作为公共模型源
- 参数设置:
model:sam2.1_hiera_base_plus.safetensorssegmentor: 根据用途选择(单图或视频)device:cudaprecision: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_modelLoad Video的完整图像批次 →imagecoordinates_positive: 第一帧的正选点坐标coordinates_negative: 反选点坐标(可选)
- 参数:
frame_index:0(在第 0 帧添加标注)object_index:0(单目标默认)prev_inference_state: 首次追踪时留空
5.2 Sam2VideoSegmentation(执行追踪)
- 搜索:
SAM2→Sam2VideoSegmentation - 连接:
(Down)Load SAM2Model→sam2_modelSam2VideoSegmentationAddPoints的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 跳过修正节点 - 具体搭建:
- 新建第二个
Sam2VideoSegmentationAddPoints,命名为 "Fix_AddPoints" prev_inference_state接入主链路第一个 AddPoints 的inference_stateimage: 接入Load Video的完整批次frame_index: 问题帧号(如45)coordinates_positive: 修正后的点坐标- 该节点的
inference_state→Sam2VideoSegmentation - 对该修正节点使用 Bypass 或在其坐标输入前加
Fast Muter,默认关闭
- 新建第二个
- 默认状态:修正节点被跳过(红色/关闭),不参与运算
- 需要修正时:取消 Bypass / Fast Muter 变绿(启用),修改帧号和坐标,重新运行
第 8 步:总连线检查
确保以下四点:
Sam2VideoSegmentationAddPoints的image接入的是完整视频批次,不是单帧Sam2VideoSegmentationAddPoints的frame_index指向了正确的标注帧Sam2Segmentation(单帧预览)只吃了index=0的单帧- Fast Muter / 修正节点 Bypass 状态符合预期
建议的执行顺序
不要一次性连完所有节点再运行!按以下顺序验证:
- 只连第 1~4 步(到 Preview Image)→ 运行 → 确认第一帧分割正确
- 接入第 5~6 步(VideoSegmentationAddPoints + VideoSegmentation + 输出)→ 运行 → 确认整段视频能跑通
- 最后加第 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 参数 |