给一部片子换演员,听起来是图像模型最擅长的事:每个镜头取一帧,告诉模型「把这个人换成参考图里的人」,再交给视频模型动起来。我们照这个思路做了一条 AI 视频重制流水线,第一批结果里,特写镜头的人只换了发色,五官还是原片演员的;两人同框时,改动落到了另一个人身上;就算每张剧照单看都对,连成视频后颜色一帧一跳,像在放幻灯片。
这篇讲人物一致性。2026 年 10 月 26 日到 11 月 2 日这一周,这条流水线的仓库提交了 144 次,人物一致性是其中反复返工最多的部分。下面按失败出现的顺序,把每个根因、修法和实验数字摆出来。上一篇AI 重制视频为什么总是不稳定从赛道层面讲了 Agent 型流水线的不稳定根因,这篇下沉到其中最难的一个零件。
流水线长什么样
重制分四个阶段:拆解原片、按需求做资产、逐镜头生成、合成。人物一致性集中在第三阶段的「剧照」这一步:每个机位镜头取一帧,编辑成重制后的样子,作为视频模型的关键帧。
几个关键设定:
- 每个角色先做参考图。 一张正面、自然站立的全身「基础形象」,换装时每套衣服再从基础形象编辑出来,保证所有服装都是同一个人。
- 剧照用 Seedream 做图像编辑,输入是去掉字幕、台标、贴纸后的原帧,加上每个要换的人的参考图。
- 视频用 Seedance 的参考生视频(R2V),输入是这个镜头的全部剧照,加上原片片段提取出的深度视频,负责还原原片的运动和节奏。
- 画面里没有要改的东西,就不重画,清理后的原帧直接当剧照。
视频模型对人物的认识几乎全部来自剧照。剧照里换错的脸,视频会忠实地动起来;剧照之间不一致,视频会在关键帧之间硬切。所以下面六个问题全是剧照层的问题。
失败一:在深度图上重画,文字压过了画面
最早的方案(10 月 27 日提交)是让 Seedream 在深度图上重画剧照:深度图保留构图,文字描述站位,参考图给长相。思路是避免原帧里的脸「漏」进来。
10 月 29 日的剧照提示词实验否掉了它。8 轮、约 380 张剧照逐张人工复核,在其中一组 18 张剧照上,深度图方案构图保住 0/18。深度图在模型眼里只是几团灰,真正起作用的是读图文字。有一个镜头的原帧是一道背部的弧线,读图把它说成肩和胸,Seedream 就照文字画成了正面。
改为直接在清理后的原帧上编辑、只写这一帧看得见的部位怎么变之后,同一组镜头构图保住 16/18 到 18/18。后面几轮又加了三条读图规则:只写与原帧不同的部位;颜色按设计稿原话说;整体人设词只给露出全貌的部位。其中一条有个很具体的来历:读图只说某个角色「变成一个 white young man」,模型把他的头发画成了白色。之后发色必须说出颜色本身,含糊的说法直接拒收重读,用前三轮 190 条涉及头发的改动回放,27 条含糊的全部拦下,没有误拦。
失败二:只给文字,脸是另一张脸
同一份实验还有一个反直觉的数字:同一读图、同一提示词,只差有没有参考图,换人到位率无参考 12/18,有参考 8/18。参考图让编辑变保守,于是参考图被关掉了。
关掉之后的问题当天就暴露:只靠文字,每张剧照画出的都是「一张符合描述的脸」,镜头之间不是同一个人;而且原片的脸常常被保留,只是重新上了色。人物一致性的定义是「每个镜头都是参考图里那个人」,文字描述永远做不到这一点。
参考图回来的前提,是先解决失败三。
失败三:图像模型看不见名字
参考图「让编辑变保守」的真正原因,在 10 月 29 日的参考图实验里查清了。当时的编辑指令用剧中名字指人:「把某某变成 Image 2 里的人」。图像模型不知道名字和画面里哪个人对应,只能靠读图文字里偶尔带的位置去猜。有一个镜头的改动行连位置都没写,逐人编辑时就把一个角色的设计套到了站在旁边的另一个人身上。
逐人编辑实验(12 张需要同时换两人以上的剧照)把这个机制看得更清楚:
| 方案 | 全对张数(共 12) | 主要失败 |
|---|---|---|
| A 一次编辑,所有改动写在一条指令里 | 8 | 漏掉画面里最次要的人(趴着睡的、侧脸的) |
| B1 逐人叠加,无参考图 | 7 | 换错人:只写名字时,模型挑最显眼的那个人改 |
| B2 逐人叠加,带参考图 | 6 | 换错人,且参考图会把人套到错误位置 |
一次编辑时几个人的改动并列在一起,模型能互相对照分清谁是谁;拆开之后每条指令只剩一个名字,模型就挑最显眼的人。
修法是给每个人一句按画面指认的话(我们叫它 find):读帧时由 Grok 为每个人写一句「在画面哪里、原帧里看得见什么」,比如位置、发型、朝向镜头的哪一面、穿什么,不带名字,两个人不能共用一句,代码里检查。编辑指令改成「
这条规则后来又在换装参考图上踩了第二次:一套男装的参考图画成了站在他前面的女人,因为编辑指令用的是原片人物的文字描述,分不清两个背对镜头的男人。改成先读锚帧生成 find 之后,9 套服装 9/9 认对人。现在它是项目里的一条硬规则:任何把带人的画面交给图像模型的编辑,都必须按画面指人,并明说哪些东西(脸、身体、性别)不能从这张图里取。
失败四:特写里原片的脸换不掉
指人问题解决后,特写镜头仍然只换发色,五官留着原片演员的。原帧里那张脸太清晰,「保持构图」和「换成参考图的脸」两个要求冲突时,模型选了保构图。
10 月 30 日的遮脸实验在 6 个镜头上比了四组:
| 组 | Image 1 | 提示词 | 结果 |
|---|---|---|---|
| B 现行 | 清理后的原帧 | 现行 | 特写只换发色 |
| M1 | 每张脸盖黑框 | 同 B | 多人镜头黑框原样留在剧照里(指令说「其余一律不变」) |
| M2 | 同 M1 | 加一段:黑框是脸,按参考图画出来 | 脸换掉了,但大笑、尖叫、低头全变成平静正脸 |
| M3 | 同 M1 | M2 + 每张脸一句表情和视线 + 「框外的头发也换」 | 6/6 身份、表情、发色都对 |
人脸遮罩来自一个人脸检测服务,每张脸返回一个从眉到下巴的框。M3 当天上线,每张脸的表情由读帧给出(必填字段)。它也带来一个副作用:遮脸后模型在 3 张纯色 T 恤上凭空印了品牌字样,于是加了一条「没有印花的衣服不加印花」。
失败五:黑框让人移位、变形
M3 上线第二天,两人同框的特写出了问题:整块黑框让模型看不到头的轮廓、朝向和光线,只能自己猜,结果把人挪走、把两人头部的角度和仰角改掉。10 月 31 日的对照实验在 9 个特写上比了三种遮法,用「结果与原帧在 24×42 灰度下的平均差」量漂移:
| 遮法 | 平均漂移 | 最差的一个两人特写 | 一个低头的单人近景 |
|---|---|---|---|
| A 整块黑框 | 25.4 | 50.7(一人被拉远,另一人缩小) | 43.5 |
| S 缩框黑块(框的 0.7×0.88) | 23.5 | 28.5 | 27.8 |
| R 原框高斯模糊 | 19.5 | 28.4 | 20.8 |
| B 缩框内模糊 | 18.0 | 27.2 | 19.0 |
9 个镜头里没有一张留下原片的脸,模糊没有把原脸漏回来,同时保住了头的位置、侧脸角度、搭在肩上的手。漂移只能横向比较:换肤色、换发色本身也会让数字变大。
缩框模糊上线后又暴露了它自己的问题:框缩小了,额头、下颌、脸颊露在模糊区外,原片的脸型轮廓还在。当天第二版改成框上方抬高的大椭圆:宽为框的 1.3 倍、高 1.5 倍、中心上移框高的 0.05。我们用 MediaPipe 的脸部轮廓关键点在 88 张脸上量了覆盖率:
- 框内椭圆(0.8×1.0)覆盖脸部轮廓的 42%;
- 抬高大椭圆(1.3×1.5,上移 0.05)覆盖 99%,97% 的脸每一个轮廓点都在里面;
- 按脸的翻滚角旋转椭圆、按偏航角平移(用 YuNet 关键点估计),没有任何增益:检测框本来就落在它看到的脸上。
模糊半径取帧宽的 3.5%。另外两条边界条件来自一个三人镜头:检测服务没框到脸时,流水线照旧按遮脸提示词编辑,模型凭空画了一张脸并抬了头,所以没框到就走不遮脸的路径;统计框时只认服务画的黑块,画面里原有的暗区(窗帘)不算。
失败六:每张剧照一种调色,视频像幻灯片
人换对之后,R2V 的视频在关键帧之间「跳」:每次 Seedream 编辑都会按自己的口味调一次色,同一镜头的几张剧照亮度、色偏各不相同,视频模型就在它们之间硬切。
修法是把每张重画过的剧照的颜色迁回它自己的清理帧:在 Lab 空间按通道对齐均值和标准差(沿用 Reinhard 等人 2001 年颜色迁移的做法,原文在 lαβ 空间,我们换成了 Lab),只对重画过的剧照做,需求本身要求改风格时不做。37 个镜头、145 张剧照(重画 134 张)上的测量:
| 方案 | 与原帧色差 ΔE | 镜头内亮度离散 | 镜头内色偏离散 |
|---|---|---|---|
| 原帧(参照下限) | 0.0 | 10.6 | 1.3 |
| Seedream 剧照(调色前) | 9.9 | 13.4 | 1.6 |
| Lab 全量对齐(上线) | 0.4 | 10.6 | 1.3 |
镜头内离散回到了原片自己的水平,「PPT 感」主要就来自这一列。单张最夸张的一例,一张剧照亮度从原帧的 89 被编辑拉到 123,ΔE 33.3,对齐后剩 2.0。
最后一道闸:读帧纠偏与剧照校验
六个修法上线后,剩下的错误大多来自读图本身。11 月 1 日加了两件事:
- 生成前读帧纠偏。 每个镜头的剧照帧在第三阶段之前统一清理、读图,读图会指出拆解表里关于这一帧明显说错的地方(身体部位认错、哪一面朝镜头、谁在哪)。有一组连续镜头里,拆解表把一个人的背部读成了正面,视频模型被这个词反复提示,把她转了过来。现在发现错误会让 Grok 按首、中、尾三帧重写这个镜头的描述,再读一次,仍然不对就让这个镜头失败。
- 剧照校验。 每张重画的剧照交给一个轻量 DeepSeek 视觉模型,和清理帧对照:姿势、朝向镜头的一面、裁切是否保住,是否多出或丢了脸和身体部位,每个重画的人是否像参考图,是否多了字。不过就带着错因重做一次,结论记在剧照上,但不拦下视频生成。
六个根因一览
| 现象 | 根因 | 修法 | 证据 |
|---|---|---|---|
| 构图被重画、背被画成正面 | 深度图信息太少,文字压过画面 | 直接编辑清理帧,只写可见且不同的部位 | 构图 0/18 → 16–18/18 |
| 每个镜头一张新脸 | 只给文字描述 | 每个重画的人都带参考图 | 关掉参考图后脸在镜头间漂 |
| 改动落到别人身上 | 图像模型看不见名字 | 按画面指人的 find | 13 张 0 换错;换装 9/9 |
| 特写保留原片脸 | 清晰的原脸压过参考图 | 遮脸 + 每张脸的表情 | 6/6 身份、表情、发色正确 |
| 人被挪走、变形 | 黑框遮掉了头的轮廓和光线 | 抬高大椭圆内模糊 | 漂移 25.4 → 18.0;覆盖 42% → 99% |
| 视频像幻灯片 | 每次编辑各自调色 | Lab 均值方差对齐 | ΔE 9.9 → 0.4 |
我的判断:这六条里杠杆最大的是第三条。遮罩、调色都是在补图像模型的短板,find 则改的是我们自己对模型的错误假设:我们一直默认「名字」是一个可以传给模型的指针,它从来不是。参考图实验里「有参考反而更差」的结论,也是在这个错误假设下得出的,指人方式一换,结论整个反过来。
关于实验方法的三条教训
一次只动一个变量。 遮脸实验的四组只改 Image 1 和提示词开头,参考图、模型、分辨率全部不变,所以 M1 到 M3 的差别可以直接归因。反例是逐人编辑实验:那一批的读图文字来自好几个版本,较早的不带画面位置,B 组换错人全出在这类文字上,「逐人编辑更差」这个结论因此打了折扣。
每条规则都要能指出它修的那个镜头。 项目文档里每条约束后面都跟着日期和触发它的那个镜头:换错人的那个镜头、没框到脸的那个、被黑框拉远的那个、背被画成正面的那个。说不出它修的是哪个镜头的规则,就没法判断它还该不该留。R2V 提示词的精简也按这个标准做:每删一类内容先在真实镜头上 A/B,最后三个镜头的提示词从 1163/892/927 词降到 833/648/692 词,台词更干净,切点更准。
n=1 只能证明「无害」,证明不了「更好」。 上面几组实验大多每格只生成一次。剧照提示词实验里,同一份代码跑两次,有个镜头一次两张全对、一次两张全错;另一个镜头里同一个男人一次被认成甲、一次被认成乙。每组每镜头 2 张时,组间差异比同组的随机波动还小。所以我们给结论定级:样本少时只说「这样改没有变坏」,换装实验的 9/9 也只是「每组各跑一次」的 9/9。要比细调,每个镜头至少 4 张。
结论
AI 视频重制里的人物一致性,难点几乎都在剧照这一层,而且每个失败背后都是一个对模型的错误假设:深度图能锁住构图,文字能描述一张脸,名字能指向一个人,黑框只遮掉脸,每次编辑的颜色是中性的。这五个假设在 2026 年 10 月底的 Seedream 上都不成立。如果你也在做类似的流水线,我建议优先做两件事:编辑原帧而不是重画,以及按画面里看得见的东西指人。这两件改动最小,换来的却是从「换错人」到「0 换错」。遮罩和调色排在后面,它们修的是特写和连贯性。
想了解这个赛道上其他工具怎么处理人物,可以看2026 开源 AI 视频生成工具全景评测;图像生成工具本身的格局变化,见生图工具三年格局变迁。
参考资料
- ByteDance Seed — Seedream 官方页面(访问于 2026-11-02)
- ByteDance Seed — Seedance 2.0 官方页面(访问于 2026-11-02)
- ByteDance Seed — Seedance 2.5 官方页面(访问于 2026-11-02)
- Google — MediaPipe Face Landmarker
- OpenCV Zoo — YuNet 人脸检测模型
- Erik Reinhard, Michael Ashikhmin, Bruce Gooch, Peter Shirley — Color Transfer between Images,IEEE Computer Graphics and Applications 21(5)(2001-09)
- 本站 — AI 重制视频为什么总是不稳定?2026 赛道全景与两种架构的分野(2026-09-19)
- 实验数据:作者团队内部实验记录,2026-10-29 至 2026-11-01(剧照提示词 8 轮约 380 张;逐人编辑 12 张;参考图 13 张;遮脸 6 镜头;模糊对照 9 镜头;遮罩覆盖率 88 张脸;调色 145 张剧照;换装 9 套)