Stable Diffusion + ControlNet = 视频风格转换
视频转动画技术,这个名称其实我并不是很喜欢,因为这也不算是什么动画。我更喜欢称之为视频风格化
,也就是将指定视频转换成另外一种风格。
关于此技术其实本站之前就有所讲解过【点击查看】,只不过那只是最基本的使用方式,当时主要是为了讲解批处理功能而顺带一提,所以并没有去处理画面细节等问题。
本文将会对视频风格化技术进行详细讲解,在讲解视频风格化技术之前,我们还需要了解两个知识点,那就是序列帧,还有FFMPEG工具。
前置知识
在学习本教程之前,您还需要了解一些必要的基础知识,如果您在学习过程中遇到不明白部分,那么推荐您阅读以下文章,将会给您相关的答案和灵感。
Stable Diffusion WebUI图生图CLIP和DeepBooru反向推理涂鸦重绘蒙版教程
Stable Diffusion WebUI ControlNet V1.1新模型下载安装使用教程-上
Stable Diffusion WebUI ControlNet V1.1各预处理器模型使用教程-中
Stable Diffusion WebUI ControlNet V1.1各预处理器模型使用教程-下
序列帧是什么?
关于帧的理解,这个解释起来可能不是特别容易理解。视频是如何动起来的呢,其实每一秒视频是由很多张图片来组合而成的,有点像在快速翻书的效果,至于一秒之内一共翻了多少页,就代表这个视频是多少帧,目前主流的为24帧
、25帧
、30帧
、60帧
。我们以25帧为例,也就是代表该视频每秒由25张图片所组成。
组成视频的这些图像如果被拆解成一张张图片,那就是一个个帧。如果这些帧的序号是连续的,那就可以称之为序列帧。
FFMPEG
如果你的电脑已经安装过PR、AE等软件,不想学习FFMPEG等相关知识,那么可以跳过此部分。
FFMPEG工具是可以快速将视频转换为序列帧,或将序列帧转换为视频的工具,非常非常方式,无需安装笨重的PR、AE、PS等工具。
如果您的电脑未安装过FFMPEG,可以通过阅读以下文章进行安装。
FFMPEG|音频、视频、图片等多媒体格式转换工具 支持本地命令行批处理 – openAI
CMD
本文中将会多次使用到Windows的CMD命令行工具,在其中执行关于FFMPEG等相关命令行。
CMD的打开方式为【按住键盘中的微软徽标键
别松手+R键
】,此时会弹出一个运行
窗口,此时输入CMD
,然后按下回车即可打开一个黑色的CMD命令行工具
。
之后直接复制本站所提供的代码即可,后续本教程不在对CMD的使用方式做复述。
素材文件结构
在开始该教程之前,我们当然需要先准备一个视频,这个视频将用来做为我们本次教程的素材。
- 视频文件名
- 视频名称为
ZNY.mp4
- 视频名称为
- 视频文件
- 视频文件夹存放在
D:\openai.wiki\Video
文件夹
- 视频文件夹存放在
- 视频转序列帧图片
- 视频转换为序列帧图片的文件位置为
D:\openai.wiki\Video\Sequence
文件夹。
- 视频转换为序列帧图片的文件位置为
- 序列帧风格化
- 视频序列帧转换风格之后的的文件位置为
D:\openai.wiki\Video\Sequence_FX
文件夹。
- 视频序列帧转换风格之后的的文件位置为
- 序列帧风格化+高清放大
- 视频序列帧转换风格之后,再经过高清放大处理的文件位置为
D:\openai.wiki\Video\Sequence_FX_x4
文件夹。
- 视频序列帧转换风格之后,再经过高清放大处理的文件位置为
备注:如果您需要自己的文件夹结构与本站一致,可以在CMD中执行如下命令行,将会自动在D盘创建所有相关的文件夹。如果您的目录与本站不一致,那么后续使用CMD命令行时,请替换自己的相应文件路径。
if not exist D:\openai.wiki\Video\Sequence mkdir D:\openai.wiki\Video\Sequence & if not exist D:\openai.wiki\Video\Sequence_FX mkdir D:\openai.wiki\Video\Sequence_FX & if not exist D:\openai.wiki\Video\Sequence_FX_x4 mkdir D:\openai.wiki\Video\Sequence_FX_x4
此时本站将视频文件ZNY.mp4
夹移动至D:\openai.wiki\Video
文件夹内,做为后续使用的素材。
帧率检测
我们如何知道自己想用的视频素材帧率是多少呢?
方法一
我们可以通过鼠标右键该视频
,点击属性
按钮,在弹出的属性窗口内的详细信息
面板,查看该视频的帧速率为29.66帧/秒
,约等于30帧
。
方法二
我们可以直接通过FFMPEG工具来查看视频的帧率,帧率的英文缩写为FPS,复制如下内容至CMD 中执行。
ffmpeg -i D:/openai.wiki/Video/ZNY.mp4 2>&1 | findstr /r "fps"
我们执行该命令之后,将会得到如下内容反馈。
C:\Users\openA>ffmpeg -i D:/openai.wiki/Video/ZNY.mp4 2>&1 | findstr /r "fps" Stream #0:1[0x2](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 720x1280 [SAR 1:1 DAR 9:16], 1927 kb/s, 29.66 fps, 29.97 tbr, 11988 tbn (default)
我们找到关于FPS的部分,输出内容为39.66FPS
,与我们通过方法一所看到的内容一致。
FFMPEG|视频转序列帧
因为Stable Diffusion不支持直接输入视频,所以我们需要将视频拆分成一张张图片,对每张图片进行单独图生图处理,然后再将这些图片转换成视频。
备注:您也可以通过Pr或AE等软件进行转换输出,不必非要通过FFMPEG工具,但是FFMPEG是真的很好用。
我们打开CMD,在其中执行如下命令行,将视频转换为图片。
ffmpeg -i D:/openai.wiki/Video/ZNY.mp4 D:/openai.wiki/Video/Sequence/frame_%04d.png
此时我们打开D:/openai.wiki/Video/Sequence
文件夹,将会看到该目录下已经生成了非常多的图片,这就是我们以后需要用到的。
FFMPEG|音频分离
因为我们后续还需要将风格化之后的序列帧转换为视频,所以我们还需要将原视频中的音频分离出来,方便以后使用,不然视频会没有声音。
ffmpeg -i D:/openai.wiki/Video/ZNY.mp4 -vn -acodec copy D:/openai.wiki/Video/ZNY_audio.m4a
执行此步骤之后,将会在D:/openai.wiki/Video目录下生成一个名为ZNY_audio.m4a的音频文件,这就是我们分离出来的背景音乐啦,非常简单。
风格调试
在开始之前,我们还需要一个步骤,那就是效果的确定,我们随便拿出一帧图像导入至SD的图生图
界面内,选择一个合适的模型,调试正向提示词
、反向提示词
、迭代步数
、种子
、CFG
、宽高
、采样器
、重绘幅度等
参数,将这些参数调整至你生成单张图像后满意即可。
模型选择
关于基础模型的选择这很重要,因为这将会直接影响你整个画面的质量和效果。
如果你希望自己所绘制的风格是二次元类型,那么可以选择NovelAI或其它主流二次元风格模型,本站此次使用的基础模型为Five Nuts Mixed 五仁月饼Mix
。
模型下载地址:Five Nuts Mixed 五仁月饼Mix – 资源下载 – openAI维基百科论坛
官方给出的完成参数如下:
(master piece:1.3),(ultra detailed:1.1), (solo,1.3),(Light gray eyes:1.2), (white hair:1.3),(Silver round glasses:1.3),(round face:1.2),(big ass:1), (thick thigh:1.2),(curvy:1.1),(medium breasts:1.35), light smile, (white Medieval Fantasy Clothing, white off-the-shoulder dress, Miniskirt, slit, Backless dress:1.5), (nose blush:0.6), (beautiful ultra detailed eyes, highly detailed skin, Glossy and glowing skin:1.1),looking back, background,(fantasy Store, Clerk:1.1),(Lots of Bottled honey on the back shelf:1.4), (crowded, city scraper in distance:1.4),(insanely detailed:1.1),(bread basket, Apple Pie:1.6),close up:1.2, upper body, dynamic angle:1.4,(Lots of honey, Lots of bread, Lots of fruit, crowded:1.2), (from above:1.4), looking at viewer, sunlight, professional lighting,(professional lighting, shading:1.3),(highly detailed background:1.2),Indoor, (background medieval fantasy town:1.1),(Medieval fantasy world:1.3), (physically-based rendering, professional lighting, photon mapping, radiosity, soft light, lens flare:1.3), pale color, Negative prompt: (Easy Negative:1.2), (nsfw:0.8),(lip:1.1), (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, Plural, (ugly:1.331), (duplicate:1.331), (morbid:1.21), (mutilated:1.21), (poorly drawn hands:1.331), blurry, (bad anatomy:1.21), (bad proportions:1.331), extra limbs, (disfigured:1.331), (more than 2 nipples:1.331), (missing arms:1.331), (extra legs:1.331), (fused fingers:1.61051), (too many fingers:1.61051), (unclear eyes:1.331), lowers, bad hands, missing fingers, extra digit, (futa:1.1),bad hands,mutated hands,extra fingers, fewer fingers, ENSD: 31337, Size: 640x512, Seed: 3277136179, Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 9, Clip skip: 2, Model hash: 6b92659289, Hires steps: 20, Hires upscale: 2, AddNet Enabled: True, AddNet Model 1: koreanDollLikeness_v15(3c8b9d1e9b98), Hires upscaler: Latent, AddNet Module 1: LoRA, AddNet Weight A 1: 0.2, AddNet Weight B 1: 0.2, Denoising strength: 0.5
正反面提示词翻译的内容如下:
(大作:1.3),(超细:1.1), (个展,1.3),(浅灰色眼睛:1.2), (白发:1.3),(银色圆框眼镜:1.3),(圆脸:1.2),(大屁股:1),(粗大腿:1.2),(曲线美:1.1),(中胸:1.35),轻盈 微笑, (白色中世纪奇幻服饰,白色露肩连衣裙,迷你裙,开衩,露背连衣裙:1.5),(鼻红:0.6), (美丽的超细致的眼睛,高度细致的皮肤,光泽和发光的皮肤:1.1),回头看, 背景,(幻想商店,店员:1.1),(后架上有很多瓶装蜂蜜:1.4),(拥挤,远处的城市刮板:1.4),(非常详细:1.1),(面包篮,苹果派:1.6 ),特写:1.2,上半身,动态角度:1.4,(很多蜂蜜,很多面包,很多水果,拥挤:1.2), (从上面看:1.4),看着观众,阳光,专业照明,(专业照明,阴影:1.3),(高度详细的背景:1.2),室内, (背景中世纪奇幻小镇:1.1),(中世纪奇幻世界:1.3), (基于物理的渲染、专业照明、光子映射、光能传递、柔光、镜头光晕:1.3), 苍白的颜色, 负面提示:(Easy Negative:1.2), (nsfw:0.8),(lip:1.1), (最差质量:2),(低质量:2),(正常质量:2),低分辨率,正常质量, 复数, (丑陋:1.331),(重复:1.331),(病态:1.21),(残缺:1.21), (画得不好的手:1.331),模糊,(解剖学不好:1.21),(比例不好:1.331),多余的肢体,(毁容:1.331),(超过2个乳头:1.331),
通过官方的提示词所得到的图像如下:
宽高比例设置
在开始生成图像之前,我们还需要确认一个比较重要的东西,那就是宽高比例。
有些人可能生成的图像尺寸与素材图片差异巨大,所以效果比较差,我们必须要将图像的宽高比例与原图做的基本一致,这样效果才会更好。
那么如何使比例相等呢?我们可以调节图生图
下面的宽度
|高度
滑杆,此时会在图生图的素材预览区
弹出红色半透明选区
,这个区域就代表宽高比所覆盖的区域。
如果上面的内容你都看不懂也没关系,你只需要调节宽度
|高度
滑杆,使红色框框与显示区域的范围一致
或尽量吻合即可。
注意:如果你的电脑配置不佳,不要让宽度|高度过大,否则容易因为显存不足而无法出图。
重绘幅度|Denoising Strength
这里的重绘(去噪)强度和之前我们在文生图里高清修复里的去噪强度是一致的,范围为0-1。
该参数的数值越大代表和原图的差距越大,数值越小则越贴合素材原图的效果。
以图生图
我们需要确认其中一帧图片的风格,然后将这些参数固定下来,这样才会避免以后所生成的图像具有一定的连贯性,不至于每帧的画风变化过大。
本站优化了一下官方给出的参数,删除了一些我们不需要的部分,以下是优化后的设置参数和效果参考图。
⚠️注意:一定要固定种子,不然所生成的内容将会风格各异,完全不统一。
(master piece:1.3),(ultra detailed:1.1), (solo,1.3),(Light gray eyes:1.2), (white hair:1.3),(curvy:1.1),(medium breasts:1.35), light smile, (white Medieval Fantasy Clothing, white off-the-shoulder dress), (nose blush:0.6), (beautiful ultra detailed eyes, highly detailed skin, Glossy and glowing skin:1.1), looking at viewer, sunlight, professional lighting,(professional lighting, shading:1.3),(highly detailed background:1.2),Indoor, (background medieval fantasy town:1.1),(Medieval fantasy world:1.3), (physically-based rendering, professional lighting, photon mapping, radiosity, soft light, lens flare:1.3), pale color, Negative prompt: (Easy Negative:1.2), (nsfw:0.8),(lip:1.1), (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, Plural, (ugly:1.331), (duplicate:1.331), (morbid:1.21), (mutilated:1.21), (poorly drawn hands:1.331), blurry, (bad anatomy:1.21), (bad proportions:1.331), extra limbs, (disfigured:1.331), (more than 2 nipples:1.331), (missing arms:1.331), (extra legs:1.331), (fused fingers:1.61051), (too many fingers:1.61051), (unclear eyes:1.331), lowers, bad hands, missing fingers, extra digit, (futa:1.1),bad hands,mutated hands,extra fingers, fewer fingers, Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 9, Seed: 3323621741, Size: 288x512, Model hash: 6b92659289, Model: fiveNutsMixedMix_v10, Denoising strength: 0.5, Clip skip: 2, ENSD: 31337
我们使用以上参数直接生成,可以看到画面效果还可以,但是生成之后的效果图人物姿势与原图并不是很符合,我们可以尝试使用ControlNet插件,引导生成效果图。
ControlNet
我们通过ControlNet插件可以快速解决姿势不一致、背景变化、表情不一致、手指扭曲等问题。
Depth
有一些作者推荐使用Depth深度图的方式来生成图像,但是本站测试了一下,效果并不是特别好,以下是效果对比。
Canny
以下是通过Canny引导的方式所生成,效果也很一般。
Normal
本站觉得还是法线方式所生成的效果更好一些,以下是效果对比图。
多重控制
我们通过ControlNet已经达到了姿势统一的问题,但是我们目前只能得到其实一个效果做为最终效果图,如果我们通过多个ControlNet来同时引导生成图像,效果是否会更好呢?
多重控制开关
默认情况下,我们只能使用ControlNet操纵一种引导生成方式,但是我们其实可以通过更改一些设置,使ControlNet可以同时经过多个模型引导输出。
设置
→ControlNet
→多重 ControlNet 的最大模型数量 (需重启)
,我们将其值调整为3,这样就可以使用三个ControlNet模型来影响最终图像的生成,建议用多少调多少。
以下是开启前后的效果对比图:
双重控制
我们将ControlNet
的Unit 0
和Unit 1
分别设置为法线
和软边提取
,设置如下图所示。
效果展示
我们可以看到,效果其实已经非常不错了,但是最终嘴边的效果有点泛黑。但这只是个例,并不是每张图片都会如此,这只是数百张序列帧的其中之一,所以我们不用太过在意,忽略不计。
批量输出
在我们已经确认好画风之后,现在就可以批量生成每一帧啦,下面我们来看一下如何设置。
我们需要将图生图
界面的生成方式更改成批量处理
,填写序列帧目录
,填写保存序列帧目录
,ControlNet
的Unit 0
和Unit 1
也全部设置为批量处理,但无需设置目录。
高清放大
经过繁琐的设置,我们终于输出了风格化之后的文件,但是因为我们上一步生成的图像尺寸过小,所以非常模糊,我们需要通过后期处理
,将图像高清放大
一下,这样可以获得更好的效果。
选择后期处理
→批量处理文件夹
- 输入目录
- 填写我们已经输出的风格化序列帧文件夹
- 输出目录
- 填写放大风格化序列帧的文件保存路径
- Upscaler 1
- R-ESRGAN 4x+Anime6B
- 该算法对动漫效果更好一些
效果展示
为了方便横向对比效果,我们后面将会统一合成所有视频至一个文件内。
风格化序列帧合成视频
我们先讲解一下如何通过FFMPEG将序列帧合成为视频,我们执行如下代码即可自动合成,下面我将会讲解一下每部分参数的含义。
ffmpeg -r 29.66 -i D:/openai.wiki/Video/Sequence_FX/frame_%04d.png -i D:/openai.wiki/Video/ZNY_audio.m4a -c:v libx264 -pix_fmt yuv420p D:/openai.wiki/Video/ZNY_FX.mp4
参数解析:
- 帧速率|FPS
- 29.66
- 序列帧路径
- D:/openai.wiki/Video/Sequence_FX/frame_%04d.png
- 音频文件夹
- D:/openai.wiki/Video/ZNY_audio.m4a
- c:v copy
- 表示保留原始视频编码,不重新编码。
- c:a aac
- 表示将音频编码为AAC格式。根据需要调整音频编码。
- shortest
- 表示当音频或视频中的一条流结束时停止合成,以生成长度相同的音频和视频。
- 带有音频的最终输出视频文件保存路径
- D:/openai.wiki/Video/ZNY_FX.mp4
风格化放大后的序列帧合成视频
参数与上面基本一致,不做单独解释。
ffmpeg -r 29.66 -i D:/openai.wiki/Video/Sequence_FX_x4/frame_%04d-0000.png -i D:/openai.wiki/Video/ZNY_audio.m4a -c:v libx264 -pix_fmt yuv420p D:/openai.wiki/Video/ZNY_FX_x4.mp4
横向对比
左侧是原视频|中间风格化后的效果|右侧是风格化+高清放大后的效果
总结
我们本次所讲解内容,是仅使用SD的ControlNet插件来完成的视频风格转换,其实效果讲真的还不错。
后面本站会写一些通过其它插件生成视频的方式,可能会比这个方便一些。不过,本站感觉这种方式也不难,而且生成速度也挺快的呢。
可能大家感觉教程挺简短的,但是这点破玩意,站长写了两天,中间也是磕磕绊绊的,因为站长也是边学边整理,帮大家踩坑。
被盗用的文章太多太多了,我们不求打赏,也不求广告收益,我只求各位大佬在转载的时候可以保留出处,谢谢。
牛
@药 好家伙,你居然用我的邮箱来回复我,好像我在自己夸自己一样,哈哈。
请问博主生成这样一个视频需要计算多久,可以实时吗?
@姓王的码农 我这里是2028TI,一个这样的视频大概15分钟左右。
实时的话,目前还不行。
1060 3g版本 一模一样的流程花了我一天,现在开始转批量。5个小时,我看你15分钟,硬件要命
@谢谢大哥 唉,我如果是40系显卡,可能只需要五分钟了,哈哈。
公众号申请转载:AI云栈,谢谢
@f 保留出处即可,谢谢。
站长生成之后照片宽度变得很窄咋办
@张疾风 那不应该,你应该在生成的时候设置分辨率尺寸。
winget install ffmpeg -e –rainbow 后者的参数没有意义吧。
@皮皮 是的,但是可以有一个炫酷的彩色下载进度条。