SkyReels-V2: Infinite-length Film Generative Model
Year: 2025
Figure 1 解读: SkyReels-V2 生成效果展示。展示了四个不同场景的超长视频生成结果(自行车手在山路骑行、赛车在赛道转弯、穿裙子的袋鼠在南极散步、海龟在沉船附近游泳),从 Frame 1 到 Frame 256 乃至无限延伸,主体视觉一致性完美保持,无失真和质量退化。
1. Motivation (研究动机)
当前视频生成模型的核心痛点
- Prompt adherence 不足: 通用 MLLM 做视频 caption 无法理解电影级 shot language(景别、机位、镜头运动),导致生成结果与 prompt 中的专业镜头描述不匹配
- 运动质量差: 标准 denoising loss 偏向逐帧外观学习,忽略时序一致性;大幅度形变动作(如篮球运动)容易产生肢体扭曲、违反物理规律
- 视频时长受限: 纯扩散模型只能生成固定长度(5-10s);纯自回归模型存在误差累积和分辨率下降;Diffusion Forcing Transformer (DFoT) 的组合噪声调度搜索空间 导致训练不稳定
- 缺乏电影级生成能力: 无法满足 story generation、camera director 等专业影视制作需求
为什么需要一个统一框架
- 需要同时解决 caption 质量、运动优化、无限长度生成三个正交问题
- 需要将 MLLM、多阶段预训练、强化学习、Diffusion Forcing 四大技术协同整合
2. Idea (核心思想)
核心思路
提出 SkyReels-V2,一个无限长度电影生成模型,通过四大技术协同解决上述痛点:
| 痛点 | 解决方案 | 关键创新 |
|---|---|---|
| Prompt adherence | SkyCaptioner-V1 | 结构化 caption + 专家子模型蒸馏到统一 MLLM |
| 运动质量 | Motion-specific RL | 半自动 preference data pipeline + Flow-DPO |
| 时长限制 | Diffusion Forcing | 非递减噪声调度,搜索空间从 降至 |
| 视觉质量 | 多阶段预训练 + HQ SFT | 渐进分辨率 256p→360p→540p→720p |
训练流程总览
预训练阶段: 渐进分辨率预训练(256p → 360p → 540p) 后训练阶段: HQ 540p SFT → RL (Motion DPO) → Diffusion Forcing Training → HQ 720p SFT
Figure 2 解读: 系统总览图,左侧展示渐进分辨率预训练流程(Data Collection → Captioning & Processing → 256p/360p/540p 三阶段预训练),中部展示四阶段后训练(HQ SFT → RL with VLM-based Reward Model → Diffusion Forcing with 非递减噪声注入 → HQ 720p SFT),右侧展示支持的应用(Story Generation、Image2Video、Camera Director、Elements2Video)。关键亮点是 RL 阶段使用 VLM-based Reward Model 对运动质量进行偏好优化,以及 Diffusion Forcing 阶段的帧级非递减噪声调度实现无限长度生成。
3. Method (方法)
3.1 数据处理 Pipeline
Figure 3 解读: 数据处理全流程。Pre-processing Stage 包含 Shot Segmentation(使用 PyDetect + TransNet-V2)和 Captioning 两步。Pre-training Stages 对 256p/360p/540p 数据分别使用不同粒度的 filter(从宽松到严格)。Post-training Stages 进一步增加 Concept Balance 和 Manual Filter。底部 Human-In-The-Loop Validation 通过 BadCase Rate 监控保证数据质量(Pre-training 阶段 0.01% 采样率,bad case < 15%;Post-training 阶段 0.1% 采样率,bad case < 3%)。
数据规模:
- 原始数据池: 视频 + 图像
- 数据来源: 开源数据集 (Koala-36M, HumanVid)、自采集影视 (28万+电影、80万+电视剧集,总时长 6.2M+ 小时,覆盖 120+ 国家)、艺术素材库
- Concept Balancing 后数据量减少约 50%
Figure 5 解读: 概念平衡前后的数据分布对比。左图为未平衡状态,Human 类占比高达 84.8%,其他类别(Scenery 8.8%、Animal 4.1% 等)严重不足。右图为平衡后,Human 占比降至 55.3%,Scenery 升至 14.0%,Animal 升至 8.5%,Architecture 升至 4.6%,各类别分布更加均匀,有效避免模型对人物类的过拟合。
数据过滤器分类:
- Element Filters: Black Screen Filter, Static Screen Filter, Aesthetic Filter, Deduplication (copy-detection embedding), OCR Filter, Mosaic Filter, Special effect/sticker Filter
- Quality Filters: VQA, IQA, VTSS
# 数据处理 Pipeline
# Input: 原始视频数据 D_raw
# Pre-processing
shots = ShotSegmentation(D_raw, detector=[PyDetect, TransNetV2])
captions = HierarchicalCaptioning(shots) # SkyCaptioner-V1
pool = BasicFilter(shots + captions) # 去重、合成数据、黑屏、静屏、马赛克、特效
# Pre-training Data (渐进过滤)
D_256p = pool.filter(loose_thresholds) # 基础过滤
D_360p = pool.filter(medium_thresholds) # + Motion/OCR/Aesthetic/Duration Filter
D_540p = pool.filter(strict_thresholds) # + Source/Subtitle/Logo/Border Crop
# Post-training Data
D_post = ConceptBalance(D_540p) # 按 subject category 平衡,减少约50%
D_540p_sft = QualityFilter(D_post)
D_720p_sft = ManualFilter(D_540p_sft) # 人工精选
# Human-In-The-Loop (贯穿全流程)
for stage in [DataSources, ShotSeg, PreTrain, PostTrain]:
sample = RandomSample(stage.output, rate=stage.sample_rate)
bad_rate = HumanEval(sample)
assert bad_rate < stage.threshold # Pre-train: <15%, Post-train: <3%3.2 SkyCaptioner-V1: 结构化视频描述模型
核心设计: 将 MLLM 通用描述与专家子模型的专业描述整合为结构化 JSON caption。

Figure 6 解读: 结构化 caption 示例。JSON 格式包含 subjects 数组(每个 subject 有 TYPES/appearance/action/expression/position/is_main_subject 字段)和 shot 元数据(shot_type, shot_angle, shot_position, camera_motion, environment, lighting)。这种结构化设计让模型能精确理解电影级镜头语言。
子专家模型 (Sub-expert Captioners):
- Shot Captioner: 景别分类(close-up/extreme close-up/medium/long/full shot)、角度(eye angle/high/low)、位置(back view/front/overhead 等)。精度: shot type 82.2%, shot angle 78.7%, shot position 93.1%
- Expression Captioner: 7种情绪标签 + 强度 + 面部特征 + 时序变化。使用 InternVL2.5 + CoT prompting。分类器精度 85%,描述准确率 88%
- Camera Motion Captioner: 6DoF 坐标参数化(translation x/y/z + rotation roll/pitch/yaw),每轴离散为 +/-/0,结合三档速度(slow <5%, medium 5-20%, fast >20%),产生 2,187 种运动组合。精度: 单类型 89%, 手持 78%, 突变 81%, 复杂运动 83%
SkyCaptioner-V1 训练:
- 基座模型: Qwen2.5-VL-7B-Instruct
- 训练数据: 从 1000万 视频池中精选 200万 平衡数据
- 训练配置: 64x NVIDIA A800 GPU, global batch size 512, lr=1e-5, AdamW, 2 epochs
- 结果: 平均准确率 76.3%,显著优于 Qwen2.5-VL-7B-Ins (51.4%)、Qwen2.5-VL-72B-Ins (58.7%)、Tarsier2-recap-7B (49.4%)。尤其在 shot type (93.7%) 和 shot position (83.1%) 上大幅领先
# SkyCaptioner-V1 Caption 生成流程
# Input: 视频 V, 任务类型 task ∈ {T2V, I2V}
# Step 1: 基座 MLLM 生成初始结构化描述
struct_caption = Qwen2.5_VL_72B(V, system_prompt=STRUCTURAL_CAPTION_PROMPT)
# 输出: subjects[], shot_type, shot_angle, shot_position, camera_motion, ...
# Step 2: 专家模型替换/增强特定字段
struct_caption.shot_type = ShotTypeClassifier(V) # 2阶段训练: web预训练 → 2000样本精标
struct_caption.shot_angle = ShotAngleClassifier(V)
struct_caption.shot_position = ShotPositionClassifier(V)
struct_caption.expression = ExpressionCaptioner(V) # InternVL2.5 + emotion labels + CoT
struct_caption.camera_motion = CameraMotionCaptioner(V) # 6DoF离散化 + 5轮active learning
# Step 3: SkyCaptioner-V1 蒸馏 (推理时使用)
struct_caption = SkyCaptioner_V1(V) # Qwen2.5-VL-7B finetune on 2M balanced data
# Step 4: Caption Fusion (根据任务类型)
if task == "T2V":
final = Qwen2.5_32B_Instruct.fuse(struct_caption, mode="dense")
# 顺序: shot信息 → 各subject动作/外观/表情/位置 → 环境/灯光/镜头运动
elif task == "I2V":
final = Qwen2.5_32B_Instruct.fuse(struct_caption, mode="sparse")
# 聚焦: subject + temporal action/expression + camera motion, 各字段10%丢弃率3.3 多阶段预训练
基于 Wan2.1 架构,保留预训练 VAE 和 text encoder,仅从头训练 DiT。使用 Flow Matching 框架。
训练目标:
给定 latent 表示 (图像或视频),采样时间步 (logit-normal 分布),初始化噪声 ,构造中间 latent:
Ground-truth 速度向量:
模型预测速度场 ,条件于 text embedding (512-dim umT5),最小化 loss:
Dual-axis Bucketing + FPS Normalization:
- 按时长 ( bins) 和宽高比 ( bins) 组成 矩阵
- FPS 归一化:
- 可学习 frequency embedding 加到 timestep embedding 上(HQ SFT 后去除)
三阶段预训练:
| 阶段 | 分辨率 | 数据类型 | 过滤策略 | 学习率 |
|---|---|---|---|---|
| Stage 1 | 256p | 图像+视频联合 | 宽松(低质量+去重) | 1e-4 → 5e-5 (decay 1e-4) |
| Stage 2 | 360p | 图像+视频联合 | 中等(+motion/OCR/aesthetic) | 2e-5 |
| Stage 3 | 540p | 仅视频 | 严格(+source/quality filter) | 2e-5 |
# Flow Matching 预训练
# Input: 数据集 D, DiT 模型 u_θ, text encoder E_text, VAE encoder E_vae
for stage in [Stage1_256p, Stage2_360p, Stage3_540p]:
D_stage = stage.filter(D)
optimizer = AdamW(u_θ.parameters(), lr=stage.lr, weight_decay=stage.wd)
for batch in DataLoader(D_stage, bucket_sampler=DualAxisBucket(B_T, B_AR)):
x_1 = E_vae.encode(batch.video) # latent representation
c = E_text.encode(batch.caption) # 512-dim umT5 features
t = sample_logit_normal(0, 1) # timestep
x_0 = torch.randn_like(x_1) # noise
x_t = t * x_1 + (1 - t) * x_0 # Eq. (1)
v_t = x_1 - x_0 # Eq. (2) ground truth velocity
# FPS embedding (Stage 1-3, 去除于HQ SFT)
f_embed = FreqEmbedding(batch.fps)
u_pred = u_θ(x_t, c, t, f_embed) # model prediction
loss = MSE(u_pred, v_t) # Eq. (3)
loss.backward()
optimizer.step()3.4 后训练
3.4.1 强化学习 (Motion-specific DPO)
问题: 生成模型在大幅度形变动作上表现差,可能违反物理规律。
半自动 Preference Data Pipeline:
-
人工标注数据: 建立运动失败分类体系(过大/不足运动幅度、主体扭曲、局部细节损坏、违反物理、不自然运动)→ 生成对应 prompt → 每个 prompt 用历史 checkpoint 生成 4 个样本 → 配对后人工标注 Better/Worse/Tie。约 80% 数据对在过滤阶段被丢弃(质量要求高)
-
自动生成数据:
- Ground Truth 收集: 用 CLIP 特征余弦相似度匹配 prompt 对应的真实视频作为 chosen sample
- 渐进式失真创建: 对真实视频添加可控运动失真
- V2V: 直接 noisy latent 反演(最低失真)
- I2V: 首帧引导重建(中等失真)
- T2V: 纯文本重生成(最高失真)
- 还可通过帧采样率操纵、Tea-Cache 噪声注入、视频倒放等产生特定运动缺陷

Figure 7a 解读: V2V 失真示例——对足球运动员原始视频通过 noisy latent 直接反演产生轻微画质退化(细节模糊、色彩偏差),保留整体运动但降低局部质量。上排为原始视频帧序列,下排为 V2V 失真后的视频帧序列。

Figure 7b 解读: [注意:此图文件 sample_pair-2.png 与 sample_pair-1.png 完全相同,均为足球运动员的 V2V 失真示例。图片未正确替换为论文中的 I2V 失真示例。] 论文原文描述应为:I2V 失真示例——以首帧为引导重建视频,人物身体出现严重变形(肢体扭曲),展示中等程度的运动质量退化。

Figure 7c 解读: 失真示例——展示原始视频(上排,街道场景中的行人和轮椅/电动车)与对应的失真视频(下排,通过 D?V 方式重建产生运动和细节失真)。该图展示了较高程度的运动质量退化。
Reward Model 训练:
- 基座: Qwen2.5-VL-7B-Instruct
- 训练数据: 30k sample pairs(来自上述 pipeline)
- 无 context(motion quality 是 context-agnostic 的,不包含 prompt)
- 使用 Bradley-Terry model with ties (BTT) 训练:
Flow-DPO 训练:
其中:
- 为温度系数
- 为当前模型对 chosen/rejected 样本的预测
- 为参考模型的预测
- 每阶段 20k 训练数据,共 3 阶段 DPO 训练
- 当模型轻松区分 chosen/rejected 时(性能平台),刷新 reference model 并用 reward model 重新排序生成新数据
# Motion-specific DPO 训练
# Input: 预训练模型 u_θ, Reward Model R, prompt集合 P
for dpo_stage in range(3): # 3阶段迭代DPO
# Step 1: 生成训练数据
pairs = []
for prompt in P: # concept-balanced + motion-specific prompts
videos = [u_θ.generate(prompt) for _ in range(8)]
scores = [R.score(v) for v in videos]
chosen = videos[argmax(scores)]
rejected = videos[argmin(scores)]
pairs.append((chosen, rejected, prompt))
# Step 2: DPO训练
u_ref = copy(u_θ) # 冻结参考模型
for (v_w, v_l, prompt) in pairs: # 20k pairs per stage
t = sample_timestep()
c = encode_text(prompt)
noise = sample_noise()
# 当前模型loss
L_model_w = 0.5 * ||u_θ(noisy(v_w, t), c, t) - gt_velocity(v_w)||²
L_model_l = 0.5 * ||u_θ(noisy(v_l, t), c, t) - gt_velocity(v_l)||²
# 参考模型loss (no grad)
L_ref_w = 0.5 * ||u_ref(noisy(v_w, t), c, t) - gt_velocity(v_w)||²
L_ref_l = 0.5 * ||u_ref(noisy(v_l, t), c, t) - gt_velocity(v_l)||²
# Flow-DPO loss (Eq. 4)
delta_model = L_model_w - L_model_l
delta_ref = L_ref_w - L_ref_l
loss = -log_sigmoid(-β/2 * (delta_model - delta_ref))
loss.backward()
# Step 3: 刷新reference model
u_ref = copy(u_θ)3.4.2 Diffusion Forcing
核心思想: 将预训练的全序列扩散模型微调为 Diffusion Forcing Transformer,实现无限长度视频生成。每个 token(帧)被赋予独立的噪声级别,训练时模型学习”去遮罩”任意噪声组合。
关键约束: 使用非递减噪声调度 (non-decreasing noise schedule),将搜索空间从 降至 。
Frame-oriented Probability Propagation (FoPP) 时间步调度器:
- Uniform Sampling: 均匀采样帧索引 和时间步
- Dynamic Programming: 定义 为从帧 开始、时间步 的合法时间步序列数量
边界条件: ,
- Visit Probability: 帧 之后的帧访问时间步 的概率:
- Timestep Sampling: 基于计算的概率逐帧采样时间步
Adaptive Difference (AD) 推理调度器:
- : 同步扩散(全帧同噪声)
- : 纯自回归生成
- 较小 : 相邻帧更相似;较大 : 内容变化更大
推理时的 Causal Attention: 训练后可将双向注意力替换为因果注意力,缓存历史帧的 K, V 特征,显著降低计算开销。
# Diffusion Forcing 训练 (FoPP Scheduler)
# Input: 预训练全序列扩散模型 u_θ, 视频帧序列 x[1..F], 最大时间步 T
# FoPP: 为每帧采样非递减时间步序列
def sample_timesteps_fopp(F, T):
f = uniform_sample(1, F) # 锚定帧
t_f = uniform_sample(1, T) # 锚定时间步
timesteps = [0] * F
timesteps[f] = t_f
# DP计算概率 (向后)
d_s = init_dp_table(F, T) # d[*,T]=1, d[F,*]=1
for i in range(f+1, F):
for j in range(t_f, T+1):
d_s[i][j] = d_s[i][j-1] + d_s[i-1][j] # 非递减约束
# DP计算概率 (向前, 类似但用d_e, 非递增)
d_e = init_dp_table_reverse(F, T)
# 按概率逐帧采样
for i in range(f+1, F):
prob_k = d_s[i][k] / sum(d_s[i][j] for j in range(t_f, T+1))
timesteps[i] = sample_from(prob_k)
for i in range(f-1, -1, -1):
prob_k = d_e[i][k] / sum(d_e[i][j] for j in range(1, t_f+1))
timesteps[i] = sample_from(prob_k)
return timesteps # 非递减序列
# 训练循环
for video_frames in dataset:
timesteps = sample_timesteps_fopp(F, T) # 帧级时间步
x_0 = [randn_like(frame) for frame in video_frames] # 噪声
x_t = [t*x1 + (1-t)*x0 for t, x1, x0 in zip(timesteps, video_frames, x_0)]
# 模型预测: 利用清洁帧作为条件恢复噪声帧
v_pred = u_θ(x_t, text_cond, timesteps) # 帧级条件 + 因果信息流
v_gt = [x1 - x0 for x1, x0 in zip(video_frames, x_0)]
loss = MSE(v_pred, v_gt)
loss.backward()# Diffusion Forcing 无限长度推理
# Input: 文本 prompt, 目标总帧数 N, 窗口帧数 f_new, 重叠帧数 f_prev=17
generated_frames = []
for iter in range(ceil(N / f_new)):
if iter == 0:
# 首次: 纯文本条件生成
condition = None
else:
# 后续: 取上一段最后 f_prev 帧作为条件
condition = generated_frames[-f_prev:]
# 稳定化: 对条件帧注入轻微噪声 (addnoise_condition=20)
condition = add_slight_noise(condition, level=20)
# Adaptive Difference 调度
new_frames = denoise_with_ad_scheduler(
model=u_θ, prompt=prompt, condition=condition,
num_frames=f_new, ar_step=s, # s控制自回归程度
causal_block_size=5 # 因果块大小
)
generated_frames.extend(new_frames)
return generated_frames # 理论上无限长3.4.3 高质量 SFT
- 540p SFT: 预训练后、RL 前执行。使用 concept-balanced 数据,仅用 fps24 视频,去除 FPS embedding。作为后续阶段的初始化
- 720p SFT: Diffusion Forcing 训练后执行。使用人工筛选的高质量 concept-balanced 数据,提升分辨率和视觉保真度
3.5 基础设施优化
训练优化:
- Memory: Attention block fp32→bf16(节省 50%),Gradient Checkpointing,Activation Offloading 到 CPU
- 训练稳定性: 自修复框架(故障检测→资源重新分配→Checkpoint 恢复)
- 并行策略: FSDP 分布式存储 DiT 权重和优化器状态;720p 训练使用 Sequence Parallel (DeepSpeed Ulysses) 解决显存碎片
推理优化:
- VRAM: RTX 4090 (24GB) 部署 14B 模型,FP8 量化 + parameter-level offloading
- Quantization: FP8 dynamic quantization on linear layers (1.10x speedup);sageAttn2-8bit on attention (1.30x faster)
- 多 GPU 并行: Content Parallel + CFG Parallel + VAE Parallel,4→8 GPU 延迟降低 1.8x
- Distillation: DMD 蒸馏,4-step generator,fake/real score generator 更新比 5:1
Distillation 梯度更新:
4. Experimental Setup (实验设置)
评估基准
SkyReels-Bench (自建):
- 1,020 text prompts
- 四维度评估: Instruction Adherence、Motion Quality、Consistency、Visual Quality
- 1-5 分人工评分,20 名专业评估员
- 同时评估 T2V 和 I2V
VBench 1.0 (公开):
- 使用 longer prompt 版本
- 50 inference steps, guidance scale = 6
对比模型
| 类型 | 模型 |
|---|---|
| 闭源 | Runway-Gen3 Alpha, Hailuo-01, Kling-1.6 (STD/Pro), Runway-Gen4 |
| 开源 | CogVideoX1.5-5B, OpenSora-2.0, HunyuanVideo-13B, Wan2.1-14B |
模型配置
- 架构: 基于 Wan2.1,DiT 从头训练,VAE/Text Encoder 保留预训练权重
- 模型规模: 1.3B, 5B, 14B
- Diffusion Forcing 版本: 1.3B-540P, 14B-540P, 14B-720P
- Text encoder: umT5 (512-dim)
- 推理: UniPCMultistepScheduler, flow_shift=8.0 (T2V) / 5.0 (I2V)
- 显存需求: 1.3B@540p ~14.7GB, 14B@540p ~51.2GB
5. Experimental Results (实验结果)
5.1 SkyReels-Bench T2V 结果
| Model | Average | Instruction Adherence | Consistency | Visual Quality | Motion Quality |
|---|---|---|---|---|---|
| Runway-Gen3 Alpha | 2.53 | 2.19 | 2.57 | 3.23 | 2.11 |
| HunyuanVideo-13B | 2.82 | 2.64 | 2.81 | 3.20 | 2.61 |
| Kling-1.6 STD | 2.99 | 2.77 | 3.05 | 3.39 | 2.76 |
| Hailuo-01 | 3.0 | 2.8 | 3.08 | 3.29 | 2.74 |
| Wan2.1-14B | 3.12 | 2.91 | 3.31 | 3.54 | 2.71 |
| SkyReels-V2 | 3.14 | 3.15 | 3.35 | 3.34 | 2.74 |
关键发现: SkyReels-V2 在 Instruction Adherence 上显著领先(3.15 vs 次优 2.91),Consistency 最高(3.35),Motion Quality 竞争力强(2.74,接近 Kling 的 2.76)。Visual Quality 略低于 Wan2.1 但差距很小。
5.2 VBench 1.0 T2V 结果
| Model | Total Score | Quality Score | Semantic Score |
|---|---|---|---|
| CogVideoX1.5-5B | 80.3% | 80.9% | 77.9% |
| OpenSora-2.0 | 81.5% | 82.1% | 78.2% |
| HunyuanVideo-13B | 82.7% | 84.4% | 76.2% |
| Wan2.1-14B | 83.7% | 84.2% | 81.4% |
| SkyReels-V2 | 83.9% | 84.7% | 80.8% |
关键发现: SkyReels-V2 取得开源模型最高 Total Score (83.9%) 和 Quality Score (84.7%)。Semantic Score (80.8%) 略低于 Wan2.1 (81.4%),但在人工评估中优于 Wan2.1,差距归因于 V-Bench 对 shot-scenario semantic adherence 评估不足。
5.3 I2V 结果 (SkyReels-Bench)
| Model | Average | Instruction Adherence | Consistency | Visual Quality | Motion Quality |
|---|---|---|---|---|---|
| HunyuanVideo-13B | 2.84 | 2.97 | 2.95 | 2.87 | 2.56 |
| Wan2.1-14B | 2.85 | 3.10 | 2.81 | 3.00 | 2.48 |
| Hailuo-01 | 3.05 | 3.31 | 2.58 | 3.55 | 2.74 |
| Kling-1.6 Pro | 3.4 | 3.56 | 3.03 | 3.58 | 3.41 |
| Runway-Gen4 | 3.39 | 3.75 | 3.2 | 3.4 | 3.37 |
| SkyReels-V2-DF | 3.24 | 3.64 | 3.21 | 3.18 | 2.93 |
| SkyReels-V2-I2V | 3.29 | 3.42 | 3.18 | 3.56 | 3.01 |
关键发现: SkyReels-V2-I2V (3.29) 在开源模型中 SOTA,显著优于 HunyuanVideo-13B (2.84) 和 Wan2.1 (2.85)。与闭源 Kling-1.6 Pro (3.4) 和 Runway-Gen4 (3.39) 性能接近。
5.4 无限长度生成
Figure 8 解读: 单一 prompt 超长视频生成示例(超过 30 秒)。展示了 5 个不同场景(东京街头女性、沙漠公路摩托车、赛博朋克机械猫头鹰、水母、白天鹅),每个场景从 0s 到 30s 保持视觉一致性和主体连贯性,证明 Diffusion Forcing 框架的长视频生成能力。
Figure 9 解读: 序列 prompt 超长视频生成示例。通过多段文本 prompt 控制视频内容的时序演变:花蕾”轻轻摇摆→慢慢绽放→开始枯萎”,小女孩”玩水→挥手→突然哭泣”,女性”开心→变得悲伤→非常伤心哭泣”,引擎”启动→冒烟→产生火花”,玛丽莲梦露”开心大笑→收敛笑容→面无表情”。展示了模型对叙事序列的精确控制能力。
5.5 应用场景
- Story Generation: 滑动窗口方式,条件帧 + 新生成帧 ,条件帧注入轻微噪声防止误差累积
- Image-to-Video: 两种方案——SkyReels-V2-I2V (微调 Wan2.1 I2V,仅 10,000 iterations on 384 GPUs) 和 SkyReels-V2-DF (利用 Diffusion Forcing 首帧条件)
- Camera Director: 从 SFT 数据中精选 100万 camera motion 平衡样本,384 GPUs 训练 3,000 iterations
- Elements-to-Video: 通过 SkyReels-A2 实现多视觉元素(角色+物体+场景)组合生成
6. Source Code 映射
GitHub: https://github.com/SkyworkAI/SkyReels-V2
| 论文组件 | 代码路径/模块 | 说明 |
|---|---|---|
| DiT Backbone | skyreels_v2_infer/modules/ | Wan2.1 架构 DiT, Diffusion Forcing Transformer |
| VAE | AutoencoderKLWan (diffusers) | 视频编解码 |
| Scheduler | skyreels_v2_infer/scheduler/ + UniPCMultistepScheduler | FoPP + AD scheduler |
| T2V Pipeline | skyreels_v2_infer/pipelines/ + SkyReelsV2DiffusionForcingPipeline | 文本到视频推理 |
| I2V Pipeline | SkyReelsV2DiffusionForcingImageToVideoPipeline | 图像到视频推理 |
| V2V Pipeline | SkyReelsV2DiffusionForcingVideoToVideoPipeline | 视频续写推理 |
| 推理入口 | generate_video.py, generate_video_df.py | 标准/Diffusion Forcing 推理 |
| SkyCaptioner-V1 | skycaptioner_v1/ | 结构化视频描述模型 |
| 分布式推理 | skyreels_v2_infer/distributed/ | Content/CFG/VAE Parallel |
| 模型权重 | HuggingFace: Skywork/SkyReels-V2-* | 1.3B/14B, 540P/720P 多版本 |
关键推理参数:
--ar_step 0: 同步生成(~10s 视频)--ar_step 5 --causal_block_size 5: 异步生成(~30s 视频,更好一致性)--overlap_history 17: 长视频重叠帧数--addnoise_condition 20: 条件帧噪声注入强度--teacache_thresh 0.3: 推理加速阈值--flow_shift 8.0(T2V) /5.0(I2V): 流匹配偏移