← aipaipai.cloud · INDEX
DOCS // INTERACTIVE NEO-BRUTALIST

文生视频://
音画同步

几个字的 prompt,机器要吐出一段会动的画面,还得配上对得上的声音。本文档拆开这件事:先讲画面怎么长出来,再讲声音怎么和画面对上。 本文档为教学性模拟--所有 latent / 波形 / 时间轴均为确定性可视化,用以理解原理,非真实模型输出。

ENGINE_READY BACKEND: DiT / 3D-VAE MODAL: VIDEO + AUDIO STATUS: LOCAL_ONLY

00 本质矛盾

prompt 是离散符号 · 视频是连续时空张量 · 音频是连续波形。两个连续模态,还得对齐。

输入 prompt

视频像素值总数
49,766,400
48 帧 · 720×480×3 · 连续
音频采样点数
96,000
@48kHz · 连续波形

同样这几个字,机器最终要吐出几千万个像素值 + 几万个音频采样点,而且两组数要卡在同一根时间轴上。这就是文生视频要解决的两件事:先造出来,再对得上。

01 三大积木

文生视频的骨架,就这三块拼出来。

① 文本编码器

prompt -> 一串数字 text embedding,把语义浓缩进去。常用 T5 / CLIP。

这串数字是后面所有生成的"指挥"。

② 3D VAE

视频太大,先压成低维 latent。空间 + 时间一起压,去掉相邻帧和相邻像素的冗余。

模型在 latent 里干活,省算力;最后再解码回像素。

③ DiT 去噪器

在 latent 里从噪声一步步去噪。text embedding 当指挥。

和画图用的扩散模型是亲戚,只是多了时间维。

整体流向

prompt -> [text enc] -> text_emb
noise + latents -> [DiT ×N 步] -> clean latent -> [3D VAE dec] -> 视频

02 去噪过程

核心就一句:从一团噪声里,一步步把画面"擦"出来。点 [RUN] 跑流水线,或拖滑块手动擦。

输入 prompt

TEXT ENC NOISE DiT DENOISE VAE DECODE // idle
1文本编码 · TEXT ENC
text embedding (语义向量)
-
2起噪 · SAMPLE NOISE

采一团随机噪声 latent,作为"原料"。接下来要从它一步步擦出画面。

3DiT 去噪 · DENOISE (N 步)

Transformer 一步步去噪,text embedding 通过 cross-attention 指挥画什么。下面是 latent 的样子:

4VAE 解码 · DECODE -> 帧

干净的 latent 经 3D VAE 解码回像素帧,拼成视频。

fps: - frames: - steps: -

手动擦:去噪步数

step 40 / 40 // 步数越多,噪声退得越干净,画面越收敛
为什么从噪声开始?

扩散模型训练时先学"把干净 latent 一点点加噪成纯噪声"(容易),再反过来学"从纯噪声一步步还原"(难,靠学)。生成时就是反向走这条路:给一团噪声,模型按 timestep 知道当前噪声还剩多少,逐步擦掉。步数够多,画面就收敛出来。

03 时间维度

视频不是一张图,是一串帧。难点:相邻帧要连贯,不能各画各的乱跳。

COHERENT

每一帧既看自己(空间注意力),也看前后帧(时间注意力)。于是相邻帧共享信息,画面连贯。

下方球能从左滑到右 = 帧之间有连续运动。点 [▶ 播放] 看一遍。

FLICKER

每帧各自独立去噪、互不相看。结果:每一帧单看还行,连起来就乱跳、闪烁。

下方每帧都是独立噪声,没有连续运动。

// 有 · 时空注意力
实现上有两种,都让帧连贯

全 3D 注意力:所有时空 token 互相 attend,效果好但算力贵(长视频扛不住)。因式分解:空间注意力和时间注意力分开算,省算力,长视频常用。两者目的相同--让帧间共享信息,不闪烁。

04 音画一致 · 两条路

声音怎么和画面对上?两条技术路线,适用场景不同。

ROUTE A · 图 + 音频 talking portrait

输入一张人像 + 一段语音,生成对口型的说话视频。一致性靠一条因果链:音频 -> 提特征 -> 映射成运动 -> 驱动图像。

从音频提音素/能量/pitch,映射到面部 landmark、表情系数、头部姿态;再用这些运动去逐帧生成。SyncNet 之类判别器当裁判,专罚嘴型对不上的。

audio -> [特征提取] -> 运动(landmark/表情) -> [image gen] -> 说话视频

代表:SadTalker、EchoMimic、EMO。本质是"把音频翻译成动作"。

ROUTE B · 视频 + 音频 joint generation

画面和声音在同一个潜空间里一起生成。共享文本 prompt、共享时间轴、跨模态注意力让两路互相看。

不是分别生成一段视频和一段音频再硬拼,而是从同一个联合分布里采样--两路天生耦合。

prompt -> [joint DiT] -> { video latent ⊕ audio latent } -> [dec] -> 视频 + 音频(同步)

代表:Veo 3、Sora。开放场景(狗叫、碰撞声、脚步声)走这条路。

05 共享时间轴

联合生成凭什么能对得上?最直观的一件:画面帧和声音事件锁在同一根时间轴上。点 [▶ PLAY SYNC]。

// idle · 播放头扫过时:帧亮起 + 对应位置发声

上排是视频帧,下排是音频波形(鼓包 = 声音事件)。竖线播放头从左扫到右: 扫过某帧 -> 该帧亮起;扫过波形鼓包 -> 真发声。两者共用同一根时间轴,所以天然对得上。

对齐三件法宝

法宝干什么
① 共享时间轴视频按 fps 离散成帧,音频按固定窗离散成帧/token,落在同一条时间轴上--对得上的前提
② 跨模态注意力video token 和 audio token 互相 attend。"画面里有狗叫"的信息流到音频分支去生成叫声,反之亦然
③ 共享扩散调度两路用同一个 timestep、同一组噪声水平一起去噪。相同步调下逐步清晰,本身就促使协同收敛
为什么这样就能对得上?

训练时模型见过海量"画面 + 对应声音"的成对数据,学到了"看到 X 就该听到 Y"的联合分布。生成时只要从这个联合分布里采样,两路自然耦合--不是分别画好再硬拼。三件法宝是工程上把"联合分布"落地成可训练、可对齐的具体手段。

06 概念映射

文生视频文档里的术语 -> 底层含义。

术语底层含义
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。让两路实时交换信息,是联合生成的核心粘合剂