流式视频编辑近年来发展迅速,但真正落地依旧受两个核心问题制约:如何在时间维度上稳定保留未编辑区域的背景与结构,以及如何达到实时交互所需的低延迟。近期的流式视频生成方法主要面向"从零合成",由于流式编辑对像素保留与区域可控性的严格要求,这些方法无法直接迁移。本文提出一种新的流式视频编辑框架,能够在保持强内容保留与实时响应的前提下进行 causal、逐帧的编辑。核心设计是三阶段蒸馏管线:将强大双向基础模型的编辑能力逐步迁移到高效的单向流式编辑器,实现无损视觉保真度的稳定长时程编辑。为支持实时部署,作者还引入了面向自回归的 Mask Cache,跨帧复用与区域相关的计算,显著减少冗余处理并加速推理。同时,作者还建立了流式视频编辑专用基准。大量实验证明该方法在流式基线中取得 SOTA 视觉质量,并将推理速度提升到 12.66 FPS,可用于交互式与增强现实场景。
视频编辑随着高质量内容创作与交互式数字体验的需求而快速演进。随着 AR 与直播场景的普及,业界正在从传统的离线批处理转向实时响应式的编辑范式。然而"低延迟真实部署"仍是一大难题,尤其是在流式(streaming)场景下——视频必须以 chunk-by-chunk 的方式处理,且完全无法看到未来帧。
SOTA 视频扩散模型依赖双向/全局注意力维持时序一致性;直接把这类非因果模型套到 causal 流式设置里(即将来的 Key/Value 被截掉),会引发严重的"遗忘"或抖动,因为模型缺乏用于稳定编辑的全局结构上下文。
标准扩散管线把每一帧当独立、开销昂贵的生成任务处理;但 AR 流式场景中,绝大部分背景在时间维度上要么静止要么线性运动,反复对未编辑区域跑 FFN + Attention 会产生极高的每帧延迟,让边缘设备的实时体验不可行。
系统分析流式视频编辑的两大特性,提出了 causal、chunk-by-chunk 的高保真、低延迟编辑框架,达到 12.66 FPS 的推理吞吐。
把复杂的编辑先验从双向 DiT 教师模型迁移到 4 步 Causal DiT 学生;并提出基于 L₂ 距离 的 AR-oriented Mask Cache,动态解耦计算。
建立面向流式视频编辑的评测基准(120 对样本、6 项自动指标 + 用户主观评分),并在视觉质量、时序一致性、吞吐三个维度取得 SOTA。
扩散模型显著推动了视频生成与编辑。为实现多样化控制,如 VACE 提出一体化架构,EditVerse、UNIC 采用上下文学习处理多任务,通常将源视频与稠密多模态条件整合成庞大的联合表征或长上下文序列。InsV2V、Lucy Edit 则借合成数据集或通道级拼接实现高保真修改。此外,强化学习也被用来对齐生成内容与人类意图。这些方法虽然视觉质量出色,但本质上是离线、非因果处理——需要先看完整段时序上下文才能吐出第一帧,延迟不可接受,无法用于 AR 实时场景。
Diffusion Forcing、StreamDiffusion 把去噪重新定义为块级顺序处理;MAGI-1(超大规模世界模型)、SkyReels-V2、StreamingT2V 支持无限长镜头生成;Rolling Forcing 抑制误差累积;Stable Video Infinity 通过 error-recycling 微调缓解 AR 漂移;Self-Forcing 用自生成条件桥接曝光偏差;StreamDiffusionV2 引入 sink-token 引导的 rolling KV cache。EgoEdit 首次将流式模型带入第一人称视频编辑。
加速反向扩散是实时性能的关键。图像域早期的一步蒸馏工作有 InstaFlow(Rectified Flow)、TSD-SR(target score distillation)、Improved DMD、SDXL-Lightning 的渐进对抗蒸馏。这些成果延伸到视频域,产生了 AAPT 一步生成、SeedVR2 修复、DOVE 超分等。Sparse VideoGen2 通过 attention 置换减少冗余;Token Merging、FlashAttention 属于结构级优化。最相关的两条工作是 FlashVSR(三阶段蒸馏做流式超分)和 PersonaLive(外观蒸馏做实时人像动画),但它们的任务本质上是低层像素映射或结构受限区域,直接套到通用视频编辑(涉及复杂语义重构、跨尺度特征演化、无训练奖励引导)会严重降级细节。LiveEdit 提出的三阶段蒸馏 + AR Cache 正是为解决这一挑战而设计。
双向模型天然给"过去"和"临近未来"都赋予显著权重。截断未来 KV 后注意力被迫均匀分布到全部历史帧,与流式范式"依赖最近邻近帧"的核心假设冲突。解法:三阶段蒸馏,通过 teacher-forcing 显式对齐 causal 分布与局部化双向先验。
StreamV2V、StreamDiffusion 面向全局 V2V 翻译,对每一帧的所有 token 都做稠密全局计算;但流式编辑要求未编辑区域的中间特征必须绝对时序一致。全局生成范式会破坏未编辑区域视觉完整性,同时带来巨大冗余。解法:AR-oriented Mask Cache——只对活跃编辑 token 全量计算,静态 token 直接从缓存读取。
记输入视频 latent 序列 z₀ ∈ ℝ^{F×C×H×W};c 为编辑指令的文本嵌入。整体目标是把双向教师的高保真编辑能力,逐步迁移到超快、单向的流式编辑器。
基于 Wan2.1-T2V-1.3B 构建双向 DiT 骨干 ε_θ^bid。将 原始视频 latent 与 加噪 latent z_t 沿通道维(而非时空序列维)拼接输入网络——这一"通道拼接"策略保持原始序列长度,避免 attention 的二次计算爆炸。使用标准噪声匹配损失训练:
L_MSE^bid = E_{z₀, ε∼𝒩(0,I), t, c} [ ‖ε − ε_θ^bid(z_t, t, c)‖₂² ]
这一阶段的产物是离线高保真编辑先验,具备复杂内容操作能力,但需要 100 NFE + CFG,无法流式推理。
直接给预训练双向模型套 causal mask 会严重掉分。作者引入 Teacher Forcing 机制配合 chunk-wise causal attention:以 M_causal 表示掩码,其限制时序 token 不得关注未来 chunk。因果 DiT ε_θ^causal 在保留 Stage 1 编辑先验的前提下学习顺序单向输入:
L_MSE^causal = E_{z₀, ε, t, c} [ ‖ε − ε_θ^causal(z_t, t, c | M_causal)‖₂² ]
受 Causal Forcing 等 AR 框架启发,作者认为通过显式 Teacher Forcing 派生 AR 模型是流式视频生成结构上必要的一步——否则会因缺失未来 token 而结构塌陷。
为进一步降低延迟并抑制持续流式中的累积误差,用 Distribution Matching Distillation (DMD) 做步数蒸馏。近期 AR 生成范式(Self-Forcing 等)严重依赖 ODE 初始化阶段建立初始 causal checkpoint,但在流式视频编辑里 ODE 初始化的算力开销极为夸张(需处理高分辨率长序列源视频)。
LiveEdit 直接用 Stage 2 得到的 ε_θ^causal 权重初始化 4 步 DMD 生成器 G_θ,跳过昂贵的 ODE 初始化。训练时 G_θ 把被剪枝噪声直接映射到编辑帧,联合优化 L_MSE 与 DMD 梯度:
∇_θ L_DMD = E_{z_T, c} [ w(t) · ( ε_φ^real(z_t, t, c) − ε_ψ^fake(z_t, t, c) ) · ∇_θ G_θ(z_T, c) ]
其中 z_t 是从生成输出 G_θ(z_T, c) 模拟的中间 latent,w(t) 是标准 DMD 的时步加权函数。ε_φ^real(Real Score)冻结,ε_ψ^fake(Fake Score)与 G_θ 联合训练。这一机制把生成过程压缩到仅 4 步 NFE,实现真正的实时响应。
三阶段蒸馏解决了架构不兼容问题,但时空 token 冗余仍是实时推理的核心瓶颈。作者提出 AR-oriented Mask Cache:根据"区域是否活跃编辑"动态解耦计算图。
推理时视频按 chunk 顺序处理。为给 chunk k 分配空间掩码,作者利用前一 chunk k−1 的生成轨迹:
z_src^{k−1}:前一 chunk 原始源 latentz_edit^{k−1}:其对应的编辑输出 latent逐位置计算 L₂ 距离,超过阈值 τ 的位置标记为活跃编辑:
M^k_{u,v} = 𝕀( ‖z_edit,{u,v}^{k−1} − z_src,{u,v}^{k−1}‖₂ > τ )
阈值 τ 不是经验固定值,而是通过对 token 冗余度的动态计算确定,实际用来剪掉 70% 的冗余空间 token。
对 chunk k 的每个 token,根据 M^k 走两条路径:
f^k_{u,v} =
F(z^k_{u,v}) if M^k_{u,v} = 1 (活跃编辑区,全量计算 SA + CA + FFN)
f^{k−1}_{u,v} if M^k_{u,v} = 0 (静态背景区,从 Token Cache 直接复用)
缓存机制只应用在 Self-Attention 层——作者从经验和特征相似性分析(见 §4.5)都验证 SA token 有极高的时序冗余、可以直接复用;而 FFN 与 Cross-Attention 承担像素级细节和文本对齐,绝不能替换。
基础模型 Wan2.1-T2V-1.3B;Stage 1 采用通道拼接整合噪声 latent 与条件 latent,避免 token-wise 序列拼接带来的注意力二次爆炸。训练数据为 20K 高质量视频-视频对,从大规模 Ditto-1M 数据集中精心筛选而来。
三阶段蒸馏在 8× NVIDIA A100 上渐进训练,全部使用 AdamW 优化器。
训 9K steps,学习率 1e-5,全局批大小 8;标准噪声调度器,连续时步 t ∈ [0, 1000]。
加入 chunk-wise causal mask,微调 20K steps;时序 chunk 大小设为 3 latent 帧,token 只能关注当前和严格靠前的 chunk。
4 步生成器直接由 Stage 2 权重初始化(跳过昂贵 ODE 初始化);4 步采样时步为 [0, 250, 500, 750];Real / Fake Score 均从 Stage 1 权重初始化,Real 冻结,Fake 与 G 联合优化;学习率 1e-5,训 10K steps;使用标准 DMD 的时步加权 w(t)。
纯自回归模式,每步解码 3 帧;L₂ 阈值 τ 动态计算,剪掉 70% 冗余空间 token;缓存只作用于 Self-Attention 层。最终每帧延迟 79 ms,等价于 ≈12.66 FPS。
在 120 对样本基准上比较,采用六项自动指标:
| 方法 | TA ↑ | BC ↑ | MS ↑ | DD ↑ | AQ ↑ | IQ ↑ |
|---|---|---|---|---|---|---|
| LucyEdit(离线) | 0.253 | 0.943 | 0.990 | 0.266 | 0.529 | 0.707 |
| VideoCoF(离线) | 0.245 | 0.953 | 0.991 | 0.094 | 0.542 | 0.709 |
| InsV2V(离线) | 0.259 | 0.943 | 0.986 | 0.196 | 0.577 | 0.708 |
| StreamDiffusion | 0.239 | 0.886 | 0.975 | 0.239 | 0.590 | 0.717 |
| StreamDiffusionV2 | 0.252 | 0.951 | 0.992 | 0.264 | 0.539 | 0.653 |
| StreamV2V | 0.244 | 0.934 | 0.989 | 0.153 | 0.548 | 0.712 |
| Ours (W/o Cache) | 0.265 | 0.956 | 0.991 | 0.282 | 0.584 | 0.720 |
| Ours (W/ Cache) | 0.270 | 0.956 | 0.992 | 0.256 | 0.581 | 0.708 |
| 六项指标均为"越大越好"(↑);红为最佳、蓝为次佳。表 1(论文原表 1) | ||||||
| 配置 | Stage 1 (Foundation) | Stage 2 (Teacher Forcing) | Stage 3 (DMD) |
|---|---|---|---|
| Is streaming? | × | √ | √ |
| NFEs | 100 | 100 | 4 |
| With CFG? | √ | √ | × |
| Latency(81 帧) | 197.48 s | 200.36 s | 7.89 s |
| First chunk size | Full sequence | 3 frames | 3 frames |
| Next chunk size | N/A | 3 frames | 3 frames |
| Text Alignment | 0.268 | 0.264 | 0.265 |
| Image Quality | 0.716 | 0.702 | 0.720 |
| 表 2:三阶段蒸馏管线的生成配置与推理效率对比(论文原表 2) | |||
阶段效应解读:
| 方法 | TA ↑ | BC ↑ | MS ↑ | DD ↑ | AQ ↑ | IQ ↑ |
|---|---|---|---|---|---|---|
| W/o Cache | 0.265 | 0.956 | 0.991 | 0.282 | 0.584 | 0.720 |
| Cache on SA(本文) | 0.270 | 0.956 | 0.992 | 0.256 | 0.581 | 0.708 |
| Cache on FFN | 0.236 | 0.841 | 0.982 | 0.017 | 0.440 | 0.513 |
| 表 3:缓存位置消融(论文原表 3)——Cache-on-FFN 大幅劣化,Cache-on-SA 全维度接近 W/o Cache 甚至反超 TA / MS。 | ||||||
Self-Forcing 面向 T2V,用自生成条件桥接曝光偏差;然而其依赖的 ODE 初始化阶段,在流式视频编辑中要处理高分辨率长序列源视频,代价过高。而且 T2V 只需与前序生成保持一致,编辑必须与源视频精确空间对齐——直接迁移必然结构漂移。LiveEdit 直接用 Stage 2 的 AR 权重初始化 DMD 生成器,绕开 ODE;再借 Mask Cache 保证严格源保真。
EgoEdit 首创第一人称视频流式编辑,但主要在既有 Self-Forcing 管线中验证任务专属数据的有效性,并未做进一步推理加速;其研究范围也局限于 egocentric 场景,难以泛化到 OOD。LiveEdit 面向通用高保真流式视频编辑,通过三阶段蒸馏把推理压到 4 步,并动态解耦计算,在多种场景下都能实时且严格背景保留。
LiveEdit Top-3 命中率 100.0%,几乎垄断"最佳"票;流式生成基线绝大多数落入 "Others",表明它们本质上无法准确执行编辑指令。
LiveEdit 拿到 75.0% 的绝对"最佳"票,Top-3 命中率 87.5%;离线双向模型 LucyEdit 也达到 87.5% Top-3,但由于轻微结构漂移与时序不一致仅拿到 12.5% 绝对最佳。
LiveEdit Top-3 命中率 95.8%,明确超越离线与流式两类基线,用户研究与自动指标的判断一致:语义编辑保真 + 严格时空一致性。
把噪声 latent 与源视频 latent 沿通道维融合而非拼在时序或空间维——保持了原始序列长度,避免注意力二次爆炸。这也是能在 A100×8 上以 20K 步完成 Stage 1 训练的物理基础。
直接从双向 → 4 步 causal 会同时暴露"结构塌陷"与"分布迁移"两个问题。分成"编辑先验 → 因果适配 → 步数压缩"三步后,每一步只承担一类分布对齐,训练稳定性显著提升。
Self-Forcing 的 ODE 初始化在编辑上要处理高分辨率长源视频,成本过高。Stage 2 已经给出对齐良好的 causal 起点,直接用它初始化 4 步 DMD 生成器既省算力又更稳定。
连续去噪步的余弦相似度分布图(图 7)与消融表 3 证实:SA 层 token 时序几乎不变,可以直接复用;FFN 层携带高频空间细节,一旦复用会灾难性掉分(IQ 从 0.720 → 0.513)。
M^k 依赖的是 chunk k−1 的 z_edit 与 z_src——这个先验在正式跑 chunk k 之前就已可用。图 4 的统计显示 Temporal IoU 均值仅 0.016%、Pixel Diff 0.126%,因此这一"上一 chunk 掩码"策略在时序上足够稳定。
不写死经验值,而是按 token 冗余度动态计算,使剪枝率始终维持在 70%——保证在不同视频复杂度下都能保持稳定的加速比。
# Data pipeline (Stage 0: dataset preparation)
# ---------------------------------------------
Source pool: Ditto-1M (video-to-video edit pairs)
Filter target: 20,000 high-quality pairs
Filter criteria: (paper does not disclose full recipe)
── follow Ditto-1M official quality tags
── deduplicate on source clip hash
── require both source & edited clips ≥ 81 frames
Latent format: channel-wise concat of z_t and z_src
(do NOT concatenate along temporal or spatial axis)
Frame count: 81 frames per clip is the reported eval length
# Backbone
model_backbone = "Wan2.1-T2V-1.3B" # bidirectional DiT foundation
input_fusion = "channel_concat(z_t, z_src)"
# Stage 1 — Foundation Tuning
optimizer = AdamW
lr = 1e-5
global_batch_size = 8
train_steps = 9_000
noise_schedule = continuous # t in [0, 1000]
loss = MSE(eps, eps_theta_bid(z_t, t, c))
# Stage 2 — Teacher Forcing (Causal)
attention_mask = chunk_wise_causal
chunk_size = 3 # latent frames per chunk
train_steps = 20_000
loss = MSE(eps, eps_theta_causal(z_t, t, c | M_causal))
# Stage 3 — DMD (4-step Distillation)
G_theta_init_from = eps_theta_causal # << skip ODE init
sampling_timesteps = [0, 250, 500, 750]
real_score_init = Stage_1_weights # frozen
fake_score_init = Stage_1_weights # trainable
lr = 1e-5
train_steps = 10_000
loss = MSE + grad_theta L_DMD
w(t) = standard DMD weighting
# AR-oriented Mask Cache (inference only)
mask_source = L2( z_edit^{k-1} - z_src^{k-1} )
tau = dynamic (prunes 70% redundant tokens)
apply_layer = Self-Attention only # do NOT cache FFN or CA
chunk_decode_size = 3 frames per step
per_frame_latency = 79 ms (≈12.66 FPS)
# =========== TRAINING ===========
# Stage 1: bidirectional editing prior
for z0, c in edit_pairs:
eps = randn_like(z0)
t = uniform(0, 1000)
z_t = alpha_t*z0 + sigma_t*eps
x = channel_concat(z_t, z_src)
pred = eps_theta_bid(x, t, c) # full attention
loss = mse(pred, eps).backward()
# Stage 2: causal transition via teacher forcing
freeze(none); load(eps_theta_causal ← eps_theta_bid)
for z0, c in edit_pairs:
z_t = ...
pred = eps_theta_causal(z_t, t, c, mask=chunk_causal_mask(chunk=3))
loss = mse(pred, eps).backward()
# Stage 3: DMD 4-step distillation
G_theta = init_from(eps_theta_causal)
eps_real = init_from(eps_theta_bid); freeze(eps_real)
eps_fake = init_from(eps_theta_bid)
for z0, c in edit_pairs:
z_T = pruned_noise(z0.shape)
x_hat = G_theta(z_T, c) # 4 steps
z_t = simulate_intermediate(x_hat, t)
grad_G = w(t) * (eps_real(z_t,t,c) - eps_fake(z_t,t,c)) * dG/dtheta
loss = mse(x_hat, z0) + backprop(grad_G)
update(G_theta, eps_fake)
# =========== INFERENCE (streaming) ===========
cache = TokenCache() # SA-layer only
prev_z_src = prev_z_edit = None
for chunk_k in incoming_chunks(size=3): # 3 latent frames each
z_src_k = encode(chunk_k)
if prev_z_edit is None:
M_k = ones_like(spatial_grid) # first chunk = full compute
else:
d = l2(prev_z_edit - prev_z_src) # per-token distance
tau = dynamic_threshold(d, prune_ratio=0.70)
M_k = (d > tau).float()
z_out_k = zeros_like(z_src_k)
for token_uv in spatial_grid:
if M_k[uv] == 1:
z_out_k[uv] = full_block(z_src_k[uv]) # SA + CA + FFN
else:
z_out_k[uv] = cache[uv] # Token Reuse (SA only)
cache.update_from(z_out_k) # only SA sub-features
prev_z_src, prev_z_edit = z_src_k, z_out_k
yield decode(z_out_k)
论文没披露 Wan2.1-1.3B 输入通道扩展的具体接线方式。若要复现,需要修改骨干输入投影层(in_channels 翻倍),并注意保持位置嵌入不变;改错会导致 Stage 1 无法收敛。
Stage 2 与推理阶段都以 3 帧为一个 latent chunk。这一数字牵一发而动全身:chunk 越大延迟越低但一致性越差;越小则每 chunk 缓存命中率降低。改动须重训 Stage 2。
论文只写"τ 使 70% 空间 token 被剪枝",未给具体计算函数。合理猜测是把 chunk k−1 的 L₂ 距离排序后取分位数(0.30 分位)作为阈值;若目标数据分布与本文差异较大,可能需要重新调整该分位数以避免误剪编辑区域。
消融表 3 显示 Cache-on-FFN 直接把 IQ 从 0.720 摔到 0.513;Cross-Attention 更是文本条件对齐的核心,也不能替换。实现时需在骨干 forward 里精确 hook SA 输出。
掩码依赖前一 chunk 的 z_edit − z_src;启动时没有历史,因此第一 chunk 需走 M=1 全路径,缓存也在此建立。忽略这一点会导致第一段生成分布外错误。
论文明确 4 步为 [0, 250, 500, 750],用 timestep-dependent 权重 w(t)。改成 5 步或选不同分布的时步会破坏 DMD 收敛,且失去 4 步实时性。
20K 视频对 + 8×A100 只是复现主线路径;论文没有报告小规模数据下的稳定性,因此若在 <5K 对上重训,Stage 3 更可能因 fake score 收敛不稳而"翻车"。
DD/BC/MS/IQ 高度依赖 VBench 具体版本;直接复用作者数字前须使用同版本 VBench 与相同 CLIP 模型(TA 用 CLIP-B/32 是常见选择,但论文未强调),否则数字不可比。
把 Mask Cache 从"当前 chunk 的空间路由"扩展到"跨 chunk 的时空路由",利用连续 chunk 内的时序冗余进一步压缩,可能带来额外 1.5–2× 加速。
将 4 步压到 1 步,可以在保证结构不塌陷的前提下达到 >30 FPS 的实时率;关键是解决 DMD 收敛稳定性与 Consistency Model 的教师蒸馏兼容问题。
目前指令是一次性的静态文本;把 chunk-wise 输入扩展成支持动态改变的 prompt 流,可以做到"直播中实时改指令",接近真正的交互 AR 场景。
把 Mask Cache 的空间路由信息传给 3D-aware 表示(如 Gaussian Splat / NeRF)做增强现实合成,可能实现"实时视频编辑 → 实时 AR 场景更新"的闭环。
让模型根据当前 attention 集中度或运动幅度自动决定 chunk 大小(快镜头短 chunk、静态镜头长 chunk),提高吞吐同时保持一致性。
当前基于 L₂ 差异的掩码在多主体交叉遮挡场景可能"外溢"到相邻区域;引入语义分割先验或 SAM2 track 会让掩码更精细。
4 步 + Cache 已经把 GPU 端做到 12.66 FPS,下一步可尝试 INT8 / FP8 量化 + 移动端 NPU,把延迟继续降到 30 ms 内,覆盖手机 AR。
Mask Cache 的核心思想是"识别时序冗余高的模块并跨帧复用",可以尝试迁移到视频生成、超分、修复等其他任务,形成一族"AR-oriented Cache"框架。