夜深人静,你坐在书桌前,想拍一支“宇宙飞船掠过城市上空”的短片。你没有演员、没有摄影棚,只有一句话。于是你打开 AI 视频生成工具,输入这行文字,几十秒后,一段带有镜头运动、光线变化的动态画面出现在屏幕上。这就像你成立了一家“虚拟剧团”——不需要真实演员,只需要把剧本交给剧团的总导演,他就能指挥一支由算法组成的团队,把文字变成一场完整的演出。这家剧团既能拍猫追毛线球的生活小品,也能制作史诗级的科幻大片;既能输出 15 秒的竖屏短视频,也能生成 60 秒的电影级长镜头。从“看懂剧本”到“安排走位”,再到“控制演多久、画面多清晰”,每一步背后都有一套精密的算法在忙碌。 本文将带你走进这座 AI 剧场,用“文字指挥一支虚拟剧团”的故事,从视频生成的概览讲起,逐步拆解文生视频的完整流程、时空扩散模型如何“洗”出清晰画面、视频自回归如何一幕接一幕地“拍戏”、光流如何调度走位、时长与分辨率如何控制,再看王牌导演 Sora 的三大秘诀,最后聊聊把模型部署到生产环境时的工程技巧。全程不用公式吓人,每个概念都有生活化类比。

岗位关联

学完本文,你将掌握视频生成的核心技术脉络(文本条件生成、时空扩散、自回归、运动建模、时长控制、Sora 方法、部署优化),能看懂主流文生视频模型的原理与工程取舍,为短视频创作、广告生成、影视预演等场景的开发与落地打好基础。

目录
  1. 可视化演示
  2. 视频生成概览
  3. 文生视频流程
  4. 时空扩散模型
  5. 视频自回归
  6. 运动建模
  7. 时长与分辨率
  8. Sora方法
  9. 部署与优化
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

动态演示AI视频生成的核心机制,通过总览/传输/转换/输出四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

AI视频生成:视频生成 视频生成任务概述与生成范式 时空扩散模型与时间维度建模 核心机制可视化 AI视频生成整体架构与关键组件

视频生成概览

这家“虚拟剧团”的本质,是让机器学会“文字 → 动态画面”的映射。与图像生成不同,图像生成要回答“画面里有什么”,相当于拍一张照片;视频生成要回答“画面如何随时间变化”,相当于拍一段戏。因此,视频模型不仅要学会每个瞬间的构图,还要学会“刚才发生了什么、接下来会发生什么”,这就是它比图像生成难一个量级的原因。

目前主流路线有两条。一条是“扩散派”:从一团随机噪点开始,一步步“显影”,最终还原出符合文字描述的连续画面,被称为时空扩散模型;另一条是“自回归派”:把视频拆成许多小块,像翻页动画一样一帧接一帧地预测下一块内容。两派各有千秋,Sora 则把前者的表现力推向巅峰。整个生成过程可以形式化为一个条件概率:

搞清楚了“剧团是干什么的”,下一步就是看剧本如何变成真正的演出——从文本到视频的完整流程,就像总导演拿到剧本后开始安排演员试镜。

P(V∣T)P(V \mid T)
这行公式读作“给定文字剧本 $T$,生成视频画面 $V$ 的概率”——剧团开演前,总导演先估算按这份剧本演出的“成功率”。
  1. 视频变量 $V$$V$ 代表最终生成的视频,它不是一个画面,而是一连串随时间排列的帧,相当于整场演出的录像带。
    V=(v1,v2,…,vt)V = (v_1, v_2, \dots, v_t)
  2. 文本条件 $T$$T$ 是用户的文字提示,相当于剧团的剧本;视频生成的任务就是让 $T$ 与 $V$ 建立联系。
    T=a cat chasing a ballT = \text{a cat chasing a ball}
  3. 条件概率 $P(\cdot \mid \cdot)$竖线表示“在……的前提下”,$P(V \mid T)$ 强调视频不是凭空产生,而是被文字“牵着走”。
    P(V∣T)≠P(V)P(V \mid T) \neq P(V)

文生视频流程

总导演拿到剧本,不会直接开拍。他先通读剧本、理解人物与场景,这叫“文本编码”;再把理解到的信息下达给摄影、灯光、演员各部门,这叫“条件注入”;最后一遍遍排练,直到画面从模糊到清晰,这叫“去噪生成”。文生视频系统的工作流程,就是这台运转有序的导演机器。

第一步,文本编码。原始文字无法被神经网络直接理解,需要先通过 CLIP 或 T5 这样的预训练语言模型,把“一只橘猫在夕阳下追毛线球”变成一串高维向量,向量里浓缩了语义、风格、物体关系。第二步,条件注入:文本向量通过交叉注意力机制融进生成网络的每一层,相当于导演在每个环节都叮嘱“别忘了主角是猫,光线是夕阳”。

第三步,去噪生成。视频模型通常先在“潜空间”里工作——一个被压缩的抽象空间,类似于把高分辨率胶片先转成草稿纸。模型从纯噪声出发,按时间步反复去噪,每一步都参考文本条件,最终得到干净的潜变量,再通过解码器还原成像素级视频帧。这一步可用公式表示:

剧本经过“读懂 → 传达 → 排练”三个阶段,最终被搬上舞台。但“排练”到底靠什么机制在一团噪声中还原出画面?答案就是下一节的主角——时空扩散模型。

zt−1=UNet(zt,t,Emb(T))z_{t-1} = \text{UNet}(z_t, t, \text{Emb}(T))
它表示:拿着第 $t$ 步的“毛坯画面” $z_t$,配合时间进度 $t$ 和剧本向量 $\text{Emb}(T)$,去噪网络 UNet“显影”出更清晰的一步 $z_{t-1}$——排练每进行一轮,画面就更接近正式演出。
  1. 剧本向量 $\text{Emb}(T)$$\text{Emb}$ 是编码器,把文字 $T$ 变成模型能计算的向量,相当于导演心中对剧本的“理解笔记”。
    Emb(T)∈Rd\text{Emb}(T) \in \mathbb{R}^{d}
  2. 带噪画面 $z_t$$z_t$ 是第 $t$ 步的潜变量,噪声还很重,像排练时演员站位模糊的远景镜头。
    zt∼N(0,I)z_t \sim \mathcal{N}(\mathbf{0}, \mathbf{I})
  3. 去噪主力 $\text{UNet}$UNet 是一种擅长“去噪还原”的神经网络,输入当前画面、时间步和文本向量,输出更清晰的画面;在视频模型中它往往升级为 3D 版本,同时处理空间与时间。
    UNet:(zt,t,Emb(T))↦zt−1\text{UNet}: (z_t, t, \text{Emb}(T)) \mapsto z_{t-1}

时空扩散模型

剧团排练时,演员不仅要站对位置(空间关系),还要在时间上接得住戏:上一秒抬脚,下一秒必须落地。视频扩散模型在潜空间里做的,正是这种空间与时间的双重排练。它把视频看作一个三维数据块,横轴是空间(高度、宽度),纵轴是时间(帧数),训练时往这个三维块里逐步加噪,推理时再一步步把噪声“洗”掉。

在图像扩散里,噪声只是“画面上的雪花点”;在视频扩散里,噪声同时落在空间和时间两个维度上,形成三维高斯噪声。模型中最关键的部件是“时空注意力”:空间注意力关注同一帧内像素之间的关联,比如猫的耳朵和尾巴属于同一只猫;时间注意力关注相邻帧同一位置的像素变化,比如猫的尾巴从上一帧翘起到这一帧落下。两者交替工作,保证画面既清晰又连贯。

训练阶段,模型学习“给定任意噪声强度,如何还原原始视频”。前向加噪过程有明确的数学形式:

把视频塞进“三维噪声缸”里反复浸泡,再练出一手熟练的“去噪手艺”,这就是时空扩散模型。但这类方法一次生成整段视频,计算量惊人;另一派“自回归”则换了个思路——像连载漫画一样,一幕一幕慢慢画。

q(zt∣z0)=N ⁣(zt; αˉt z0, (1−αˉt) I)q(z_t \mid z_0) = \mathcal{N}\!\left(z_t;\, \sqrt{\bar{\alpha}_t}\, z_0,\, (1-\bar{\alpha}_t)\,\mathbf{I}\right)
它描述:把干净视频 $z_0$ 和随机噪声按比例混合,$\bar{\alpha}_t$ 控制保留多少原始信息、掺入多少噪声。$t$ 越大画面越花,$t$ 越小越接近原片。
  1. 干净视频 $z_0$$z_0$ 是未经污染的潜空间视频,相当于剧本的“完美演出”。
    z0=Encode(Vclean)z_0 = \text{Encode}(V_{\text{clean}})
  2. 调度系数 $\bar{\alpha}_t$$\sqrt{\bar{\alpha}_t}$ 是原信号的保留比例,$t$ 越大 $\bar{\alpha}_t$ 越小,原始画面被冲得越淡。
    0≤αˉt≤1,αˉt→00 \le \bar{\alpha}_t \le 1, \quad \bar{\alpha}_t \to 0
  3. 噪声方差 $(1-\bar{\alpha}_t)\mathbf{I}$方差控制噪声的“汹涌程度”;当 $t=T$ 时,$z_T$ 几乎就是纯噪声,相当于排练场上完全失控的即兴表演。
    zT≈N(0,I)z_T \approx \mathcal{N}(\mathbf{0}, \mathbf{I})

视频自回归

经费有限的剧团请不起整场排练,改为“边演边拍”:先拍第一幕,再根据第一幕的结尾接第二幕,像连载漫画一样。视频自回归模型就是这个思路——它不一次生成整段视频,而是把视频切成小“令牌”(可以理解成积木块),一个接一个地预测下一块,每预测一块都参考前面已经生成的所有块。

第一步,把视频“令牌化”:可以使用 VQ-VAE 之类的模型把视频压缩成离散编码,每个编码对应一个小视频块。第二步,逐步预测:用 Transformer 等序列模型,已知前 $i-1$ 个块,预测第 $i$ 个块的概率分布。整个过程用链式法则表达就是:

自回归的最大优点是天然处理任意长度,像连载小说可以一直续写;最大痛点是误差累积——前一块出错了,后面所有块都会跟着跑偏,如同第一幕把主角写成“猫”,第二幕却画成了“狗”,后面剧情再怎么圆都难以自洽。所以很多系统采用“混合方案”:先用自回归规划每段的关键帧,再用扩散模型细化每一帧细节,长短互补。不过,无论哪种路线,“让画面动得自然”都离不开专门的运动建模——那是剧团里负责走位调度的副导演。

P(V∣T)=∏i=1NP(vi∣v1:i−1, T)P(V \mid T) = \prod_{i=1}^{N} P(v_i \mid v_{1:i-1},\, T)
它说:整段视频出现的概率,等于每一块“在看过前面所有块之后”出现概率的乘积——像导演按顺序给每场戏写分镜,后一场永远基于前面的剧情。
  1. 视频分块 $V=(v_1,\dots,v_N)$把整段视频切成 $N$ 个小块,每块是几帧或一小片时空区域。
    V={v1,v2,…,vN}V = \{v_1, v_2, \dots, v_N\}
  2. 历史上下文 $v_{1i-1}$:表示从第 1 块到第 $i-1$ 块的全体,是预测下一块的“记忆”。
    v1:i−1=(v1,v2,…,vi−1)v_{1:i-1} = (v_1, v_2, \dots, v_{i-1})
  3. 连乘 $\prod$将每一步的条件概率相乘,块越多乘积越小,体现“整段视频连贯出现其实极其困难”。
    ∏i=1NP(⋅)=P(v1)⋅P(v2∣v1)⋯\prod_{i=1}^{N} P(\cdot) = P(v_1)\cdot P(v_2\mid v_1)\cdots

运动建模

观众最在意的不是画面多精致,而是“动得顺不顺”。现实中,剧团要专门安排一位副导演负责走位:演员从舞台左侧走到右侧,中间不能瞬移。AI 视频里,这位副导演叫“运动建模”——它的任务是确保每一帧物体位置的变化是平滑、物理合理的。

最常见的技术之一是“光流”(Optical Flow)。光流是逐像素的运动向量场:上一帧的猫鼻子在坐标 (10, 20),这一帧到了 (12, 20),那么光流就记录这个 (2, 0) 的位移。训练时,模型可以额外预测一帧光流,然后计算与真实光流的差距,把它作为一项损失函数:

除光流约束外,许多模型增加了运动模块(Motion Module),在潜空间里对相邻帧的隐向量做时间卷积或时间注意力,直接学习“下一帧怎么变”。还有一些方法在训练时随机裁剪或遮蔽部分帧,迫使模型根据前后帧自己脑补中间的运动。三者配合,能大幅减少闪烁、鬼影、跳帧等问题。

副导演把每个角色的走位都安排得明明白白,演出终于“动起来了”。可是客户马上提出新需求:这段戏要 10 秒还是 30 秒?画质要 720p 还是 4K?这就轮到“时长与分辨率控制”这位剧场技术总监上场了。

Lflow=∥F^−F∥22\mathcal{L}_{\text{flow}} = \left\| \hat{F} - F \right\|_2^2
它衡量“模型猜的走位”和“真实走位”差多少。差值越小,说明运动越自然;这个损失被加入总损失,倒逼模型学会“合理走位”。
  1. 真实光流 $F$$F$ 是通过算法预计算出的像素运动场,是走位的“标准答案”。
    F=FlowExtract(vt,vt+1)F = \text{FlowExtract}(v_t, v_{t+1})
  2. 预测光流 $\hat{F}$$\hat{F}$ 是模型自己估计的运动场,相当于副导演凭经验猜的走位。
    F^=Model(vt,T)\hat{F} = \text{Model}(v_t, T)
  3. 二范数平方 $\|\cdot\|_2^2$把所有像素的误差平方后求和,放大“离谱走位”的惩罚。
    ∥F^−F∥22=∑p(F^p−Fp)2\|\hat{F} - F\|_2^2 = \sum_{p} (\hat{F}_p - F_p)^2

时长与分辨率

虚拟剧团接的活五花八门:短视频平台要 15 秒竖屏,广告主想要 60 秒横屏。技术总监要解决两件事:演多久(时长)和画面多清晰(分辨率)。时长由“总帧数”决定,分辨率由“每帧像素”决定。

先说帧数控制。视频生成模型通常在固定帧数上训练(比如 16 帧),推理时如果要 5 秒 @24fps,就需要 120 帧。直接从 16 帧模型生成长视频往往会内容漂移。常见做法是“滑动窗口”生成:生成前 16 帧,取尾部若干帧作为下一段的起点,再生成后续帧;或训练时采用多时长采样,让模型学会适应不同帧数。目标帧数可以简单计算:

再说分辨率(清晰度)。直接生成 4K 视频对显存是灾难,于是诞生了“级联生成”:先用基础模型生成低分辨率底稿,再用超分模型放大,再用插帧模型补充中间帧。比如生成 16 帧 256×256 的视频,通过级联变成 64 帧 1024×1024 的高清流畅视频。这就像舞台剧先彩排走位(低清),正式演出再上灯光服化道(高清)。

时长和分辨率是用户最直观的体验,也是成本与质量的博弈。而把这场博弈玩到极致的,是一家叫 OpenAI 的“王牌剧团”——它的 Sora 方法重新定义了视频生成的上限。

Ftarget=⌊Tdur×FPS⌋F_{\text{target}} = \lfloor T_{\text{dur}} \times \text{FPS} \rfloor
它说:先把用户要的秒数 $T_{\text{dur}}$ 乘以帧率 FPS,算出总帧数,再向下取整得到整数帧——好比导演根据演出时长倒推需要拍多少张胶片。
  1. 目标时长 $T_{\text{dur}}$用户指定的视频长度,单位是秒。
    Tdur=5T_{\text{dur}} = 5
  2. 帧率 $\text{FPS}$每秒播放多少帧,影视标准常见 24、30、60。
    FPS∈{24,30,60}\text{FPS} \in \{24, 30, 60\}
  3. 向下取整 $\lfloor \cdot \rfloor$帧数必须是整数,$\lfloor 5 \times 24 \rfloor = 120$。
    Ftarget=⌊120.0⌋=120F_{\text{target}} = \lfloor 120.0 \rfloor = 120

Sora方法

2024 年,OpenAI 发布 Sora,能用一段简单文字生成一分钟高度逼真的视频,被视为“视频生成的 GPT 时刻”。Sora 为什么这么强?总结起来三招:视频压缩网络、Patch 标记化、扩散 Transformer。用比喻说,它把整个舞台改造成了“乐高积木”系统。

第一招,视频压缩网络。高清视频数据量爆炸,Sora 先训练一个“视频压缩网络”,把原始视频像素压缩成低维潜空间表示。相当于把整场演出压缩成一份简练的“舞台调度表”,计算量骤减。第二招,Patch 标记化。压缩后的隐变量被切成统一大小的时空块(Patch),每个 Patch 类似一个“乐高积木块”,携带一小段空间和时间信息。Patch 让 Transformer 能处理任意分辨率、任意时长——就像乐高积木无论大小都能拼装,让 Sora 天然支持 1080p 和竖屏。

第三招,扩散 Transformer(DiT)。Sora 不使用传统的 U-Net 去噪网络,而用 Transformer 架构在“积木序列”上执行扩散去噪。Transformer 的全局注意力让每个 Patch 都能与整段视频的其他 Patch 互动,因而对长程运动、物体恒常性把握极强。Sora 还验证了一条“尺度定律”:

Sora 的成功不仅是算法突破,更展示了“压缩 → 分块 → 全局建模”的系统工程哲学。话说回来,再强的模型也要落地赚钱。把 Sora 这类大模型部署到真实业务里,剧场运营的难题才刚刚开始。

L(C)∝C−α\mathcal{L}(C) \propto C^{-\alpha}
意思是:训练算力 $C$ 越大,生成质量损失 $\mathcal{L}$ 下降得越快($\alpha > 0$)。这给了业界一个清晰信号——视频生成是“大力出奇迹”的赛道。
  1. 算力 $C$训练时 GPU 浮点运算总量,单位可视为 FLOPs。
    C=compute_budgetC = \text{compute\_budget}
  2. 损失 $\mathcal{L}$衡量生成视频与真实视频的差距,越小越好。
    L=E[∥Vpred−Vtrue∥2]\mathcal{L} = \mathbb{E}[\|V_{\text{pred}} - V_{\text{true}}\|^2]
  3. 幂律关系 $\propto C^{-\alpha}$损失随算力的 $\alpha$ 次幂下降,说明“堆算力”能实打实换质量。
    ln⁡L=−αln⁡C+const\ln \mathcal{L} = -\alpha \ln C + \text{const}

部署与优化

剧团哪怕请来了王牌导演,票卖得太贵、出片太慢,观众照样不买单。AI 视频系统上线,同样要过“成本、速度、质量”三座大山。视频生成是出了名的计算“吞金兽”:一次生成 5 秒 720p 视频,可能要跑几十上百次网络推理。

第一招,模型压缩。把 FP32 权重量化成 FP16 或 INT8,模型体积减小、推理提速;知识蒸馏让小模型模仿大模型的输出,在质量损失可控的前提下大幅降本。第二招,推理加速。利用扩散模型的“步数-质量”特性,采用少步采样器(如 DPM-Solver)把去噪步数从几百步压到几十步;再用缓存机制复用中间特征,避免重复计算。延迟可以抽象成下面这个关系:

实际部署还需要因地制宜:短视频批量生成场景追求吞吐,可以牺牲少量画质换取单价下降;影视预演追求质量,允许分钟级等待。工程上常见的方案是“灰度分级”——把模型拆成基础帧生成、插帧、超分三段,分别部署到不同规格的 GPU 上,按需调用。

至此,“文字指挥虚拟剧团”的台前幕后我们都走了一遍:从成立剧团(概览)、读懂剧本(流程)、三维排练(时空扩散)、一幕幕拍摄(自回归)、走位调度(运动建模)、时长画幅控制,到王牌导演 Sora 的秘诀和剧场运营之道。希望下次你在输入框里敲下一行文字、看着画面缓缓浮现时,能想起舞台幕后这群忙碌的“工作人员”。

Latency=FLOPsη⋅Throughput\text{Latency} = \frac{\text{FLOPs}}{\eta \cdot \text{Throughput}}
它说:用户等待时间等于一次推理的总计算量,除以 GPU 的吞吐能力,再除以一个利用率 $\eta$。压缩减少了分子,加速方法提高了分母,两头用力延迟才降得下来。
  1. 计算量 FLOPs一次视频推理所需的浮点运算总数,模型越大它越大。
    FLOPs∝参数×像素×步数\text{FLOPs} \propto \text{参数} \times \text{像素} \times \text{步数}
  2. 吞吐 ThroughputGPU 每秒能完成的浮点运算量,受硬件限制。
    Throughput=GPU 算力\text{Throughput} = \text{GPU 算力}
  3. 利用率 $\eta$实际运行效率,$0<\eta\le 1$;量化、算子融合能提高 $\eta$,内存搬运和 IO 等待会降低它。
    η=有效计算总耗时×峰值算力\eta = \frac{\text{有效计算}}{\text{总耗时} \times \text{峰值算力}}

AI 应用场景

短视频创作加速

阶段:内容生成与初稿制作

解决的问题:传统短视频创作需要实拍、找素材、剪辑,一条 3 分钟以上的视频往往耗时数小时;AI 文生视频可在几十秒内生成动态背景、转场镜头或概念片,创作者只需写提示词就能获得初稿,大幅降低试错成本。

具体案例:某知识类短视频博主用文生视频模型为口播稿件生成“代码流动”“城市夜景”等动态背景,一条视频的背景制作从 2 小时缩短到 10 分钟,日更压力明显下降。

电商广告动态素材

阶段:定向生成与素材批量化

解决的问题:电商大促需要大量不同商品、不同卖点的广告短视频,传统拍摄成本高、周期长;AI 按商品描述批量生成“产品展示 + 动态光效”素材,支持快速迭代文案。

具体案例:某美妆品牌在 618 大促前用文生视频为 30 款商品生成 15 秒动态广告,配合模板化提示词,素材制作成本下降约 70%,点击率与实拍素材持平。

影视分镜预演

阶段:前期可视化与创意评估

解决的问题:导演往往需要把剧本文字转化为可视化分镜,传统方式需手绘或三维建模预演,成本极高;AI 文生视频可以快速把关键场景变成动态预览,帮助主创评估镜头调度和节奏。

具体案例:某短剧团队在开拍前用 AI 生成关键场景的动态预演,发现“追逐戏”镜头切换过密,及时调整分镜,节省了现场重拍费用。

Python 演示

python47 行
import numpy as np H, W, F = 32, 32, 12  def get_target(t):    img = np.zeros((H, W))    cy, cx = H / 2, int((t / (F - 1)) * (W - 8) + 4)    for i in range(H):        for j in range(W):            if (i - cy) ** 2 + (j - cx) ** 2 <= 9:                img[i, j] = 1.0    return img  def blur(img, k=3):    p = k // 2    pad = np.pad(img, p, mode="edge")    out = np.zeros_like(img)    for i in range(H):        for j in range(W):            out[i, j] = pad[i:i + k, j:j + k].mean()    return out  def generate_video(steps=15):    frames = []    for f in range(F):        target = get_target(f)        noisy = np.random.normal(0, 0.8, target.shape)        for s in range(steps):            noisy = noisy + 0.35 * (target - noisy)            noisy = blur(noisy)        frames.append(np.clip(noisy, 0, 1) * 255)    return frames  if __name__ == "__main__":    frames = generate_video()    try:        from PIL import Image        imgs = [Image.fromarray(f.astype(np.uint8)) for f in frames]        imgs[0].save("video_gen_demo.gif", save_all=True,                     append_images=imgs[1:], duration=120, loop=0)        print("已生成 video_gen_demo.gif, 共 %d 帧" % len(frames))    except ImportError:        print("PIL 不可用, 帧数 %d, 帧形状 %s" % (len(frames), frames[0].shape))
目的:用 numpy 模拟一个极简的“文生视频”去噪过程——目标是一个从左向右移动的圆(象征演员走位),每一步把噪声画面向目标拉近 35%,并做一次平滑模糊,迭代 15 步后输出 12 帧“清晰视频”,最终打包成 GIF。
  1. def get_target(t):定义第 t 帧的目标画面:一个移动的圆,对应剧团里的“标准走位”。
  2. noisy = np.random.normal(0, 0.8, target.shape)初始化纯噪声画面,对应时空扩散里的“噪声起点”。
  3. noisy = noisy + 0.35 * (target - noisy)每步向目标靠近 35%,模拟去噪网络逐步还原画面的过程。
  4. noisy = blur(noisy)去噪后做局部平滑,模拟空间建模让画面更自然。
  5. frames.append(np.clip(noisy, 0, 1) * 255)把浮点帧转成 0-255 像素灰度并保存,完成“解码”。
  6. imgs[0].save("video_gen_demo.gif", save_all=True,用 PIL 把 12 帧连成 GIF,模拟最终视频输出。
  7. if __name__ == "__main__":程序的执行入口,保证被 import 时不自动跑。

常见误区

误区我以为视频生成就是拿文生图模型逐帧生成 24 张图片,再把它们合成一个 GIF 就行了,反正每帧都好看。

正解逐帧独立生成会出现严重的时间闪烁:同一只猫每帧的毛发纹理、位置都可能突变,观众会觉得画面在“抖动”。视频生成的难点在于帧间一致性——既要每帧画质高,又要让像素的运动轨迹连续、物体身份稳定。时空扩散模型正是把“时间”作为与空间并列的维度一起建模,才解决了这个问题。

为何常见:人眼天然聚焦单帧画质,而“视频=很多帧图片”是直观直觉;闪烁问题要播放出来才看得到,制作时容易被忽略。

误区我以为 Sora 里的 Patch 就是把视频按像素切成小方块,像九宫格拼图一样,每个小方块单独生成再拼起来。

正解Patch 不是原始像素块,而是经过视频压缩网络编码后的潜空间表示块。压缩网络先把高维像素视频压成低维隐向量,再在隐向量上切出统一大小的时空 Patch。每个 Patch 携带一段时空信息,Transformer 在 Patch 序列上做全局建模。九宫格“切图”保留的是像素,Patch 保留的是压缩后的语义特征。

为何常见:“Patch“容易被直译成”补丁/小块”,加上 Sora 官方展示用网格切分视频,容易让人误以为是像素级切块。

误区既然官方说 Sora 能生成 60 秒视频,那加大显存就能生成 10 分钟、1 小时的视频吧?

正解除了显存限制,生成质量会随时长急剧下滑。原因有二:一是计算量随时长线性增长,二是视频越长,误差和“内容漂移”越严重——后半段可能忘记开头。业界普遍用滑动窗口、级联生成和自回归拼接来“续写”,而非单次生成超长视频。Sora 的 60 秒是反复优化下的成果,并非理所当然可达。

为何常见:用户以“视频文件时长”的直觉理解生成能力,忽略了生成式模型每一步都在做概率预测,误差会累积。

误区我只要把开源模型下下来,用 torch 加载到 A100 上,跑一次推理就能上线服务。

正解视频生成对显存、延迟、吞吐的要求近乎苛刻。一次 5 秒 720p 的生成可能需要数十秒到数分钟,普通 GPU 一次只能并行跑少量请求;直接上线会导致成本失控。成熟方案通常包含量化(FP16/INT8)、少步采样、缓存复用、多级流水线(基础帧+插帧+超分分阶段部署)以及批处理调度,才能把单次成本压到可接受范围。

为何常见:图像生成的单图推理容易成功,让人低估视频模型因多帧带来的显存和耗时爆炸式增长。

面试题

Q1. 视频生成与图像生成的根本区别是什么?

单选题 · easy

  • A.视频需要处理时间维度← 正确答案
  • B.视频画面分辨率更高
  • C.视频模型参数量更大
  • D.视频没有生成概率模型

答案:A。图像生成只需解决“一张画面里有什么”,相当于拍照片;视频生成还要解决“画面如何随时间变化”,相当于拍戏。分辨率更高、参数量更大只是表象,并非根本区别;D 选项错误,视频生成同样基于概率模型 P(V|T)。

Q2. 文生视频流程的正确顺序是?

单选题 · easy

  • A.编码、注入、去噪、解码← 正确答案
  • B.去噪、编码、注入、解码
  • C.注入、解码、去噪、编码
  • D.解码、注入、编码、去噪

答案:A。流程类似导演工作:先读剧本(文本编码),再传达给各部门(条件注入),然后反复排练(去噪生成),最后录制上映(解码成像素视频)。其他选项顺序颠倒,逻辑上说不通。

Q3. 时空扩散模型与图像扩散模型的核心差异在于?

单选题 · mid

  • A.噪声维度扩展到时间← 正确答案
  • B.使用更大的训练数据
  • C.完全放弃文本条件
  • D.不需要注意力机制

答案:A。时空扩散模型把视频看作三维数据块,加噪和去噪同时作用于空间与时间两个维度,因此噪声从二维扩展到三维。用更大训练数据是工程选择而非本质差异,C、D 明显错误。

Q4. 视频自回归模型中,误差累积的根本原因是什么?

单选题 · mid

  • A.每一步都依赖前面输出← 正确答案
  • B.视频帧数太多占内存
  • C.模型没有文本条件
  • D.训练数据全部是噪声

答案:A。自回归像接龙:第 i 块基于前 i-1 块预测,若前面某块出错,后续所有块都以错误为前提,偏差越滚越大,如同导演第一幕把主角写成猫,后面剧情再难自洽。内存问题、无文本条件都不是误差累积的根本原因。

Q5. 光流在运动建模中描述的是什么?

单选题 · mid

  • A.像素在帧间的位移场← 正确答案
  • B.画面整体亮度变化
  • C.视频文件压缩比例
  • D.音频与画面的同步

答案:A。光流是逐像素的运动向量场,记录每个像素从上一帧到这一帧的位移,相当于给每个演员标出“走位路线”。亮度、压缩、音画同步都与光流的定义无关。

Q6. 控制视频时长常用的手段有哪些?

多选题 · mid

  • A.滑动窗口续接生成← 正确答案
  • B.训练时多时长采样← 正确答案
  • C.直接缩放已有帧数
  • D.仅依赖随机种子变化

答案:AB。滑动窗口生成是业界最常用的续写方式——生成前 16 帧后取尾部作为下一段起点;训练时多时长采样让模型学会适应不同帧数。缩放已有帧数只是改变播放速度,并没有真正生成新内容;随机种子只影响画面内容,与时长无关。

Q7. Sora 方法的关键创新包括哪些?

多选题 · hard

  • A.视频压缩网络降维← 正确答案
  • B.Patch 统一时空块← 正确答案
  • C.扩散 Transformer 建模← 正确答案
  • D.循环神经网络预测

答案:ABC。Sora 三招:视频压缩网络把像素压成低维表示(A),压缩后的隐变量切成 Patch(B),再用扩散 Transformer 在 Patch 序列上全局建模(C)。Sora 用的是 Transformer 而非循环神经网络,D 错误。

Q8. 扩散采样从全噪声开始的每一步,模型输入不包括?

单选题 · hard

  • A.当前噪声画面状态
  • B.当前去噪时间步数
  • C.文本条件的语义向量
  • D.最终视频的完整真值← 正确答案

答案:D。生成时模型只能看到“毛坯画面”(当前噪声状态)、时间步(排练进行到第几轮)和文本向量(剧本),推理阶段根本不存在完整真值——就像排练时导演手里只有剧本,没有“标准成片”可以对照。D 是训练时才有的信息。

Q9. Sora 的尺度定律 L(C)∝C^-α 给工业界的核心启示是什么?

单选题 · extreme

  • A.算力投入可换取质量← 正确答案
  • B.数据质量胜过数量
  • C.小模型也能达到同样效果
  • D.训练损失与算力无关

答案:A。尺度定律说明生成质量损失随训练算力按幂律下降,即“大力出奇迹”——更多算力实打实带来更高质量,这也是 OpenAI 敢持续堆算力的底气。B、C 与该定律相悖,D 直接违背公式含义。

Q10. 以下哪些属于视频生成的典型应用场景?

多选题 · easy

  • A.电商广告素材制作← 正确答案
  • B.电影分镜快速预演← 正确答案
  • C.短视频动态封面生成← 正确答案
  • D.数据库索引优化加速

答案:ABC。视频生成天然适合“需要动态画面但实拍成本高”的场景:电商广告批量素材、电影分镜预演、短视频动态背景与封面都是典型应用。数据库索引优化是传统后端工程问题,与视频生成无关。