Stable Video Diffusion 的 SVD-XT 可以在本地用一张图片生成短视频帧。Diffusers 负责加载权重和推理,再将帧导出为 MP4。它适合创意短片试验;这个模型不接受文本提示来精确控制动作,也不保证人脸、文字或物体运动符合预期。
本文面向会运行 Python、有可用 CUDA GPU 的用户。依据 2026 年 10 月 1 日核对的 Diffusers 0.35.1 指南及 SVD-XT 模型卡编写,未下载模型运行,没有测显存、耗时或生成效果。示例输入应是有权使用的创作图片,不用于重建真实事件。

先确认权重与 GPU 环境
本文选择 stabilityai/stable-video-diffusion-img2vid-xt。官方模型卡说明 XT 版本生成 25 帧、使用 576×1024 的视频尺寸;普通版本与 XT 不能混同。许可为专门条款,商业用途应从模型卡的许可链接核对最新条件,不能把“可下载”当成无条件商业授权。
先按 PyTorch 安装页配置匹配系统与驱动的 CUDA 版本,在同一个 Python 环境确认检查为 True,再安装下列依赖。首次加载要联网下载权重;遇到访问条件,按模型页面处理,不能靠改成另一个未核对仓库替代。
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
python -m pip install diffusers==0.35.1 transformers==4.56.2 accelerate==1.10.1 safetensors pillow imageio imageio-ffmpeg
CPU offload 让部分权重暂放 CPU,实际仍用 GPU 推理,不是纯 CPU 部署。是否能够运行还取决于显存、内存、精度和软件版本,本文没有给出“某个显存必能跑”的结论。
准备图片,避免拉伸
把自有风景或简单物体图保存为 input.png。先用轮廓清楚、无小字、没有多个拥挤人物的图片练习。下面通过居中裁切保持比例,转为 1024×576,并保存 prepared.png。若裁切会丢掉主体,先在编辑器调整画面或补边;不要直接把任意比例图片拉成这个尺寸。
运行推理并导出帧
保存为 svd_demo.py,运行 python svd_demo.py。官方 SVD 指南给出 StableVideoDiffusionPipeline、CPU offload 和 export_to_video 的用法。脚本另外保存每帧,方便逐帧检查。
from pathlib import Path
import json
import torch
from PIL import Image, ImageOps
from diffusers import StableVideoDiffusionPipeline
from diffusers.utils import export_to_video
with Image.open("input.png") as original:
image = ImageOps.exif_transpose(original).convert("RGB")
image = ImageOps.fit(image, (1024, 576),
method=Image.Resampling.LANCZOS)
image.save("prepared.png")
model_id = "stabilityai/stable-video-diffusion-img2vid-xt"
pipe = StableVideoDiffusionPipeline.from_pretrained(
model_id, torch_dtype=torch.float16, variant="fp16",
)
pipe.enable_model_cpu_offload()
pipe.unet.enable_forward_chunking()
frames = pipe(
image, decode_chunk_size=8,
generator=torch.Generator(device="cpu").manual_seed(42),
).frames[0]
out = Path("svd_frames")
out.mkdir(exist_ok=True)
for index, frame in enumerate(frames):
frame.save(out / f"{index:03d}.png")
export_to_video(frames, "svd_result.mp4", fps=7)
settings = {"model": model_id, "seed": 42, "prepared_size": list(image.size),
"frame_count": len(frames), "export_fps": 7, "decode_chunk_size": 8}
Path("svd_settings.json").write_text(
json.dumps(settings, ensure_ascii=False, indent=2), encoding="utf-8",
)
print("实际输出帧数:", len(frames))
decode_chunk_size 指 VAE 解码时一次处理的帧量,不是最终片长。显存不足可按指南进一步减小它;降到 1 可能增加闪烁,所以要连同画面检查。forward_chunking 是另一个内存优化选项,仍不保证设备一定能跑。
先检查帧数和尺寸,再检查画面
运行后应有 prepared.png、svd_frames、svd_result.mp4 和 svd_settings.json。先确认打印帧数与 JSON 一致、PNG 可以打开,再用播放器检查 MP4。若当前 XT 配置输出 25 帧并以 7 fps 导出,按帧数除以帧率,片长约为 3.57 秒;这是配置对应的检查规则,不是本文实测结果。
ffprobe -v error -count_frames -show_entries stream=index,codec_type,width,height,avg_frame_rate,nb_read_frames:format=duration -of json svd_result.mp4
这条命令需要 FFmpeg 的 ffprobe 已在 PATH 中。检查视频流是否为 1024×576、7 fps,以及解码帧数是否与 settings 对应。本例只生成画面,没有生成语音或音乐,输出无声是正常的。
接着逐帧对照 prepared.png,检查物体数量有没有改变、背景线条是否摇晃、人物脸和手是否变形,以及结尾主体是否移出画面。小字变成乱码、对象分裂或脸部扭曲时,应淘汰结果;MP4 能播放不等于内容合格。
运动太少或变形严重时怎样调整
指南提供 motion_bucket_id 和 noise_aug_strength 来影响运动与对原图的偏离。先保留同一图片、种子和其他设置,一次只调整一个参数,并另存帧和 JSON。增加运动也可能增加变形;参数不等于方向、轨迹或动作时长的精确控制。
- 生成前就主体被裁掉:修 prepared.png 的构图,模型参数无法恢复被裁切输入。
- 显存不足:先用 offload、forward_chunking 和较小 decode_chunk_size;仍失败时记录实际设备与错误,不把重试次数当作验证。
- 结果像静态照片:模型卡说明可能出现运动很少的输出。简化输入并做小范围参数对照,但不保证一定改善。
- 想指定“镜头向左、人物举手”:SVD-XT 本身没有文本动作控制入口,需选择支持相应控制方式的其他模型或工作流。
只在通过技术检查与视觉审核后再给短片配音、加字幕或做后续剪辑;模型输出不能作为真实人物或事件的事实记录。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31960.html