AnimateDiff简介
Stable Diffusion的AnimateDiff插件是一个用于生成和操作图像的强大工具,它属于Stable Diffusion模型的一个扩展。
1. 功能和用途
图像生成与修改: AnimateDiff插件能够基于用户的描述生成新的图像,或者对现有图像进行修改和增强。 动画创建: 这个插件的一个主要特点是它能够创建动画。用户可以指定一个系列的图像变化,插件会生成一系列平滑过渡的图像,从而创建出动画效果。2. 工作原理
基于文本的图像生成: 用户提供文本描述,插件根据这些描述生成相应的图像。 图像转换: AnimateDiff可以将已有图像根据用户指定的参数进行变换,比如改变图像中的对象、颜色或风格。 帧生成: 对于动画,插件会生成一系列图像帧,这些帧在视觉上平滑过渡,形成动画效果。3. 应用场景
艺术创作: 艺术家可以使用这个插件来创建独特的视觉艺术作品,包括动画。 多媒体制作: 在视频和游戏制作中,AnimateDiff可以用来快速生成复杂的图像和动画场景。 个性化内容: 用户可以定制个性化的图像和动画,用于个人项目或社交媒体内容。4. 使用简便性
用户界面: AnimateDiff通常配有直观的用户界面,使得即使是非专业用户也能轻松使用。 灵活性: 插件提供多种参数和选项,用户可以根据需要调整,以达到期望的效果。5. 技术要求
硬件要求: 高级图像生成和动画制作可能需要较强的计算能力,因此可能需要高性能的硬件。 软件兼容性: AnimateDiff需要与Stable Diffusion模型一起使用,可能还需要其他软件支持。总体来说,Stable Diffusion的AnimateDiff插件是一个功能强大且多用途的工具,适用于从专业艺术家到普通爱好者的广泛用户群体。通过这个插件,用户可以实现高度个性化和创意的图像和动画制作。
AnimateDiff的github主页:https://github.com/continue-revolution/sd-webui-animatediff
安装插件主体
方法一
在stable diffusion的“扩展(extensions)”菜单,选择“可用(available)”,点击“加载自(load from)”,搜索“animatediff”,点击“安装(install)”
方法二
访问animatediff的github主页,点击绿色按钮“code”,点击复制HTTPS的按钮复制animatediff的库链接
打开stable diffusion,找到“扩展(extensions)”菜单,选择“从网址安装(install from URL)”子菜单,将上面复制的库网址粘贴到“扩展的git仓库网址(URL ro extension’s git repository)”,最后点击“安装(install)”
方法三
访问animatediff的github主页,点击绿色按钮“code”,点击“Download ZIP”,将animatediff的 库ZIP压缩包下载到本地
将下载的ZIP压缩包剪切到“\ stable-diffusion-webui\extensions”文件夹下面,然后右键选择“解压到当前文件夹”
animatediff本体安装成功
这一步安装成功之后,就可以在stable diffusion的文生图和图生图都可以找到“AnimateDiff”这个插件,位置如下:
下载安装模型
ainimateDiff的huggingface的模型下载页面:https://huggingface.co/guoyww/animatediff/tree/main
网盘下载(备用):model、animatediff
下载3个主模型放在“\stable-diffusion-webui\extensions\sd-webui-animatediff\model”文件夹;
下载8个lora模型放在“\stable-diffusion-webui\models\Lora\animatediff”文件夹,其中的“animatediff”文件夹为lora文件夹下面自行新建的一个文件夹,避免与其他的lora模型混淆;
插件参数配置
插件设置
具体设置参考下面的截图(大多数情况下参照下方案例的设置即可):
修改webui-user.bat批处理文件
animatediff插件 安装好之后,要正常运行还需要修改stable diffusion 的启动批处理文件的参数,参考如下:
@echo off
set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS= --autolaunch --theme dark --xformers --no-gradio-queue --disable-safe-unpickle
REM --medvram(显存不足时添加该参数)
call webui.bat
其中的“–disable-safe-unpickle”是在选择SDXL大模型和Motion module选择“mm_sdxl_v10_beta.ckpt”这个模型的时候需要添加的参数;
而“–medvram”参数则是在你的显存小于8G的情况下,需要添加的参数。案例中我并没有添加这个参数,而是将它注释起来了,因为我的显卡显存是24G,并不需要添加这个参数;
界面参数设置
运动模块(Motion module)
这里显示的就是我们前面下载的三个主模型
mm_ sd_v15.ckpt:这是第一代的 SD1.5版本的运动模块,配合SD1.5版本的checkpoint模型使用; mm_sd_v15_v2.ckpt:这是第二代的SD1.5版本的运动模型,配合SD1.5版本的checkpoint模型使用,也是现在使用最多的模块; mm_sdxl_v10_beta.ckpt:这是SDXL版本的运动模块,配合SDXL的checkpoint模型使用,当选择这个模块的时候,需要修改“webui-user.bat”文件的参数,增加“–disable-safe-unpickle”(见前面的内容介绍);保存格式(Save format)
输出的格式
至少选择“GIF”|“MP4”|“WEBP”|“WEBM”|“PNG”之一。如果您需要信息文本,请选中“TXT”,该信息文本将与输出 GIF 位于同一目录中。信息文本也可以通过stable-diffusion-webui/params.txt
所有格式访问和输出。
gifsicle
或palette
来优化 GIF 。转至Settings/AnimateDiff
启用它们。
您可以通过 设置 WEBP 的质量和无损Settings/AnimateDiff
。
如果您使用API,通过将“PNG”添加到format
,您可以将所有帧保存到文件系统,而无需返回所有帧。如果您希望 API 返回所有帧,请添加Frame
到format
列表。
帧数(Number of frames)
生成的动画或者视频文件的总帧数
如果输入 0(默认):
如果通过“视频源”提交视频或通过“ 视频路径”输入视频路径,或启用任何批量ControlNet,帧数将是视频中的帧数(如果提交了多个视频,则使用最短的视频)。 否则,帧数将根据“Context batch size”的如下描述。如果输入的数字小于“Context batch size”且不为0:你将从整个生成过程中获得“Number of frames”前1帧作为输出的GIF。所有后续帧不会出现在生成的GIF中,但会像往常一样保存为PNG格式。不要将“Number of frames”设置为小于“Context batch size”的数字(除0外);
帧率(FPS)
每秒帧数,即每秒显示的帧数(图像)。
如果以每秒 8 帧的速度生成 16 帧,则 GIF 的持续时间为 2 秒。如果您提交源视频,您的 FPS 将与源视频相同。
显示循环次数(Display loop number)
GIF 播放的次数。值0
表示 GIF 永远不会停止播放。保持默认0即可!
上下文批量大小(Context batch size)
一次将有多少帧传递到运动模块中。
SD1.5 运动模块采用 16 帧进行训练,因此当帧数设置为 时会给出最佳结果16
。
SDXL HotShotXL 运动模块改为使用 8 帧进行训练。对于 V1 / HotShotXL 运动模块选择 [1, 24],对于 V2 / AnimateDiffXL 运动模块选择 [1, 32]。
闭环(Closed loop)
闭环
意味着此扩展将尝试使最后一帧与第一帧相同。
当Number of frames
>Context batch size
时,包括当 ControlNet 启用且源 视频帧数 >Context batch size
且Number of frames
= 0 时,AnimateDiff 无限上下文生成器将执行闭环。
当Number of frames
<=Context batch size
时,AnimateDiff 无限上下文生成器将不起作用。只有当您选择“A”时,AnimateDiff 才会将反转的帧列表附加到原始帧列表以形成闭环。
有关每个选择的说明,请参阅下文:
N
意味着绝对没有闭环 – 如果Number of frames
的值小于Context batch size
且不为0 ,这是唯一可用的选项。
R-P
意味着扩展将尝试减少闭环上下文的数量。提示行程(prompt traveling)不会被插补为闭环。
R+P
意味着扩展将尝试减少闭环上下文的数量。提示行程(prompt traveling)将被插补为闭环。
A
意味着扩展将积极尝试使最后一帧与第一帧相同。提示行程(prompt traveling)将被插补为闭环。
步幅(Stride)
“步幅”(Stride)是最大运动步幅的设置,用 2 的幂表示(默认:1)。
由于无限上下文生成器的限制,该参数仅在Number of frames
>Context batch size
时有效,或者当 ControlNet 启用且源视频帧数 >Context batch size
且Number of frames
为 0 时有效。
Stride
只有当为 1时,才能完全没有闭环。
对于每个 1≤2i≤1≤2i≤ Stride
,无限上下文生成器将尝试使相隔2i2i的帧在时间上保持一致。例如,如果Stride
为4 ,并且Number of frames
为8,它将使以下帧在时间上保持一致:
Stride
== 1: [0, 1, 2, 3, 4, 5, 6, 7]
Stride
== 2: [0, 2, 4, 6], [1, 3, 5, 7]
Stride
== 4: [0, 4], [1, 5], [2, 6], [3, 7]
重叠(Overlap)
上下文中重叠的帧数
如果重叠为 -1(默认):您的重叠将为Context batch size
// 4
由于无限上下文生成器的限制,该参数仅在Number of frame
>Context batch size
时有效,包括当 ControlNet 启用且源 视频帧数 >Context batch size
且Number of frames
为 0 时有效。
帧插值(Frame Interpolation)
使用 Deforum 的 FILM 实现在帧之间进行插值。需要 Deforum 扩展。
这个参数有两个选项“off”和“FILM”
如果选择“off”,则关闭“Frame Interpolation”功能,同时后面的“Interp X”参数将失效!
如果选择“FILM”,则开启“Frame Interpolation”功能,同时后面的“Interp X”将产生效果!
FILM 选项会影响生成 动画的平滑度。当您单击“FILM”时,它会激活帧插值,用于平滑动画。Interp X 参数允许您控制添加的额外帧的数量:
使用FILM进行平滑处理:点击FILM可以平滑动画。通过调整Interp X参数,可以控制添加的额外帧数。默认情况下,Interp X设置为10,意味着每个原始帧将增加10个额外帧。 视频帧数增加:使用FILM后,视频的总帧数会显著增加。例如,原本有32帧的视频,使用FILM后帧数会增加到311帧,大约为每个原始帧增加9.7帧。 调整FPS以获得更流畅的播放:为了抵消由增加帧数引起的慢动作效果,可以调整视频的帧率(FPS)。提高FPS可以使视频播放得更快、更流畅。例如,将FPS从8增加到24,可以将视频时长缩短到12秒,同时保持平滑。进一步将FPS增加到70,可以将视频时长恢复到原来的4秒,同时保持通过FILM创建的插值帧,实现平滑的播放效果。总结来说,AnimateDiff的FILM选项通过添加额外帧来生成更平滑的动画,并通过调整Interp X和FPS设置,控制动画的平滑度和播放速度。
视频源(Video source) [可选]
ControlNet V2V的视频源文件。您必须启用 ControlNet。它将成为您无需提交控制图像或 ControlNet 面板路径即可启用的所有 ControlNet 单元的源代码控制。您当然可以通过Single Image
选项卡提交一张控制图像或通过选项卡提交一个输入目录Batch
,这将覆盖此视频源输入并照常工作。
视频路径( Video path)[可选]
ControlNet V2V源帧的文件夹,但优先级低于Video source
。您必须启用 ControlNet。它将成为您无需提交控制映像或 ControlNet 路径即可启用的所有 ControlNet 单元的源代码控制。您当然可以通过Single Image
选项卡提交一个控制图像或通过选项卡提交一个输入目录Batch
,这将覆盖此 视频路径输入并照常工作。
对于想要修复视频的人:输入包含两个子文件夹image
和mask
ControlNet 修复单元的文件夹。这两个子文件夹应包含相同数量的图像。该扩展将按照相同的顺序匹配它们。使用我的Segment Anything扩展可以让您的生活变得更加轻松。
提示穿梭(Prompt Travelling)
什么是“提示穿梭(Prompt Travelling)”
“Prompt Travelling” 是一种技术,用于在创建最终的 GIF 或视频时,精确调整正面提示(positive prompt),以精确控制特定时间帧内的具体细节。当与 AnimateDiff 和 Stable Diffusion 结合时,Prompt Travelling 允许更大程度地影响 GIF 和视频的视觉美学,包括风格、背景、服装选择等元素。
“提示穿梭(Prompt Travelling)”的语法规则
“提示穿梭(Prompt Travelling)”分为“头部提示”、“帧提示”和“尾部提示”三个部分
头部提示
上图案例中的第一行代表头部提示,不是必须的。您可以灵活地包含单行或者多行提示。头部或基本提示充当基础输入,用于确定生成的视频或 GIF 的整体外观。例如:
masterpiece, 30 year old women, cleavage, red hair, bun, ponytail, medium breast, desert, cactus vibe, sensual pose, (looking in the camera:1.2), (front view:1.2), facing the camera,close up, upper body
帧提示
“帧提示”遵循“帧编号:帧prompt”模式,确保您的帧编号按顺序排列。这些提示显示在特定时间范围内将发生的修改。并且对每一个“帧prompt”都可以添加单独的权重规则。例如:
0: (red dress:1.2)
8: (white dress:1.2)
16: (green dress:1.2)
24: (blue dress:1.2)
尾部提示
上图案例中的最后一行代表尾部提示,不是必须的。您可以灵活地包含单行或者多行提示,也可以不写。
smile
需要注意的是,插件参数设置中的“Number of frames
”必须要大于“帧提示”中最大的帧索引号,经过实际测试,至少要大于4帧以上才不会出现报错的现象,建议“Number of frames
”设置的数字要大于“帧提示”中的最大索引值8或者16帧以上最为保险!
“提示穿梭(Prompt Travelling)”的案例
大模型(checkpoint):toonyou_beta6.safetensors
未添加“提示穿梭(prompt travelling)”的正面提示词:
masterpiece, 30 year old women, cleavage, red hair, bun, ponytail, medium breast, desert, cactus vibe, sensual pose, (looking in the camera:1.2), (front view:1.2), facing the camera,close up, upper body
添加了“提示穿梭(prompt travelling)”的正面提示词:
masterpiece, 30 year old women, cleavage, red hair, bun, ponytail, medium breast, desert, cactus vibe, sensual pose, (looking in the camera:1.2), (front view:1.2), facing the camera,close up, upper body
0: (red dress :1.2)
16: (white dress:1.2)
32: (green dress:1.2)
负面提示词:
(worst quality:1.2), (low quality:1.2), (lowres:1.1), (monochrome:1.1), (greyscale), multiple views, comic, sketch, (((bad anatomy))), (((deformed))), (((disfigured))), watermark, multiple_views, mutation hands, mutation fingers, extra fingers, missing fingers, watermark, nude, nsfw
采样方法:DPM++ 2M Karras
采样步数(Sampling steps):20
宽高度:512×512
提示词相关性(CFG Scale):7
随机种子(seed):3301240212
Motion module:mm_sd_v15_v2.ckpt
Number of frames:40
FPS:8
Closed loop:N
Context batch size:16
Frame Interpolation:off
效果对比:
未添加“提示穿梭(prompt travelling)”
添加“提示穿梭(prompt travelling)”
AnimateDiff 与 ControlNet 结合使用
您可以使用 ControlNet 通过参考视频来指导运动。
让我们以此参考视频为例。目标是让 AnimateDiff 跟随视频中女孩的动作。
下面的案例中用到的checkpoint:beautifulRealistic_brav5.safetensors
AnimateDiff+openpose
参数设置参考下面的截图:
效果展示:
AnimateDiff+Canny
参数设置参考下面的截图:
效果展示:
AnimateDiff+Depth
参数设置参考下面的截图:
效果展示:
AnimateDiff+openpose+Canny
参数设置参考下面的截图:
效果展示:
AnimateDiff+openpose+Depth
参数设置参考下面的截图:
效果展示:
AnimateDiff+openpose+Depth+Canny
参数设置参考下面的截图:
效果展示:
AnimateDiff 与 Lora 结合使用
您可以使用运动 LoRA 将 摄像机运动添加到 视频中。它们的使用方式与标准 LoRA相同。
下面的案例中用到的checkpoint:beautifulRealistic_brav5.safetensors
AnimateDiff+PanLeft(镜头左移)
正面提示词:
((best quality)), ((masterpiece)), ((realistic)), long highlighted hair, cybergirl, futuristic silver armor suit, confident stance, high-resolution, living room, smiling, head tilted <lora:v2_lora_PanLeft:1>
负面提示词:
(worst quality:1.2), (low quality:1.2), (lowres:1.1), (monochrome:1.1), (greyscale), multiple views, comic, sketch, (((bad anatomy))), (((deformed))), (((disfigured))), watermark, multiple_views, mutation hands, mutation fingers, extra fingers, missing fingers, watermark, nude, nsfw
参数设置:
效果展示:
您会看到背景向右移动,表明相机正在向左平移。
AnimateDiff+PanRight(镜头右移)
正面提示词:
((best quality)), ((masterpiece)), ((realistic)), long highlighted hair, cybergirl, futuristic silver armor suit, confident stance, high-resolution, living room, smiling, head tilted <lora:v2_lora_PanRight:0.75>
负面提示词:
(worst quality:1.2), (low quality:1.2), (lowres:1.1), (monochrome:1.1), (greyscale), multiple views, comic, sketch, (((bad anatomy))), (((deformed))), (((disfigured))), watermark, multiple_views, mutation hands, mutation fingers, extra fingers, missing fingers, watermark, nude, nsfw
参数设置:
效果展示:
AnimateDiff+RollingAnticlockwise(镜头逆时针滚动)
正面提示词:
((best quality)), ((masterpiece)), ((realistic)), long highlighted hair, cybergirl, futuristic silver armor suit, confident stance, high-resolution, living room, smiling, head tilted <lora:v2_lora_RollingAnticlockwise:0.75>
负面提示词:
(worst quality:1.2), (low quality:1.2), (lowres:1.1), (monochrome:1.1), (greyscale), multiple views, comic, sketch, (((bad anatomy))), (((deformed))), (((disfigured))), watermark, multiple_views, mutation hands, mutation fingers, extra fingers, missing fingers, watermark, nude, nsfw
参数设置:
效果展示:
AnimateDiff+RollingClockwise(镜头顺时针滚动)
正面提示词:
((best quality)), ((masterpiece)), ((realistic)), long highlighted hair, cybergirl, futuristic silver armor suit, confident stance, high-resolution, living room, smiling, head tilted <lora:v2_lora_RollingClockwise:0.75>
负面提示词:
(worst quality:1.2), (low quality:1.2), (lowres:1.1), (monochrome:1.1), (greyscale), multiple views, comic, sketch, (((bad anatomy))), (((deformed))), (((disfigured))), watermark, multiple_views, mutation hands, mutation fingers, extra fingers, missing fingers, watermark, nude, nsfw
参数设置:
效果展示:
AnimateDiff+TiltDown(镜头下沉)
正面提示词:
((best quality)), ((masterpiece)), ((realistic)), long highlighted hair, cybergirl, futuristic silver armor suit, confident stance, high-resolution, living room, smiling, head tilted <lora:v2_lora_TiltDown:0.75>
负面提示词:
(worst quality:1.2), (low quality:1.2), (lowres:1.1), (monochrome:1.1), (greyscale), multiple views, comic, sketch, (((bad anatomy))), (((deformed))), (((disfigured))), watermark, multiple_views, mutation hands, mutation fingers, extra fingers, missing fingers, watermark, nude, nsfw
参数设置:
效果展示:
AnimateDiff+TiltUp(镜头上升)
正面提示词:
((best quality)), ((masterpiece)), ((realistic)), long highlighted hair, cybergirl, futuristic silver armor suit, confident stance, high-resolution, living room, smiling, head tilted <lora:v2_lora_TiltUp:0.75>
负面提示词:
(worst quality:1.2), (low quality:1.2), (lowres:1.1), (monochrome:1.1), (greyscale), multiple views, comic, sketch, (((bad anatomy))), (((deformed))), (((disfigured))), watermark, multiple_views, mutation hands, mutation fingers, extra fingers, missing fingers, watermark, nude, nsfw
参数设置:
效果展示:
AnimateDiff+ZoomIn(镜头拉近)
正面提示词:
((best quality)), ((masterpiece)), ((realistic)), long highlighted hair, cybergirl, futuristic silver armor suit, confident stance, high-resolution, living room, smiling, head tilted <lora:v2_lora_ZoomIn:0.75>
负面提示词:
(worst quality:1.2), (low quality:1.2), (lowres:1.1), (monochrome:1.1), (greyscale), multiple views, comic, sketch, (((bad anatomy))), (((deformed))), (((disfigured))), watermark, multiple_views, mutation hands, mutation fingers, extra fingers, missing fingers, watermark, nude, nsfw
参数设置:
效果展示:
AnimateDiff+ZoomOut(镜头拉远)
正面提示词:
((best quality)), ((masterpiece)), ((realistic)), long highlighted hair, cybergirl, futuristic silver armor suit, confident stance, high-resolution, living room, smiling, head tilted <lora:v2_lora_ZoomOut:0.75>
负面提示词:
(worst quality:1.2), (low quality:1.2), (lowres:1.1), (monochrome:1.1), (greyscale), multiple views, comic, sketch, (((bad anatomy))), (((deformed))), (((disfigured))), watermark, multiple_views, mutation hands, mutation fingers, extra fingers, missing fingers, watermark, nude, nsfw
参数设置:
效果展示:
AnimateDiff在图生图中的使用
您可以通过将 AnimateDiff 与 img2img 结合使用来在有限范围内指导构图和运动。在此方法中,您可以定义视频的初始图像和最终图像。它们不能被完全使用,因为它们将经历图像到图像的过程。
知识要点
上传到img2img选项卡的图像画布的图片将作为初始图片
上传到AnimateDiff中的“last frame”中的图片将作为最终图片
参数设置
步数:20
采样器:DPM++ 2M Karras
CFG 规模:7
种子:-1
尺寸:512×512
去噪强度:0.75
运动模块(Motion module):mm_sd_v15_v2.ckpt
启用AnimateDiff(Enable AnimateDiff):是
帧数(Number of frames):32
帧率(FPS):8
参考案例
正面提示:
((best quality)), ((masterpiece)), ((realistic)), long highlighted hair, cybergirl, futuristic silver armor suit, confident stance, high-resolution, living room, smiling, head tilted <lora:v2_lora_ZoomOut:0.75>
负面提示:
(worst quality:1.2), (low quality:1.2), (lowres:1.1), (monochrome:1.1), (greyscale), multiple views, comic, sketch, (((bad anatomy))), (((deformed))), (((disfigured))), watermark, multiple_views, mutation hands, mutation fingers, extra fingers, missing fingers, watermark, nude, nsfw
参数截图:
效果展示:
总结