Ebsynh及Ebsynth_utility深入理解(上)
工具要用好,首先你要理解工具是什么东西,怎么工作的。
我很反对连说明书都不看就乱搞的人,说明书看不懂是能力不足,用不好是技术有限,理解有误也情有可原,而完全不看说明书就是个笑话。我作为一个工人叔叔,觉得这是不可原谅的低级错误。
废话不多数,先说一下我对Ebsynh的理解,它是把视频拆解成图片,计算图片和图片之间的差异,挑出动态变化最大的作为关键帧,然后修改关键帧后,再补帧回去合成视频。
而Ebsynth_utility中也清晰列举了步骤。
接下来我们看看这些步骤中的细节和可优化空间
1. 将原始视频转换为帧序列。
生成一个蒙版图像。
为什么要生成蒙版,把人物或者物品分割出来?
因为画面要稳定,如果你用过SD的MOV2MOV插件你就会发现,每一帧都重新画,在controlnet约束还不够智能的情况下,合成的画面闪烁严重。
在插件设置中,可以见到蒙版方式有三种:
透明背景,clip分割,透明背景和clip分割
1> 透明背景默认情况下抠出人物,阈值设定是对抠像的精准度设置,如果只抠人,我建议用透明背景。
抠图三种模式
--ckpt[CCKT](可选):使用其他检查点文件。默认值使用复合数据集进行训练,如果不可用,将自动下载。请参考InSPyReNet的Model Zoo,了解可用的预先培训的检查点。
(SD中未开放?)
--fast(可选):快速模式。如果指定,它将使用低分辨率输入和用LR比例训练的模型。可能会降低性能,但会减少推理时间和gpu内存使用量。
(使用快速模式(它会更快,但蒙版质量会较低)。)
--jit(可选):Torchscript模式。如果指定,它将使用pytorch内置的torchscript JIT编译器跟踪模型。可能会导致初始化延迟,但会减少推理时间和gpu内存使用。
(使用实时产出模式)
2>Clip物品分割,有时候我们要抠的不是人,而是物品,那就用这个,我做过clip抠人和透明背景的对比,clip 抠人0.5的效果是最好的,但是依旧赶不上透明背景,设置clip蒙版阈值0和1是两个极端, 全部抠和完全不抠,所以我建议设置0.5,当然具体大家可以做试试看。
3>透明背景和clip分割 就是二者结合了,我很少用这个,大家可以实验一下。
2
Ebsynth 提取关键帧
为什么要提取关键帧?
还是因为闪烁问题,实际上我们大部分时候都不需要每一帧重绘,而画面和画面之间也有很多相似和重复,因此提取关键帧,后面再补一些调整,这样看起来更加流程和自然。
而画面差异最大的帧,就是关键帧,一秒钟内大幅度的动作图像就是关键帧。
如果关键帧太多,会有什么问题,SD重绘画面数量增加,闪烁也增加,画面稳定度下降。
但是关键帧太少,会有什么问题?会缺失动作,因为Ebsynth是补帧,如果关键帧太少,补帧没补上,就会漏画面,感觉不自然。举个例子,拍手动作刚抬起,第二画面就双手在一起,这同样不可接受。
因此在这个项目中,我们就可以见到三个可调选项:
最小关键帧间隔:如果画面变化多,多久截取一帧关键帧?这个数值越小,动态中的关键帧越多,动作细节丢失越少,但是闪烁可能严重
最大关键帧帧间隔:如果画面长时间保持一致或者静止,多长时间再截取一帧作为关键帧/
关键帧间隔差异阈值:差异多少才计算为关键帧,数值越大,关键帧越少
这个值越小,关键帧的间隔就越小,如果设置为0,关键帧的间隔将与[最小关键帧间隔]的值相同。
也就是说如果设置为0,那就不计算关键帧之间的差异了,直接按照最小关键帧间隔截取帧
设置最后一帧为关键帧,这个选项务必勾选。
3
将关键帧进行图生图
你想修改关键帧到什么程度,到什么地步?
如果你全程按照提示操作是这样的
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1. 前往 图生图 选项卡
2. 在脚本框里选择 [ebsynth utility]
3. Fill in the "Project directory" field with [E:\STAICVIDEO5]
4. Select in the "Mask Mode(Override img2img Mask mode)" field with [Normal]
5. I recommend to fill in the "Width" field with [512]
6. I recommend to fill in the "Height" field with [1088]
7. 建议将“重绘幅度”设置为小于0.35
(当使用 ControlNet 进行配合时,你可以尝试设置更大的值(甚至1.0都可以)。)
8. 填写图生图其他的设置。不需要设置图像和蒙版。
9. 拖拽任意图片到图生图主窗口。这样做能有效避免错误,但不会影响图生图的结果。
10. 生成
(Images are output to [E:\STAICVIDEO5\img2img_key])
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
细节来了,
1> 注意推荐填写的宽高,这里是512和1088,可是我原视频只有480和1014啊,我需要按照推荐的填写吗?
其实是不需要的,你完全可以填写原视频的宽高,作为生成的成品关键帧数,后面那一步调整分辨率的动作完全可以不做,直接建立个img2img_upscale_key文件夹把生存关键帧图片放进去就可以了。
但是如果分辨率过小,SD生图的细节可能丢失,这一点要注意。
2> 还有,如果你用了controlnet,那么请在ebsynth unility插件里面把权重设为1,太高了,容易出鬼图,太低了控制会很差,当然如果你只想做点特效,也想节约时间,机器性能也差,那就将重绘幅度设置为小于0.35吧,这样画面闪烁会很低,但改变也很少。
3> 接下这点要格外注意:
关于推荐步骤里面的描述:拖拽任意图片到图生图主窗口。这样做能有效避免错误,但不会影响图生图的结果。
这一点描述是有问题,你在图生图主窗口的缩放模式,和control net的缩放模式,请务必一致。而且和建议的拖拽任意图片不同,我的建议是必须原视频的任意图片,如果你拿了一个尺寸不一样的其他图片,蒙版会出现漂移,人物对不准蒙版的情况。
如果视频尺寸过大,同样可能出蒙版漂移的问题,如果是这样,建议先修改视频分辨率和尺寸
4> 关键帧风格化或者重大转变 ,如果希望转换幅度比较大,那建议不要添加精确的边界或者线稿controlnet,仅仅用depth_zoe和openpost去控制大概。
用shuffle洗牌模型可以让你作品控制力更强,变更更多,上传图片添加你想要的元素,当然也要配合种子和提示词来做调整。如果你的设备还好,所有controlnet都建议使用完美像素模式,如果用了controlnet,那么重回幅度就可以设置很大,如果重绘低于0.75这个数值,画面变化不会很大。
(请注意,仅仅使用到shuffle模型时需要使用上传特定图片,其余controlnet留空,会自动填充图片)

有问题欢迎大家指正说明