几个字的 prompt,机器要吐出一段会动的画面,还得配上对得上的声音。本文档拆开这件事:先讲画面怎么长出来,再讲声音怎么和画面对上。 本文档为教学性模拟--所有 latent / 波形 / 时间轴均为确定性可视化,用以理解原理,非真实模型输出。
prompt 是离散符号 · 视频是连续时空张量 · 音频是连续波形。两个连续模态,还得对齐。
同样这几个字,机器最终要吐出几千万个像素值 + 几万个音频采样点,而且两组数要卡在同一根时间轴上。这就是文生视频要解决的两件事:先造出来,再对得上。
文生视频的骨架,就这三块拼出来。
prompt -> 一串数字 text embedding,把语义浓缩进去。常用 T5 / CLIP。
这串数字是后面所有生成的"指挥"。
视频太大,先压成低维 latent。空间 + 时间一起压,去掉相邻帧和相邻像素的冗余。
模型在 latent 里干活,省算力;最后再解码回像素。
在 latent 里从噪声一步步去噪。text embedding 当指挥。
和画图用的扩散模型是亲戚,只是多了时间维。
核心就一句:从一团噪声里,一步步把画面"擦"出来。点 [RUN] 跑流水线,或拖滑块手动擦。
采一团随机噪声 latent,作为"原料"。接下来要从它一步步擦出画面。
Transformer 一步步去噪,text embedding 通过 cross-attention 指挥画什么。下面是 latent 的样子:
干净的 latent 经 3D VAE 解码回像素帧,拼成视频。
扩散模型训练时先学"把干净 latent 一点点加噪成纯噪声"(容易),再反过来学"从纯噪声一步步还原"(难,靠学)。生成时就是反向走这条路:给一团噪声,模型按 timestep 知道当前噪声还剩多少,逐步擦掉。步数够多,画面就收敛出来。
视频不是一张图,是一串帧。难点:相邻帧要连贯,不能各画各的乱跳。
每一帧既看自己(空间注意力),也看前后帧(时间注意力)。于是相邻帧共享信息,画面连贯。
下方球能从左滑到右 = 帧之间有连续运动。点 [▶ 播放] 看一遍。
每帧各自独立去噪、互不相看。结果:每一帧单看还行,连起来就乱跳、闪烁。
下方每帧都是独立噪声,没有连续运动。
全 3D 注意力:所有时空 token 互相 attend,效果好但算力贵(长视频扛不住)。因式分解:空间注意力和时间注意力分开算,省算力,长视频常用。两者目的相同--让帧间共享信息,不闪烁。
声音怎么和画面对上?两条技术路线,适用场景不同。
输入一张人像 + 一段语音,生成对口型的说话视频。一致性靠一条因果链:音频 -> 提特征 -> 映射成运动 -> 驱动图像。
从音频提音素/能量/pitch,映射到面部 landmark、表情系数、头部姿态;再用这些运动去逐帧生成。SyncNet 之类判别器当裁判,专罚嘴型对不上的。
代表:SadTalker、EchoMimic、EMO。本质是"把音频翻译成动作"。
画面和声音在同一个潜空间里一起生成。共享文本 prompt、共享时间轴、跨模态注意力让两路互相看。
不是分别生成一段视频和一段音频再硬拼,而是从同一个联合分布里采样--两路天生耦合。
代表:Veo 3、Sora。开放场景(狗叫、碰撞声、脚步声)走这条路。
联合生成凭什么能对得上?最直观的一件:画面帧和声音事件锁在同一根时间轴上。点 [▶ PLAY SYNC]。
上排是视频帧,下排是音频波形(鼓包 = 声音事件)。竖线播放头从左扫到右: 扫过某帧 -> 该帧亮起;扫过波形鼓包 -> 真发声。两者共用同一根时间轴,所以天然对得上。
| 法宝 | 干什么 |
|---|---|
| ① 共享时间轴 | 视频按 fps 离散成帧,音频按固定窗离散成帧/token,落在同一条时间轴上--对得上的前提 |
| ② 跨模态注意力 | video token 和 audio token 互相 attend。"画面里有狗叫"的信息流到音频分支去生成叫声,反之亦然 |
| ③ 共享扩散调度 | 两路用同一个 timestep、同一组噪声水平一起去噪。相同步调下逐步清晰,本身就促使协同收敛 |
训练时模型见过海量"画面 + 对应声音"的成对数据,学到了"看到 X 就该听到 Y"的联合分布。生成时只要从这个联合分布里采样,两路自然耦合--不是分别画好再硬拼。三件法宝是工程上把"联合分布"落地成可训练、可对齐的具体手段。
文生视频文档里的术语 -> 底层含义。
| 术语 | 底层含义 |
|---|---|
DiT (Diffusion Transformer) | 去噪主干。把 latent 切成 token,用 Transformer 一步步去噪;相比 U-Net 更好扩展到长视频 |
latent(隐表示) | 3D VAE 把视频压成的低维张量。模型在 latent 里干活省算力,最后再解码回像素 |
3D VAE | 时空压缩器。空间 + 时间一起压,去掉相邻帧和相邻像素的冗余 |
timestep (t) | 去噪进度。t 大=噪声多(早期),t 小=接近干净(后期);模型按 t 知道该去多少噪 |
cross-attention | 文本(或音频)指挥画面的通道。text embedding 当 K/V,latent 当 Q,让画面"听"文本的话 |
classifier-free guidance | 放大 prompt 影响力的小技巧。有/无 prompt 两次预测取差值放大,让结果更贴 prompt |
fps | 每秒帧数,视频的时间分辨率。fps 高=更丝滑但更贵 |
mel-spectrogram | 音频的"时间×频率能量图"。比直接波形好学,声学模型常用它当中间表示 |
neural codec(如 EnCodec) | 把音频压成离散 token 的编解码器。联合生成里音频经它变 token,和视频 token 一起进 DiT |
SyncNet | 专门判"嘴型和音频对不对得上"的网络。音频驱动图像路线里当裁判,罚不对齐的样本 |
跨模态注意力 | video token 和 audio token 互相 attend。让两路实时交换信息,是联合生成的核心粘合剂 |