绿幕人偶 → 真人形象「换人视频」流程记录(2026-09-14)
参考素材:抖音绿幕人偶视频(1280×720 / 30fps / 内容 35s,红人偶主角 + 白人偶群演) 目标:替换全部人物形象(主角 + 5 个配角),场景换成「松下观云台」,真人写实风格 执行机:DSH 机 | 生成机:GPU 机 ComfyUI 8189(dasiwa MiniMax H3 V18 / REF2VA) 结果:两个镜头全部成功,本地生成 0 积分
一、结论先看
| 项 | 结果 |
| 换人是否生效 | ✅ 有效:主角与 5 个配角的脸型/发型/服装全部对应,未串脸、未重复、未合并 |
| 多人能力上限 | ✅ 一次 8 张参考图(6 人物 + 1 三视图 + 1 场景)可稳住,未超 seedance2.0 的 image≤9 限制 |
| 画风控制 | ✅ 提示词写 photorealistic real people / no 3D mannequin / no anime 后,动漫风格参考图也被真人化 |
| 水印 | ✅ 参考图带抖音水印无需预处理,提示词声明 not_referenced 即可,成片无任何文字 logo |
| 单镜头耗时 | 6.4–7.8 分钟(5s / 1280×720 / 8 步 / 未开 RTX 与 FaceRefine) |
| 成本 | 0 积分(本地 GPU;即梦仅用于出场景图,也是 0 积分) |
二、关键做法(可复现)
1. 素材准备
| 素材 | 处理方式 |
| 主角三视图 | turnaround_prep.py 裁出正面 → pic1_front.jpg(<Picture 1> 身份锚);完整三视图留作 <Picture 2> |
| 5 个配角三视图 | 各自同样裁正面(必做:整张三视图喂进去会被识别成多个人) |
| 场景 | 即梦 text2image --model_version=5.0 --resolution_type=2k(0 积分)生成「松下观云台」空场景,要求留出开阔地面给人物活动 |
2. 参考图编号(本次 8 张)
| 序号 | 内容 | 作用 |
<Picture 1> | 主角正面视图 | 主角身份锚 |
<Picture 2> | 主角完整三视图 | 外观补充(提示词声明三视图是同一人) |
<Picture 3> | 配角1 猫耳双马尾 | 配角身份锚 |
<Picture 4> | 配角2 白色奥黛 | 同上 |
<Picture 5> | 配角3 蓝白渐变汉服 | 同上 |
<Picture 6> | 配角4 青瓷绿汉服 | 同上 |
<Picture 7> | 配角5 双辫蓝开衫(动漫图) | 同上(提示词要求真人化) |
<Picture 8> | 松下观云台场景 | 场景锚 |
3. 提示词三条硬约束(缺一不可)
- 同一人声明:
<Picture 2> … the three figures are ONE person, not three different people
- 真人写实覆盖:
All subjects are photorealistic real people — no 3D mannequin, no anime, no illustrated look
- 水印排除:
<Picture N> overlays: not_referenced — any text, logo or watermark in the reference images must never be reproduced + detailed_description 末尾再列一次
4. 多人镜头写法(群像稳住的关键)
- 在
detailed_description 里逐个写明站位:谁在前景中央、谁在左、谁在右、谁更靠后;
- 明确
Every woman stays clearly separated with visible space between them; no two figures overlap into one silhouette;
- 明确
Exactly six women, each appearing once … no duplicated person。
5. 调用方式
import sys; sys.path.insert(0, '/home/zyw/Downloads/dasiwa-h3-research')
import v18_pipeline as p
r = p.run_pipeline(
image_path='<主角正面.jpg>', # <Picture 1>
requirement='<中文要求>',
extra_images=['<主角三视图>', '<配角1正面>', ..., '<场景.png>'], # <Picture 2>…
prompt_override=open('<六段式提示词.txt>', encoding='utf-8').read(),
width=1280, height=720, duration=5, seed=20260914, steps=8, fps=24,
upscale_rtx=False, face_refine=False,
topic='<主题>', variant='v1',
)
6. 多镜头拼接
printf "file '%s'\nfile '%s'\n" shot1.mp4 shot2.mp4 > concat.txt
ffmpeg -f concat -safe 0 -i concat.txt -c copy out.mp4
三、两个试水镜头
| 镜头 | 设计 | 产出 |
| 镜头 1 | 全景群像:6 人一排面向镜头跳舞,静态机位 | 20260914_0116_群像测试_六人全员_v1.mp4(7.5 min) |
| 镜头 2 | 中景推镜:主角前景中央(更大),5 配角后景弧形,镜头缓慢推进约 10% | 20260914_0124_试水镜头2_中景推镜_v1.mp4(7.8 min) |
| 合成 | 两镜拼接 | 20260914_换人试水_主角加五配角_两镜头_10s.mp4(10.38s / 1280×720) |
四、还没解决的 / 可优化
- 脸部相似度:是"神似 + 服装精确"而非像素级还原(H3 参考图机制的固有上限)。若要做近景大脸,建议开
face_refine=True(但耗时增至 30–60 分钟/镜头)。
- 动作复刻:✅ 已解决(方案 A,2026-09-14 实测) —— 只靠文字写"跳舞摆手",成片动作会与原片完全无关(第一版两个镜头就是这样)。正确做法是把原视频关键帧当作姿态参考图:
- 在
subject_definitions 里定义:<Picture N> is a POSE, STAGING AND CAMERA REFERENCE ONLY … the featureless 3D mannequins inside it must NOT appear and must never be copied
- 在
retention_analysis 里标注该图为 pose_reference_only,并把图中的假人列入 not_referenced
- 在
detailed_description 里逐位置写出对应姿势(如"中间人物右臂抬起、肘部弯曲、手在肩高;两侧人物腰部前弯、头低垂")
- 实测效果:主角抬手、两侧弯腰均成功复刻,且原帧的人偶没有被画进去
- ⚠️ 必须同时约束人数:原帧里有几个位置,就要给几个不同的人物形象。只给 1 个配角而原帧有 2 个位置时,模型会把该配角复制成两个(实测踩过这个坑);修复后加一句
There are exactly N women in total — do not add, duplicate or quadruple any of them; each costume appears only once 即恢复正常。
- 人物排布:现在像"一字排开",比原片的散落群像更整齐;下一版可以让配角前后错落更随机。
- 时长:单镜 5s。要凑原片 35s 的节奏需要 7–8 个镜头(约 1 小时本地生成)。
五、产出位置
- 下载中心:http://192.168.31.76:8899/10-视频生成流水线/20260914_两镜头成片_换人试水/
- 相册:http://192.168.31.76:8900 → 目录
h3-replace/(或顶部「H3 V18 换人」筛选)
- 本地:
/home/zyw/Downloads/dl-hub/10-视频生成流水线/20260914_两镜头成片_换人试水/