使用AnimateDiff和插值器生成流畅AI视频

73 阅读4分钟

使用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("")')"