使用AnimateDiff和插值器生成流畅AI生成的视频
在这篇博客文章中,我们将展示如何结合AnimateDiff和ST-MFNet帧插值器,从文本提示创建流畅逼真的视频。您还可以使用新的控制功能指定相机运动。
您将从文本提示开始,生成视频,再到高帧率视频。
使用AnimateDiff创建动画
AnimateDiff是一个通过添加运动建模模块来增强现有文生图模型的模型。该运动模块在视频剪辑上训练,以捕捉真实的运动动态。它使Stable Diffusion文生图模型能够创建从动漫到逼真照片的动画输出。
您可以在某平台上尝试AnimateDiff。
控制相机运动
LoRAs提供了一种高效的方法来加速大模型的微调过程,而无需使用太多内存。它们在Stable Diffusion模型中最为知名,它们是模型针对某种风格或主题的轻量级扩展。相同的概念可以应用于AnimateDiff运动模块。
原始的AnimateDiff作者针对特定的相机运动训练了8个新的LoRA:
- 向上平移
- 向下平移
- 向左平移
- 向右平移
- 放大
- 缩小
- 顺时针旋转
- 逆时针旋转
使用某平台托管的模型,您可以使用所有这些功能,并选择它们的影响强度(在0到1之间)。您还可以组合多个相机运动和强度来创建特定的效果。
使用ST-MFNet插值视频
插值会向视频添加额外的帧。这增加了帧速率并使视频更流畅。
ST-MFNet是一个“用于帧插值的时空多流网络”,这是一种花哨的说法,表示它是一个为视频生成额外帧的机器学习模型。它通过研究空间(物体位置)和时间(从一帧到另一帧)的变化来实现这一点。“多流”部分意味着它考虑了事物从一帧到下一帧移动或变化的多种方式。ST-MFNet与AnimateDiff视频配合得非常好。
您可以使用ST-MFNet将2秒、每秒16帧(fps)的AnimateDiff视频增加到32或64 fps:
您还可以将其变成慢动作4秒视频:
使用API创建工作流程
您可以使用某平台的API将多个模型组合到一个工作流程中,将一个模型的输出用作另一个模型的输入。
Python
import replicate
# 使用令牌初始化某平台API
replicate.init(api_token='YOUR_REPLICATE_API_TOKEN')
print("使用AnimateDiff生成视频")
output = replicate.run(
"zsxkib/animate-diff:269a616c8b0c2bbc12fc15fd51bb202b11e94ff0f7786c026aa905305c4ed9fb",
input={"prompt": "a medium shot of a vibrant coral reef with a variety of marine life"}
)
video = output[0]
print(video)
print("使用ST-MFNet插值视频")
videos = replicate.run(
"zsxkib/st-mfnet:2ccdad61a6039a3733d1644d1b71ebf7d03531906007590b8cdd4b051e3fbcd7",
input={"mp4": video, "keep_original_duration": True, "framerate_multiplier": 4},
)
video = list(videos_list)[-1]
print(video)
JavaScript
import Replicate from "replicate";
const replicate = new Replicate({
auth: process.env.REPLICATE_API_TOKEN,
});
console.log("使用AnimateDiff生成视频");
const output = await replicate.run(
"zsxkib/animate-diff:269a616c8b0c2bbc12fc15fd51bb202b11e94ff0f7786c026aa905305c4ed9fb",
{ input: { prompt: "a medium shot of a vibrant coral reef with a variety of marine life" } }
);
const video = output[0];
console.log(video);
console.log("使用ST-MFNet插值视频");
const videos = await replicate.run(
"zsxkib/st-mfnet:2ccdad61a6039a3733d1644d1b71ebf7d03531906007590b8cdd4b051e3fbcd7",
{
input: {
mp4: video,
keep_original_duration: true,
framerate_multiplier: 4
}
}
);
console.log(videos[1]);
CLI
您还可以使用某平台的CLI创建工作流程:
export REPLICATE_API_TOKEN="..."
replicate run zsxkib/st-mfnet --web \
keep_original_duration=true \
framerate_multiplier=4 \
mp4="$(replicate run zsxkib/animate-diff \
prompt="a medium shot of a vibrant coral reef with a variety of marine life" | \
jq -r '.output | join("")')"