StoryMem:用记忆机制生成连贯的多镜头长视频故事
近年来,AI视频生成技术发展迅速,从短短几秒的单镜头片段,到现在能生成具有电影质感的分钟级视频,已经取得了很大进步。但真正讲好一个故事,需要多个镜头连贯衔接,人物、外貌、场景和风格保持一致。这正是许多现有方法面临的难题。
StoryMem是一个新提出的框架,它受人类记忆机制启发,将长视频故事生成转化为逐镜头迭代合成过程,同时用显式的视觉记忆来保持跨镜头的连贯性。它基于预训练的单镜头视频扩散模型,只需轻量级微调,就能生成高质量的多镜头叙事视频。
如果你对AI视频生成感兴趣,尤其是想生成人物一致、情节连贯的长故事视频,这篇文章会一步步解释StoryMem的工作原理、优势,以及如何自己上手运行代码。
StoryMem是什么?为什么它重要?
简单来说,StoryMem能根据一个带逐镜头文本描述的故事脚本,生成大约一分钟长、多镜头的叙事视频。视频中人物高度一致,视觉质量接近电影级。
(以上是StoryMem官方teaser图,展示了多个故事示例:从幻想场景到现实生活,人物在不同镜头中保持一致。)
传统方法要么联合训练一个大模型处理所有镜头(计算成本高,容易牺牲视觉质量),要么逐帧独立生成(人物和场景容易漂移,镜头间过渡生硬)。StoryMem走了一条中间道路:保持单镜头模型的高质量,同时引入“记忆库”来传递关键视觉信息。
核心创新是Memory-to-Video (M2V) 设计:生成每个镜头时,都会参考之前镜头提取的关键帧作为记忆条件。这样,后续镜头自然继承前面的角色外貌、场景布局和风格。
实验显示,StoryMem在跨镜头一致性上显著优于以往方法,同时保留了高美学质量和对文本提示的忠实度。
StoryMem如何工作?核心机制详解
StoryMem的流程是逐镜头生成(shot-by-shot),类似于导演一部电影时一镜一镜拍摄,但AI会自动维护上下文。
1. 记忆库(Memory Bank)的角色
-
记忆库存储之前生成的镜头中提取的关键帧。 -
这些关键帧代表重要视觉元素:人物外貌、服装、环境等。 -
记忆库大小有限(默认最多10个镜头),动态更新,保持紧凑高效。
2. Memory-to-Video (M2V) 生成过程
StoryMem基于Wan2.2视频扩散模型(一个强大的文本到视频/图像到视频MoE模型)。
-
对于第一个镜头:用标准的文本到视频(T2V)模型生成,作为初始记忆。 -
对于后续镜头:将记忆关键帧编码后,与当前镜头噪声潜在表示拼接,并使用负RoPE偏移注入位置信息。 -
只用LoRA微调即可实现这种记忆条件,而无需从头训练大模型。
这样,模型在生成当前镜头时,就能“回忆”之前的内容,确保人物不会突然变脸,场景自然演变。
(示例生成的视频帧序列,展示多镜头一致性。)
3. 关键帧提取与记忆更新
生成一个镜头后,需要从中提取可靠的关键帧加入记忆库:
-
语义选择:用CLIP特征计算与当前提示的相关性,选择最匹配的帧。 -
美学过滤:用HPSv3评分过滤低质量帧,确保记忆稳定可靠。
这样避免了记忆污染,保证长视频中一致性逐步增强。
4. 支持平滑镜头过渡的扩展
-
MI2V:记忆 + 第一帧图像条件,当无场景切(scene_cut=False)时,用于平滑连接相邻镜头。 -
MM2V:记忆 + 前5个运动帧条件,进一步提升动态过渡自然度。 -
MR2V:如果提供参考图像,可作为初始记忆,实现自定义角色生成。
这些扩展让StoryMem不止于纯文本驱动,还能结合图像控制。
如何自己运行StoryMem?完整安装与使用指南
代码已开源,好消息是只需一台带GPU的机器就能运行。下面是详细步骤。
环境准备
git clone --single-branch --branch main git@github.com:Kevin-thu/StoryMem.git
cd StoryMem
conda create -n storymem python=3.11
conda activate storymem
pip install -r requirements.txt
pip install flash_attn
模型下载
需要三个模型,从Hugging Face下载:
| 模型名称 | 下载链接 | 描述 |
|---|---|---|
| Wan2.2 T2V-A14B | https://huggingface.co/Wan-AI/Wan2.2-T2V-A14B | 文本到视频基础模型 |
| Wan2.2 I2V-A14B | https://huggingface.co/Wan-AI/Wan2.2-I2V-A14B | 图像到视频基础模型 |
| StoryMem M2V LoRA | https://huggingface.co/Kevin-thu/StoryMem | 记忆到视频LoRA权重 |
推荐用命令行下载:
pip install "huggingface_hub[cli]"
huggingface-cli download Wan-AI/Wan2.2-T2V-A14B --local-dir ./models/Wan2.2-T2V-A14B
huggingface-cli download Wan-AI/Wan2.2-I2V-A14B --local-dir ./models/Wan2.2-I2V-A14B
huggingface-cli download Kevin-thu/StoryMem --local-dir ./models/StoryMem
提供的LoRA有两个变体:
-
Wan2.2-MI2V-A14B:支持M2V和MI2V -
Wan2.2-MM2V-A14B:支持M2V和MM2V
运行示例
直接运行:
bash run_example.sh
脚本会:
-
用T2V生成第一个镜头作为初始记忆。 -
逐镜头用M2V生成剩余部分,自动提取关键帧更新记忆。
关键参数(可在脚本中修改):
| 参数 | 说明 | 默认值 |
|---|---|---|
| story_script_path | 故事脚本JSON路径 | 示例文件 |
| output_dir | 输出视频保存目录 | ./results |
| t2v_model_path | T2V模型路径 | ./models/Wan2.2-T2V-A14B |
| i2v_model_path | I2V模型路径 | ./models/Wan2.2-I2V-A14B |
| lora_weight_path | LoRA权重路径 | ./models/StoryMem |
| seed | 随机种子 | 0 |
| size | 输出分辨率 | 832×480 |
| max_memory_size | 记忆库最大镜头数 | 10 |
| t2v_first_shot | 用T2V生成第一个镜头 | True |
| mi2v / mm2v | 启用平滑过渡模式 | False |
生成后,你会在output_dir看到每个镜头的视频和最终拼接的长视频。
(更多生成示例,展示不同风格的故事视频。)
ST-Bench:多镜头故事视频的新基准
为了公平评估多镜头故事生成,作者发布了ST-Bench基准。
-
用GPT-5生成30个多样化长故事脚本。 -
每个脚本包含:故事概述、8-12个镜头级文本提示、场景切指示(True/False)。 -
总计300个详细视频提示,覆盖人物、场景、动态事件、镜头类型等。 -
风格多样:现实、童话、古今、中西等。
基准位于代码仓库的./story文件夹。你可以用它测试自己的方法,或创建自定义脚本。
如何创建自己的故事脚本?
脚本必须是JSON格式,包含:
-
story_overview:故事简要总结 -
scenes:列表,每个scene有scene_num、video_prompts(文本提示列表)、cut(True/False列表)
每个video_prompt:
-
1-4句,描述人物(外貌、服装)、动作、场景、氛围、镜头类型(close-up、wide等)。 -
相邻cut=False的提示必须能自然平滑衔接。 -
第一条提示cut必须为True。
为了更好一致性,建议在每个提示中明确描述人物特征。
示例脚本结构(简化版):
{
"story_overview": "一个街头音乐家的日常故事...",
"scenes": [
{
"scene_num": 1,
"video_prompts": ["提示1", "提示2"],
"cut": [true, false]
},
...
]
}
完整示例见文档中的“The Street Musician”。
StoryMem的局限性与未来方向
任何技术都有改进空间。StoryMem当前的主要局限:
-
在多人物复杂场景中,记忆检索可能模糊,导致人物混淆。解决办法:在提示中更明确描述人物。 -
平滑过渡虽已改善,但当相邻镜头运动速度差异大时,仍可能不自然。未来可通过重叠更多帧来优化。
总体而言,StoryMem代表了向连贯长视频叙事的重要一步。它证明了:通过巧妙的记忆机制,无需昂贵的全长训练,就能让单镜头模型讲好长故事。
常见问题解答(FAQ)
StoryMem支持多长视频?
默认每个镜头5秒,8-12个镜头,大约40-60秒。理论上可更长,受内存大小限制。
需要多强的GPU?
基于Wan2.2-A14B,推荐至少24GB显存的GPU(如A100或RTX 4090)。
可以用自己的参考图像生成自定义角色吗?
是的,使用MR2V模式:将参考图像放在output_dir,命名如00_00_keyframe0.jpg,并设置m2v_first_shot。
生成速度如何?
单镜头几分钟到十几分钟,视分辨率和采样步数。全故事视镜头数而定。
代码基于哪个基础模型?
Wan2.2(开源大型视频生成模型),感谢其优秀工作。
如何引用StoryMem?
如果用于研究,请引用:
@article{zhang2025storymem,
title={StoryMem: Multi-shot Long Video Storytelling with Memory},
author={Zhang, Kaiwen and Jiang, Liming and Wang, Angtian and Fang, Jacob Zhiyuan and Zhi, Tiancheng and Yan, Qing and Kang, Hao and Lu, Xin and Pan, Xingang},
journal={arXiv preprint},
volume={arXiv:2512.19539},
year={2025}
}
如果你正在探索AI视频生成,StoryMem值得一试。它不只是一项技术,更是一种思考方式:用“记忆”桥接短片段,构建长叙事。未来,随着基础模型继续进步,这种记忆机制很可能成为长视频生成的标准范式。

