我最早接触视频生成时,第一反应是:这有什么难的?图像生成已经那么逼真了,视频不就是一帧一帧地生成吗?每帧都是高清图,连起来就是视频。后来我看了几个早期的视频生成demo,彻底打消了这个想法。画面里一个人的脸,前一帧还是他,下一帧就变成了别人——不是长得像别人,而是整个五官结构都漂移了。这让我意识到,视频生成的关键根本不是单帧画质,而是时间维度上的连续性。

为什么逐帧生成是死路
这里有一个基础事实:图像生成模型只需要处理一个静态的二维矩阵,而视频生成模型要处理一个三维张量——宽度、高度、还有时间。别小看多出来的这个“时间轴”,它改变了整个问题的难度。
先说为什么不能直接把图像生成模型逐帧调用。你可以试着用Midjourney生成一个人走路的两帧,然后拼成动图。结果不用猜:背景忽明忽暗,衣服的褶皱像被重新画了一遍,人物走路的姿态也完全不连贯。因为每一帧都是独立的采样,模型不知道上一帧发生了什么。视频生成要做的,是让模型在生成每一帧时,同时考虑它前后帧的信息——这种约束叫做时间一致性。没有这个约束,画面就会“闪”,像一堆静态图片在快速切换,而不是一段连续的运动。
时间维度怎么塞进网络
那么,AI到底是怎么理解“动”的?答案不是像人一样学习物理规律,而是在训练数据中学习运动模式。视频数据天然包含时间维度,模型通过观察大量真实视频,学到“物体移动时像素如何变化”的统计规律。举个例子,一个球的运动轨迹,在视频中是一连串的帧,模型会学会“球在前一帧的位置,决定后一帧的位置”。这种学习是通过网络结构来实现的。
目前主流的视频生成模型,大多是在图像扩散模型的基础上扩展出来的。这里我要插一句:扩散模型是目前图像生成的主流技术,它的核心思路是从纯噪声开始,一步步去噪,最终还原成一张图像。视频扩散模型(Video Diffusion Model)把这个过程扩展到了时间维度。具体怎么做?主要有两种思路。
第一种思路:把视频当成一个三维体,用三维卷积来处理。图像是二维的,用二维卷积核滑动;视频是三维的,就用三维卷积核在空间和时间上同时滑动。听起来很直接,但三维卷积的计算量非常大,而且对时间建模并不高效——它把空间和时间一视同仁,没有区分“帧内”和“帧间”的关系。
第二种思路更巧妙:把时间维度和空间维度分开处理。这种架构叫“时空分解”。它先对每一帧做空间注意力(让每个像素看到同一帧里的其他像素),再在帧与帧之间做时间注意力(让同一位置的像素看到前后帧对应位置的像素)。这样做的好处是,模型可以分别学到“画面里的结构”和“运动的变化”。Stable Video Diffusion、Runway Gen-2等模型都是采用类似思路。
这里有一个关键的设计选择:时间注意力到底放在哪一层?有些模型在所有的空间层后面都加时间层,有些只加在特定分辨率上。这会影响模型对长距离运动的感知。比如,如果你的时间注意力只在低分辨率特征图上做,那么模型能捕捉到大的运动趋势,但细节运动(比如手指的微小动作)可能丢失。反之,如果只在高层做,大范围的位移可能不被注意到。这是一个需要权衡的问题。
训练数据才是真正的天花板
除了网络结构,还有一个更实际的问题:视频数据从哪来?图像数据可以轻松爬取几十亿张,但视频数据有几个难点:
- 第一,视频的标注质量差。图像有清晰的文字描述(比如“一只猫在沙发上”),但视频往往只有一段语音或字幕,很难自动提取出精确的运动描述。而且视频的帧数太多,人工标注成本极高。
- 第二,视频数据有强烈的时空耦合。一个视频里,背景的静态部分和前景的运动部分混在一起,模型需要学会区分它们。如果训练数据里全是静态场景的监控视频,模型学到的“运动”就会很少;如果全是快节奏的体育视频,模型又可能产生过度剧烈的运动。
- 第三,存储和计算成本高。图像生成处理一张256×256的图,计算量是百万级;视频生成要处理几十帧,计算量直接乘几十倍。这也是为什么很多视频生成模型只能在低分辨率下运行,然后用超分辨率技术放大。
再说到训练策略。图像生成模型可以直接在静态图像上预训练,然后微调到特定风格。视频生成模型能不能这样?有一个常用的技巧是“图像预训练 + 视频微调”。先让模型学会生成高质量静态图,再用视频数据微调时间层。这个方法很有效,因为它利用了图像数据的丰富性,同时只让时间层学习运动。OpenAI的Sora据分析也采用了类似思路,先有文本到图像的模型,然后扩展成视频生成。
但这里有个陷阱:如果预训练的图像模型太过强大,微调时时间层可能学不到有效的运动,而是倾向于让每一帧都“像一张好图”,结果就是视频变成了幻灯片。所以很多视频生成模型会在微调时特意加入一些视频特有的损失函数,比如光流损失,强制模型生成连续的运动。
你可能会问,光流是什么?光流是计算机视觉里描述物体运动的一种表示,它记录每个像素在相邻帧之间的位移向量。用光流做损失函数,就是让模型生成的视频的光流接近真实视频的光流,这样就能约束运动的一致性。这算是把运动显式地告诉模型。
还有一种思路是用“运动模块”来建模。有些模型会先预测一个运动场(motion field),然后基于运动场来扭曲(warp)已有的图像帧。这种方法的代表是动态视频扩散模型(Dynamic Video Diffusion),它把视频生成分成两步:先预测运动,再生成纹理。这么做的好处是运动可控,但局限是复杂的非刚性运动(比如液体流动、头发飘动)很难用简单的运动场描述。
现在到底能做到什么程度
到现在,你可能已经感觉到,视频生成的核心难点在于“时间”这个维度带来的复杂度。但“理解运动”不只是一个技术问题,它还涉及人类视觉的感知。我们看视频时,大脑会自动追踪物体的运动轨迹,如果模型生成的视频在某一帧突然跳变,即使只有几百毫秒,人眼也能立刻察觉。这就是为什么视频生成对帧间一致性的要求比图像生成对像素级一致性的要求高得多。
那么,现在的视频生成模型到底能做到什么程度?我个人的观察是:短片段(2-4秒)的简单运动已经做得很好了,比如物体旋转、相机平移、人物简单走路。但如果涉及复杂的物理规律,比如杯子掉在地上碎掉,或者水花飞溅,模型常常会犯错——不是因为它不懂物理,而是因为它从训练数据里学到的这种场景太少了,或者它学到的统计规律不足以精确预测每一帧的物理过程。
这里我想分享一个我自己的困惑。之前我一直以为,视频生成模型之所以生成不了复杂物理,是因为计算资源不够,或者模型容量不够。直到我看了一篇关于视频生成中物理规律的研究,才意识到问题出在训练数据本身:真实的视频数据里,物理事件发生的概率是长尾分布的。杯子碎掉、水花飞溅这种极端事件,在互联网视频中非常罕见,所以模型根本没机会学到足够的例子。也就是说,不是模型不会,是它没见过。
这是一个很重要的认知:视频生成模型的能力边界,很大程度上由训练数据的分布决定,而不只是模型架构或算力。这跟图像生成是不同的——图像数据几乎覆盖了所有常见物体和场景,但视频数据对“动态事件”的覆盖度远不如静态图像那么全面。
如果你问我,视频生成和图像生成在技术难度上差多少?我会说:图像生成是“空间上的生成”,视频生成是“时空上的生成”。时间维度不是简单的叠加,它引入了连续性、因果性和物理规律的约束。这就像从画一幅画到导演一部电影,难度不是一个量级的。
视频和图像,差的不只是长度
最后,给出我的判断。当前视频生成模型已经跨越了“能动”的门槛,但离“动得合理”还有距离。主要瓶颈有三个:
- 训练数据对动态事件的覆盖不足,尤其是罕见的物理现象
- 时间维度的建模还不够高效,现有架构在长视频生成时计算量爆炸
- 缺乏对运动语义的显式理解,模型只是统计地拟合了运动模式,而不是真正地理解“为什么会这样动”
未来几年,我估计会看到更多利用视频-文本联合训练、以及引入物理模拟器辅助数据生成的技术,来弥补这些短板。但在那之前,如果你用视频生成模型做一个复杂运动的片段,它翻车了,不要惊讶——它不是在故意骗你,它只是没见过那个场景而已。
这就是视频生成和图像生成最大的区别:图像是记忆,视频是想象。模型通过数据记住了一个个静态的世界,但要生成视频,它必须想象这个世界是如何随时间流动的。而想象,永远比记忆难。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/192.html