docs: update README — remove transparent, keep JPG/MP4 only

This commit is contained in:
Cherokee
2026-04-30 17:03:09 +08:00
parent 207fdae844
commit 1ca35003ca
+28 -18
View File
@@ -6,7 +6,7 @@
- 逐帧人物分割(YOLOv8-seg)
- 质心距离多目标追踪(MaskTracker)
- 基于人脸识别的身份聚类(InsightFace),支持跨时段合并 + 共现互斥
- 纯绿幕背景输出(#00FF00)
- 多种抠像背景可选(绿、蓝、黑、白),默认绿色
- 多段出场自动合并为单个视频
- JSON 结构化元数据(帧范围、时间戳)
@@ -21,7 +21,7 @@
3. **身份聚类** — 使用 InsightFace 提取人脸特征,将同一人不同时间段的 track 合并为同一个 actor
- **共现互斥约束**:同一帧出现的两个人物绝不会合并为同一人
- **跨时段合并**:人物消失后重新出现,自动合并到同一 actor
4. **绿幕抠图** — 将人物轮廓外的区域替换为纯绿色背景
4. **抠像输出** — 将人物轮廓外的区域替换为自定义纯色背景(绿/蓝/黑/白)
5. **视频编码** — 同一 actor 的所有出场段合并为一个 MP4 文件
6. **元数据输出** — 生成 JSON 文件,记录每个 actor 的出镜时间段
@@ -29,7 +29,7 @@
- 影视剪辑:快速提取每个角色的所有镜头
- 视频分析:统计每个人物的出场时长
- 内容创作:绿幕抠图用于二次创作
- 内容创作:透明/绿幕抠图用于二次创作
- 人脸分析:按人物分组后进一步分析表情/动作
---
@@ -54,7 +54,7 @@
│ ▼ │
│ ┌──────────────┐ │
│ │ MaskTracker │ 质心距离追踪, 帧间关联 │
│ │ (帧间追踪) │ 输出: {actor_id: [(frame_idx, masked_frame, area)]}│
│ │ (帧间追踪) │ 输出: {actor_id: [(frame_idx, bool_mask, area)]} │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
@@ -179,6 +179,8 @@ pip install -r requirements.txt
### 3. 下载模型
> **模型会自动下载**:首次运行时,插件会自动检测并下载缺失的模型文件(YOLOv8 和 InsightFace buffalo_l)。如果自动下载失败,可以手动按以下步骤操作。
所有模型文件需要放到 `ComfyUI/models/video-actor-extract/` 目录下。
#### 3.1 YOLOv8 检测模型 + 分割模型
@@ -260,6 +262,8 @@ ComfyUI/models/video-actor-extract/
| `max_actors` | INT | — | `10` | 最大检测人数 (1-50) |
| `face_threshold` | FLOAT | — | `0.6` | 人脸相似度聚类阈值 (0.1-0.99)。越高越严格,越不容易误合并 |
| `min_track_length` | INT | — | `5` | 最小追踪帧数 (1-100)。低于此值的 track 会被过滤掉 |
| `skip_every_n` | INT | — | `1` | 每隔 N 帧处理一次 (1-30)。1=全部帧,2=每隔一帧,越大越快但精度越低 |
| `bg_color` | COMBO | — | `green` | 抠像背景色:`green`(绿,默认) / `blue`(蓝) / `black`(黑) / `white`(白) |
**输出**
@@ -273,18 +277,18 @@ ComfyUI/models/video-actor-extract/
```
{output_dir}/
├── actor_0.mp4 # 第一个人物的绿幕视频
├── actor_1.mp4 # 第二个人物的绿幕视频
├── actor_0.mp4 (or .webm) # 第一个人物的抠像视频
├── actor_1.mp4 # 第二个人物的抠像视频
├── ...
├── actor_info.json # 结构化元数据(所有 actor)
└── previews/
├── actor_0_0.jpg # actor_0 的第 1 张预览(按 bbox 面积降序)
├── actor_0_1.jpg # actor_0 的第 2 张预览
├── actor_0_2.jpg # ...
├── actor_0_3.jpg
├── actor_0_4.jpg # actor_0 的第 5 张预览
├── actor_0_0.png # actor_0 的第 1 张预览(按人脸面积降序,带 alpha 通道)
├── actor_0_1.png # actor_0 的第 2 张预览
├── actor_0_2.png
├── actor_0_3.png
├── actor_0_4.png # actor_0 的第 5 张预览
├── actor_0_indexes.json # actor_0 预览帧在原视频中的帧索引 [22, 32, 72, 23, 24]
├── actor_1_0.jpg
├── actor_1_0.png
├── ...
└── actor_1_indexes.json
```
@@ -317,7 +321,7 @@ VHS_LoadVideoPath → VideoActorExtractor → (隐式保存文件到磁盘)
| `images` | IMAGE | 预览图 batch `[N, H, W, 3]` (RGB, float32, 0-1)。N 通常为 5,但如果该 actor 出镜帧不足 5 帧则更少 |
| `indexes` | INT[] | 预览帧在原视频中的帧索引列表。例如 `[22, 32, 72, 23, 24]` 表示第 1 张预览图来自原视频第 22 帧 |
> 预览图按人物在画面中的 bbox 面积(近似人像/面部大小)降序排列,选取最大的 5 帧。
> 预览图按 InsightFace 检测到的人脸面积降序排列,选取人脸最大的 5 帧。仅包含成功检测到人脸的帧。
**典型连接方式**
@@ -403,12 +407,12 @@ VideoActorExtractor → SelectActorPreview → PreviewImage (查看预览图)
```
{uuid}/
├── actor_0.mp4 # 第一个人物的绿幕视频
├── actor_1.mp4 # 第二个人物的绿幕视频
├── actor_0.mp4 # 第一个人物的抠像视频
├── actor_1.mp4 # 第二个人物的抠像视频
├── ...
├── actor_info.json # 结构化元数据(所有 actor)
└── previews/
├── actor_0_0.jpg # actor_0 预览图(按 bbox 面积降序取前 5)
├── actor_0_0.jpg # actor_0 预览图(按人脸面积降序取前 5)
├── actor_0_1.jpg
├── actor_0_2.jpg
├── actor_0_3.jpg
@@ -488,9 +492,15 @@ wf = {
'video_path': 'your_video.mp4',
'max_actors': 5,
'face_threshold': 0.6,
'min_track_length': 5
'min_track_length': 5,
'skip_every_n': 1,
'bg_color': 'green',
}
},
'36': {
'class_type': 'DF_To_text_(Debug)',
'inputs': {'ANY': ['33', 1]}
},
'34': {
'class_type': 'SelectActorPreview',
'inputs': {
@@ -576,7 +586,7 @@ ComfyUI 控制台会输出详细日志:
| 人脸识别 | 依赖面部可见,全程无正面的人物会被分配独立 ID |
| 建议视频时长 | ≤ 5 分钟 |
| 建议同时人数 | ≤ 5 人 |
| 内存占用 | 全帧加载到内存,大视频需要足够 RAM |
| 内存占用 | 帧逐帧处理,但大视频仍需足够 RAM;可用 skip_every_n 降低内存压力 |
---