做到第四篇,你已经能控制一张图里是谁、什么味道、什么构图。把同一张图丢进视频工具,出来的常常是另一回事:整段像在轻微抖动,前两秒还像本人,第三秒开始五官挪位,最后一秒直接糊掉。
这不是提示词没写好。视频模型比图像模型多担了一件图像模型从不需要操心的事:让每一帧都跟其他帧对得上。这一篇把它拆开,说清一致性靠什么维持,以及为什么时长或运动强度往上一推,闪烁、漂移和结尾崩坏就一起冒出来。
一张图里,自洽是免费的
上一篇讲人物一致性时说过:脸不是从档案里调出来的,是每次去噪当场长出来的。这里要再推一步。
生成一张图的时候,整块画布是 在同一次去噪过程里一起被决定的,任何一个位置都能看向其他任何位置——这就是注意力在做的事。所以头发的颜色和脸的颜色不会打架,它们本来就是一起定下来的。第三篇讲的参考图泄漏,其实是同一机制的另一面:位置之间互相看得太充分,才会把主体和风格搅在一起。
也就是说,单张图片内部的一致,你从来没操心过,因为它是免费的。
最笨的做法,正好暴露出要补什么
偷懒一下:把 5 秒、每秒 24 帧的一段视频拆成 120 张图,一张一张单独生成3。每一张都会很漂亮、都会自洽,但彼此毫无关系——第 17 帧的人在看左边,第 18 帧可能已经在看右边。连起来播放就是闪烁。
这个失败直接指明了要补的东西:在帧与帧之间加一条通道,让某一帧的某个位置能看见其他帧的同一个位置。
这条通道叫跨帧注意力(temporal attention)。做法是把帧那一维重新排成序列,让 同一个空间位置上的 120 帧排成一队互相看;而原来的空间注意力正好反过来,把一帧里的所有位置当成序列,把帧当成批次1。
两种注意力分工明确:空间注意力决定每一帧内容够不够丰富多样,跨帧注意力决定帧与帧之间够不够一致2。只加前者,你得到一堆好看的散图;只加后者,你得到一段平滑但没有内容的糊。
一致性是在压缩过的时间里维持的
还差一个成本问题。5 秒、512×512 的视频,每帧有 万个颜色值,120 帧加起来接近一亿个数字3,在原始像素上做扩散根本做不动。
于是视频 VAE 把图像那套潜空间思路往时间轴上再推一格:空间上每 8×8 个像素压成一个点,时间上再每 4 帧压成一帧,两个方向乘起来,体积压掉两百多倍3。
这带来一个容易忽略的好处:4 帧像素必须共用同一个潜帧编码,解码器就被逼着从一段编码里还原出平滑过渡的 4 帧——短程的连贯还没等扩散模型动手,就已经被压出来了3。于是模型真正要管住的,不是 120 帧像素怎么对齐,而是那 30 来个潜帧怎么对齐。压缩和一致,是同一根杠杆。
起始帧既是锚,也是刹车
既然一致这么贵,为什么工具都在推图生视频?因为起始图是一根现成的锚:它的编码被拼到每一帧的噪声潜变量旁边,每一帧都能回头看那个干净的、不会变的第 0 帧3,身份、光线、构图都有参照。
但锚给得越重,运动被压得越死。研究者在注意力图上看到了原因:生成帧把过多注意力分给参考帧,参考图的外观沿时间轴被过度传播,帧与帧之间本该发生的互动被削弱,结果即使提示词里明明写了动作,视频依然偏静78。
这正是上一篇“保真度和可编辑性互相拉扯”那根杆,在时间轴上换了个名字。也正因如此,很多工具干脆把运动做成一个纯数值旋钮,比如早期模型 Stable Video Diffusion 的 motion_bucket_id,取值 1 到 255,跟“动的是什么”无关,只管“动多少”4。
时长一放大,漂移就开始累积
漂移有个典型形态:它不在第一秒出现,而在第三秒、第六秒之后才显形。
每一帧都有出错的机会,这些小误差会沿着时间一路传下去、叠起来。所以 “越到后面越不像”是累积的结果,不是模型突然忘了。这也决定了对策方向:身份开始漂的时候,缩短时长通常比改提示词有用——漂移是随时间累积的,不是随字数累积的5。
第二个原因是时间距离:跨帧注意力要维持“第 1 帧和第 120 帧直接对得上”,比 16 帧内部对齐难得多。而模型大多是在 5 到 10 秒的片段上训练的:Veo 3.1 单次生成 8 秒,Kling 3.0 是 5 到 10 秒,Sora 2 的 API 是 4/8/12 秒6。
第三,“接续”不等于“生成了更长的视频”。延长功能是拿上一段的尾巴当新起点往下生成,误差被当作起点继承下来,再往下放大。常见的现象是第一次延长还能看,第二次身份就崩了9。
运动强度一放大,就会熔化
跨帧注意力和时间压缩合起来,其实是在要求一件矛盾的事:相邻两帧必须几乎一样,可整段又得动起来。运动只能在“每帧只挪一点点”的约束里完成。
把运动强度调高,等于允许每帧跨更大的距离。模型没法再靠相邻帧的相似性偷懒,必须更频繁地编造新细节,编错的机会随之上升——表现出来就是变形、熔化、身份跑掉。使用者的经验区间大致是:人脸和产品 0.3 到 0.5,环境 0.5 到 0.7,而默认值往往偏高9。
于是一条好记的配方:高运动 + 长时长 + 复杂主体,是崩坏的标准组合。
有一种比拉长单次生成更可控的做法:把首帧和末帧都用图钉住,让模型在两图之间做内插,而不是自己编一个终点10。代价是你得先造出第二张与第一张风格连贯的图;而且首尾帧、运动笔刷、镜头运动预设这几类控制常常互斥,一个片段里通常只能选一种10。
结尾那半秒为什么最先烂
多数模型在最后 0.5 到 1 秒会明显掉质量6。和跨帧注意力不同,这一条我没有找到统一、确凿的机制,不同模型的原因可能并不一样。能确定的是:越靠后的帧累积的错误越多,而它身后已经没有帧可以对照、把偏差拉回来。所以最省事的处理是多生成一两秒,剪掉尾巴。
落到手上的判断
第一,先问主体是否必须特定。 必须特定,就走图生视频,让起始帧锚住外观;不特定才用纯文字。用图生视频时,提示词只写运动和镜头,别再把主体描述一遍——那等于邀请模型重新解释一个你已经给它的东西5。
第二,先定时长。 先用 5 秒试动作,判断得起来再加长。
第三,出问题先调数值,再改文字。 画面熔化先降运动强度,身份漂移先缩时长。写动作要写有方向、有主体、有快慢的移动,别写“动感”“电影感”这类感觉词——那只会让模型取一个平均值6。
最后一句边界:本篇出现的型号、时长规格和数值区间,是写作时查到的当前情况,变得很快;而机制层面那三件事——跨帧注意力、时间上的压缩、起始帧的过度主导——短期内不会变。