首页 > 其他分享 >AI视频风格转换:Stable Diffusion+EBSynth

AI视频风格转换:Stable Diffusion+EBSynth

时间:2023-07-25 13:44:07浏览次数:38  
标签:Diffusion 关键帧 视频 AI EBSynth 重绘 目录 图片

这次转换的视频还比较稳定,先给大家看下效果。

这里传不了视频,还是放到盘盘了:https://www.aliyundrive.com/s/5mzfjLViyDa

书接上文,在上一篇文章中,我们首先使用 TemporalKit 提取了视频的关键帧图片,然后使用 Stable Diffusion 重绘了这些图片,然后又使用 TemporalKit 补全了重绘后的关键帧图片之间的序列帧,并拼合出了视频。

本文我们将使用一个新的工具 EBSynth 来补全重绘后的关键帧图片之间的序列帧,其它步骤还是继续使用原来的方法,不过相关参数上要做些调整,请看我慢慢道来。

之所以要使用 EBSynth 这个工具,是因为很多人介绍的都是这个方法,而不是我上一篇文章提到的方法,所以我也来体验下,做一个对比。

插件的安装这里就不提了,请看前一篇文章。我们从提取关键帧开始。

提取关键帧

为什么要提取关键帧?提取关键帧就是把视频中动作变化比较大的画面转成图片,下一步就是对这些图片进行重绘。如果不提取关键帧,而是把视频的每一帧都重绘,一是工作量大,二是重绘的每张图片可能都有点不一样,画面可能闪烁比较严重。

在SD WebUI的主页签中找到 Temporal-Kit,点击打开。然后接着点击“Pre-Processing”,在视频区域这里上传待处理的视频,这是我从抖音上截取的一段(文章最后会提供这个视频的下载地址)。不要马上点击“运行”,还有一些设置,请继续看下文。

在视频下方可以看到这些设置,这些都是针对提取图片的设置:

Sides:生成的1张图片的边包含几张视频帧。如果是2就代表4个视频帧,也就是 2*2;如果是3就代表9个视频帧,也就是 3*3;最小设置为1,也就是1张图包含1个视频帧。这个要结合后边的 Height Resolution一起设置。

Height Resolution:生成图片的高度的像素值,建议是:视频的高度 * Sides ,比如我这个视频是 1080*720,单个视频帧的高度就是720,但是前边Sides设置的2,所以就是720*2=1440。但是这个公式不是绝对的,你也可以写个720,或者写个2048。这个值需要考虑显卡的性能,如果显卡不太行,不要设置的太高。

frames per keyframe:多少视频帧抽取一个关键帧,关键帧越密动作衔接越流畅,但是可能重绘的变化越多,导致画面闪烁。

EBSynth Model:因为我们后边要使用EBSynth来处理,所以这里勾选上它,生成的文件名会有一定的格式。

fps:视频每秒包含几帧,在电脑上查看视频详情一般可以获取到。

Target Folder:关键帧图片的输出位置,实际会输出到这个目录下创建的一个input文件夹,后续各种处理的中间文件都在这个文件夹下,相当于一个项目目录,所以建议为每个视频的不同处理创建不同的文件夹。注意如果是云端,这里需要是服务器上的目录。

Batch Settings:因为我们这里需要处理整个视频,所以需要把这个Batch Run勾选上。

EBSynth Settings:因为EBSynth可以处理的视频时间比较短,所以要把视频分割成几段来处理。

参数设置完毕之后,点击页面右侧的“运行”。

关键帧图片都被提取后,图像这个区域应该显示提取的首张图片,但是我这里没显示,不知道是不是通信原因,大家注意观察处理进度。

  • 如果这里显示了图片,直接点击“图生图”去重绘。
  • 如果这里没有显示图片,可以去文件目录中看看,找到第一张下载下来,然后在“图生图”中手动上传。

转换风格

现在进入“图生图”界面。

上次的水彩画出图比较糊,这次我们直接用一个线条简单点的模型:toonyou,这是一个漫画风模型,也不用搭配Lora模型了。可以在文章最后获取下载地址。

这里的贴出来我的提示词,方便复制。

提示词:a man, epic scene, a poster, flat color,

反向提示词:easy_negative,beard

然后是一些参数设置,大家根据实际情况来吧,效果不好就调整下。

注意两点:

  • 图片的宽高:一般按照实际设置就好,如果数字太大,建议先调小一点,然后再用超分高清化放大。
  • 重绘强度:这里开到了最大。上一篇文章说不要太大,因为重复幅度大,图片相互之间变化可能就大,拼合出来的视频就可能比较闪烁。不过实测发现重绘幅度对 toonyou 这个模型的影响好像比较小,大家可以根据自己的实际情况试试,不必完全一样。
  • 生成种子:先设置为-1,直到出了满意的图。

下面继续使用ControlNet控图,避免重绘的变化太大,尽量稳定画面。我这里选择的还是Tile模型,大家也可以试下SoftEdge、Canny、Lineart等绘线的模型。

然后就是抽卡了,不断的生成图片,直到你满意。

注意记录下满意图片的生成种子,马上就要用到批量生成中。

将图生图切换到“批量处理”,填写两个目录:

  • 输入目录:提取关键帧步骤中输出图片的目录。
  • 输出目录:重绘图片的保存目录,固定值output,填上就行了。

把满意图片的生成种子填写到这里,不过一个种子很难稳定输出图片中的各种元素,大家可以自己体会下。

最后就是点击“生成”按钮,等待批处理完成。

在图片输出区域的下方看到这句话,基本就处理完成了。WebUI的进度有时候更新不及时,大家注意看控制台或者shell的输出。

EBSynth处理

预处理

在之前提取视频关键帧时,我们将原视频分割为了几个子视频。预处理就是将每个子视频中的原视频帧和关键帧单独提取出来,并放到相关文件夹中。

在SD WebUI的主页签中找到 Temporal-Kit,然后接着点击“Ebysynth-Process”。这里的操作顺序要注意下,按照图上标的就行。

在“Input Folder”中输入项目目录,然后点击“read_last_settings”,视频和大部分参数都能自动加载出来。

在“output resolution”中输入视频的分辨率,这个不会自动加载。

最后点击按钮“prepare ebsynth”进行处理。

子视频的文件夹就是这个几个:

打开一个子视频文件夹,可以看到这些内容,其中 frames 和 keys 目录中的图片就是本次处理后写入的,下一步我们将使用EBSynth继续处理这些图片。

如果你的SD WebUI运行在云端,需要先下载到本地,因为EBSynth这个工具需要在本地运行。可以使用下边的命令先打包成zip文件(注意替换成自己的项目目录):

zip -q -r dehua2.zip /root/autodl-tmp/webui_outputs/temporal-kit/dehua2

然后再通过平台支持的方式进行下载。

生成序列帧

这一步就需要EBSynth这个软件出马了,官方提供了WIndows和Mac版本,不过我在Mac上运行的时候会直接退出,没有研究什么原因,直接换到Windows环境就好了。

软件下载地址:https://ebsynth.com/ ,点击 Download 按钮,弹出的窗口中点击最下方的“No thanks, just start the download”,网站会自动识别操作系统,下载对应版本的程序文件。

启动EBSynth后,我们只需要以下操作:

把子视频的 frames 目录拖到 Video 输入框;

把子视频的 keys 目录拖到 keyframes 输入框;

这时要处理的图片任务就会在软件下面的部分自动展示出来。

最后点击软件最下面的 “Run All”,开始这个子视频的处理。

这个处理过程比较长,大家耐心等待。每个子视频都需要这样处理。

所有子视频都处理完毕后,就可以进入合成视频的阶段了。

如果你的SD WebUI运行在云端,需要上传上去。可以先在本地打包成zip文件,然后通过云平台提供的方法上传上去,然后解压覆盖到项目目录,参考下边这个命令:

unzip -o /root/autodl-tmp/root.zip -d /

-o 后边是zip文件的目录,-d 后边是要解压到的目录,因为我这个zip文件中第一级目录是root,所以这里用了斜杠,注意替换你的zip文件路径和要解压到的目录。

合成视频

现在又进入激动人心的视频合成环节了,回到 SD WebUI 中的 Temporal-Kit 页面。

这一步操作很简单,点击按钮“recombine ebsynth”,然后等着视频生成就行了。正常情况下,速度很快,因为视频需要的帧图片都处理好了。

之前使用Batch-Warp时,它还需要先生成一堆帧图片,所以当时比较慢;在本文的方法中这个工作交给了EBSynth处理。

资源下载

本文介绍的相关模型、插件和素材,大家可以按照文中提到的方法自行下载安装,也可以通过使用我准备好的,方法是关注公/众/号:萤火遛AI(yinghuo6ai),回复:视频风格转换,即可获取下载地址。

 

标签:Diffusion,关键帧,视频,AI,EBSynth,重绘,目录,图片
From: https://www.cnblogs.com/bossma/p/17579684.html

相关文章

  • linq lambda 两个list求交集:根据每一项模糊匹配(contains) 并且带出where过滤条件里
    直接使用 varresult=list1.Where(str1=>list2.Contains(str))是不行的,这个要求两个list的string值必须有相等的才行例如list1中有apple,那么list2中必须有apple才能匹配,而list2中只有app所以匹配不了 解决办法:List<string>list1=newList<string>{"apple","......
  • 题解 CF1501A 【Alexey and Train】
    postedon2021-03-1321:57:02|under题解|source简单模拟题,考验选手的读题能力和使用谷歌翻译的能力。先定义一个\(now=0\),我们最后算出来的结果为\(now\)。对于每个站(不包括第\(n\)站),我们需要加上\(3\)个部分:额外时间,now+=ex[i];第\(i-1\)站到第\(i\)站的时......
  • 题解 链表 (chain)
    题目链接首先考虑没有修改怎么做。两种做法。想到询问的形式为保留\(\gek\)的连通块个数,那么先将全部数字按照权值排序,然后从后往前做一遍并查集,并同时统计连通块的数量,在询问时只需二分找到第一个\(\gek\)的位置,将这个位置的答案输出即可。注意考虑答案为\(0\)的情况......
  • AIGC,你看我还有机会吗?| 融云前沿
    2022年底,以ChatGPT为代表的“生成式AI”正式开启了AI行业爆点不断的热闹时刻。关注【融云全球互联网通信云】了解更多傅盛和朱啸虎关于大模型是否还有机会的隔空激辩余热未散,Meta就宣布开源商用模型,企图通过做大模型时代的开源标准来应对OpenAI构建的技术围墙。行业火热异......
  • 模型类中建立外键的常用方法 db_constraint=False,self.user.id
    1.user=models.ForeignKey(to=User,related_name='order_user',on_delete=models.DO_NOTHING,db_constraint=False,verbose_name="下单用户") to=Order:这是ForeignKey的一个参数,用于指定这个外键字段将关联到的目标模型。在这个例子中,外键字段将关联到名为Order的模......
  • what is the embeddings in AI?
    Whatareembeddings?Textembeddingsareanaturallanguageprocessing(NLP)techniquethatconvertstextintonumericalvectors.Embeddingscapturesemanticmeaningandcontextwhichresultsintextwithsimilarmeaningshavingcloserembeddings.Forexa......
  • UESTC 2023 Summer Training #13 Div.2
    Preface开始裸泳咯这个A题给我写的头皮发麻,后面发现我就是个智障儿童比赛的时候E题想了半天感觉天皇老子来了也是\(\frac{1}{n^2}\),赛后发现我是小丑感觉中间做J的时候因为看错题目浪费了很长时间,不过再给一个小时思博题该不会还是不会A.PainttheMiddle比赛的时候一眼贪......
  • 【高可用系统架构设计】SLA服务可用性4个9是什么意思?如何保证服务的高可用性 HA(High A
    如何保证服务的高可用性HA(HighAvailability)?高可用HA(HighAvailability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。方法论上,高可用是通过冗余+自动故障转移来实现的。我们都知道,单点是系统高可用的大敌,单点往往是系统高可用最大的......
  • 【ChatGPT】AI 人工智能能让你成为更聪明的程序员吗?
    目录......
  • bio、nio、aio,同步和阻塞的区别
    java从程序从网络中读取一组数据,首先从用户态发出IO请求,申请系统调用。操作系统内核收到系统调用,执行对应的IO操作。1.首先由DMA从网卡缓存区将数据拷贝到系统的内核缓冲区。2.再由内核讲内核缓存区的数据拷贝到用户态的用户缓冲区当中。此时,数据拷贝完成依次返回。这个过程中......