参考图里手画得清清楚楚、解剖结构正常,生成视频第一帧也还行。然后角色一伸手拿杯子、挥手、或者只是从镜头前走过——手立刻糊进袖子、跟身体融在一起、长出第六根手指,或者干脆消失八帧后再弹回来。这是当下 AI 视频最稳定复现的失败模式之一:手又小、又有关节、又动得快、还会自我遮挡,刚好是 diffusion 模型信号最少的区域。
这篇讲清楚为什么手是只在运动时坏(静止时没事)、怎么写 prompt 把翻车率压下去,以及当你没法重 roll 的时候怎么救一个镜头。
Common causes
按出现频率从高到低排。
1. 手在画面里太小,跨过了 motion blur 的临界点
手在画面里占比不到 3%、运动速度又超过模型在该分辨率下训练分布能扛的范围,就会被走样成一团 decoder 无法还原成解剖正确的手的模糊块。模型会选”像袖子”而不是”像没渲染完的手”。
怎么判断:每 4 帧暂停一次。静止时手是好的,运动段才坏,运动停了又恢复——就是这个原因。
2. Prompt 只写动作,没写手
类似”a person waves hello”或者”barista pours coffee”这种 prompt 只描述动作。模型会把动作当一个整体来理解,把手当作完成动词的工具,而不是要保住的区域。手就被牺牲给了主运动向量。
怎么判断:你的 prompt 写了动词但完全没出现 hand 或者 finger 这种名词。明确写”五根手指可见”会给模型一个可以守住的区域。
3. 手从同色调区域前面经过
手经过脸前面、躯干前面,或者和背景同色调的地方。模型对”手”和”背景”的分割只在几帧里失效,手就视觉上熔进它经过的那块区域。
怎么判断:手消失的时机正好和它跟同色区域重叠的时机对得上。让动作走高对比度路径,bug 立刻没了。
4. Image-to-video 起始帧把手藏起来了
如果参考图把手藏起来(插兜、背后、攥拳),模型就没有任何关于手指数、关节位置、手心朝向的 anchor。一旦手进画面,模型只能凭空发明,通常就发明得很糟。
怎么判断:参考帧里手是藏的,artifact 恰好出现在手第一次出现的那一刻。
5. 手握东西——手指包不住物体
笔、杯子、手机、方向盘——任何手要抓的东西。模型得同时渲染正确的握姿几何和稳定的物体尺寸。通常会输一个。手指穿过物体、杯子飘在空中、笔变形。
怎么判断:空手的时候手是好的,只有抓东西时坏。物体形状跟手指错误同步扭曲。
6. 连续手部运动段超过约 2 秒
目前大多数模型在复杂手部运动上能稳住解剖结构大约 1.5–2 秒,再长就漂移。长镜头里有持续的手部动作(打字、手语、做手势)会累积误差。
怎么判断:前 ~40 帧手是对的,然后逐渐变坏。把片段缩短问题就消失。
7. 广角镜头描述放大了手部畸变
prompt 里写”wide-angle lens""fisheye”或者”GoPro”会教模型夸张靠近镜头的元素。离镜头最近的手被拉进畸变预算里,而模型会把这种畸变渲染成解剖漂移,而不是诚实的透视。
怎么判断:去掉镜头描述、其他 prompt 词全保留,手就正常了。
Shortest path to fix
Step 1: 在 prompt 里加显式的手部语言
别只写动作。加结构 anchor:
"a barista pours espresso, both hands visible,
five fingers on each hand, fingers wrap naturally
around the cup handle, hands occupy lower-third of frame"
光是”five fingers”这一句就能让大多数模型显著减少多指 artifact,因为它给了 denoiser 一个要尊重的数字。
Step 2: 让手在画面里足够大
重构图,让运动段里手至少占画面 8–10% 的面积。手部运动是主题的镜头,中景永远比远景靠谱。
实在没法重构图,就在更高分辨率(1080p → 4K)生成再降采样。分辨率越高,模型能花在手部细节上的像素就越多。
Step 3: 别让手跟同色调区域重叠
如果动作必须让手穿过身体,改下面任意一项:
- 衣服颜色(高对比袖子 vs 背景)。
- 手的位置(从更高或更低位置穿过,避开躯干中线)。
- 灯光(轮廓光把手从背景里分出来)。
Step 4: Image-to-video 用”手可见”的起始帧
如果你做的是 image-to-video,参考帧必须显示你想要的手,在它们将要开始运动的位置。攥拳、插兜、背后藏手——这是手部漂移最大的单一预测因子。
Step 5: 拆短再拼
把一个 4 秒的手部重镜头拆成两个 2 秒、中间一个 cut。每段更短的生成都能更好地守住解剖结构,中间的干净 cut 如果动作是连续的根本看不出来。别让模型在一次 pass 里扛超过 ~2 秒的连续手部动作。
Step 6: 蒙版重生成手部区域
不能重 roll 整段时,几个工具(Runway Inpaint、Kling Local Edit)允许只对手部区域做 mask 重生成,其他部分冻住。比整段重 roll 便宜,而且保留了已经能用的部分。
Mask: hand bounding box + 20px feather
Prompt: "five-fingered hand, natural anatomy, holding cup"
Strength: 0.7 (keep some motion from original)
Step 7: 用 motion blur 或者 cut 把翻车藏掉
实在不行就在后期给坏帧加 motion blur(以手为中心做径向模糊),或者在手翻车的那 8–12 帧切到另一个机位。观众原谅一个 cut;不会原谅一只六根手指的手在屏幕上停半秒。
When this is not on you
运动中的手是当前所有前沿视频模型(Sora、Veo、Runway Gen-3、Kling、Hailuo、Pika)的共同弱点。有些镜头——比如手语、杂耍、或者快速运动中的纯手部特写——目前还做不到一次生成搞定。要绕开,而不是硬刚。
Easy to misdiagnose as
- “seed 不好”。重 roll 几乎不能修运动中的手,只是换了一组坏帧。要治本不是治随机性。
- “模型不行”。同一类运动下手在不同模型里都会坏。不改 prompt 不改构图直接换模型,通常重现同样的问题。
- “prompt 写错了”。prompt 可能没问题;问题往往在构图、时长或者起始帧的可见性——这些光靠 prompt 控不住。
Prevention
- 任何手部运动重的镜头默认用中景。
- 在手部运动的 prompt 模板里固定加上”five fingers on each hand, both hands visible”。
- 连续手部动作段控制在 2 秒以内,长镜头靠拼接。
- 用参考图起手时,绝对不要用藏手的起始姿势。
- 做一个”hand-safe”的 prompt 模块,所有角色镜头复用,跟动作描述分开。
- 接客户活的话,提前规划一个手部 cut-away 备用镜头当 B-roll。
FAQ
- 为什么手比脚翻车更多? 手关节更多、动得更快、占的画面注意力更多、训练数据方差也更大(不同袖子、手套、配件)。脚通常静止、被地板或裤子部分遮住、容忍更多畸变。
- upscale 能修手吗? Upscale 只能把已有像素变锐,凭空生不出正确解剖。720p 坏的手到 4K 还是坏的。先修生成,再 upscale。