可控高清视频生成: CogVideoX+DiffSynth-Studio = “配置拉满”

简介: 不久前,CogVideoX 开源了 5B 版本的文生视频模型。开源项目 DiffSynth-Studio 为 CogVideoX 提供了更强大的功能支持。我们一起来看一下,在DiffSynth-Studio 的加持下,“配置拉满”的 CogVideoX 有多强!

不久前,CogVideoX 开源了 5B 版本的文生视频模型。现在,开源项目 DiffSynth-Studio 为 CogVideoX 提供了更强大的功能支持。在本期文章中,我们一起来看一下,在DiffSynth-Studio 的加持下,“配置拉满”的 CogVideoX 有多强!

样例展示

首先我们生成一个骑马的宇航员,使用的提示词是“an astronaut riding a horse on Mars.”。

示例代码:

from diffsynth import ModelManager, save_video, VideoData, download_models, CogVideoPipeline
from diffsynth.extensions.RIFE import RIFEInterpolater
import torch, os
os.environ["TOKENIZERS_PARALLELISM"] = "True"
def text_to_video(model_manager, prompt, seed, output_path):
    pipe = CogVideoPipeline.from_model_manager(model_manager)
    torch.manual_seed(seed)
    video = pipe(
        prompt=prompt,
        height=480, width=720,
        cfg_scale=7.0, num_inference_steps=200
    )
    save_video(video, output_path, fps=8, quality=5)
download_models(["CogVideoX-5B", "RIFE"])
model_manager = ModelManager(torch_dtype=torch.bfloat16)
model_manager.load_models([
    "models/CogVideo/CogVideoX-5b/text_encoder",
    "models/CogVideo/CogVideoX-5b/transformer",
    "models/CogVideo/CogVideoX-5b/vae/diffusion_pytorch_model.safetensors",
    "models/RIFE/flownet.pkl",
])
# Example 1
text_to_video(model_manager, "an astronaut riding a horse on Mars.", 0, "1_video_1.mp4")

然后,我们使用视频生视频功能,把宇航员改成一个机器人,使用的提示词是“a white robot riding a horse on Mars.”。

def edit_video(model_manager, prompt, seed, input_path, output_path):
    pipe = CogVideoPipeline.from_model_manager(model_manager)
    input_video = VideoData(video_file=input_path)
    torch.manual_seed(seed)
    video = pipe(
        prompt=prompt,
        height=480, width=720,
        cfg_scale=7.0, num_inference_steps=200,
        input_video=input_video, denoising_strength=0.7
    )
    save_video(video, output_path, fps=8, quality=5)
edit_video(model_manager, "a white robot riding a horse on Mars.", 1, "1_video_1.mp4", "1_video_2.mp4")

视频的分辨率和帧率似乎不高,我们提高分辨率到 960x1440,再使用插帧技术,让视频变得丝滑流畅。

def self_upscale(model_manager, prompt, seed, input_path, output_path):
    pipe = CogVideoPipeline.from_model_manager(model_manager)
    input_video = VideoData(video_file=input_path, height=480*2, width=720*2).raw_data()
    torch.manual_seed(seed)
    video = pipe(
        prompt=prompt,
        height=480*2, width=720*2,
        cfg_scale=7.0, num_inference_steps=30,
        input_video=input_video, denoising_strength=0.4, tiled=True
    )
    save_video(video, output_path, fps=8, quality=7)
def interpolate_video(model_manager, input_path, output_path):
    rife = RIFEInterpolater.from_model_manager(model_manager)
    video = VideoData(video_file=input_path).raw_data()
    video = rife.interpolate(video, num_iter=2)
    save_video(video, output_path, fps=32, quality=5)
self_upscale(model_manager, "a white robot riding a horse on Mars.", 2, "1_video_2.mp4", "1_video_3.mp4")
interpolate_video(model_manager, "1_video_3.mp4", "1_video_4.mp4")

再来看另外一个例子。

首先我们生成一只小狗,使用的提示词是“a dog is running.”。

然后,我们使用视频生视频功能,把小狗的项圈改成蓝色,使用的提示词是“a dog with blue collar.”。

视频的分辨率和帧率似乎不高,我们提高分辨率到 960x1440,再使用插帧技术,让视频变得丝滑流畅。

原理解析

在基础的文生视频功能中,DiffSynth-Studio 沿用了 CogVideoX 原版的处理流程,但我们发现,迭代步数对于生成视频的质量影响非常大。在迭代步数比较少时,小狗的腿部动作会有些混乱,在上述样例中,我们把迭代步数加到了 200 步。

迭代 20 步

迭代 50 步

迭代 200 步

基于文生图模型的图生图技术已经很成熟了,根据类似的思路,DiffSynth-Studio 实现了基于文生视频模型的视频生视频技术。具体来说,就是对视频加噪到中间步骤,然后重新运行迭代过程的后半段,模型就会根据提示词对画面中的内容进行编辑。

此外,DiffSynth-Studio 还借鉴了 SD-WebUI 中的高分辨率修复技术,将其应用到了 CogVideoX 上,原理和图生图类似,用模型自身重新润色高分辨率的视频。值得注意的是,由于模型本身位置编码的固定性,高分辨率视频无法直接输入给模型,所以 DiffSynth-Studio 采用了 tile 处理方式,每次只会把画面中的一部分输入给模型进行处理。

最后,CogVideoX 目前只能生成 49 帧,经过测试发现它还无法像“扩图”一样“扩视频”,但我们可以用插帧模型进一步处理它生成的视频,提高视频的帧率。上述样例中使用的插帧模型是 RIFE(Real-Time Intermediate Flow Estimation),插帧两次都得到 193 帧。

最佳实践

下载并安装 DiffSynth-Studio:

git clone https://github.com/modelscope/DiffSynth-Studio.git
cd DiffSynth-Studio
pip install -e .

运行样例脚本(模型会自动下载):

python examples/video_synthesis/cogvideo_text_to_video.py

由于这个脚本中开启了高分辨率修复,所以目前只有 80G 显存的显卡可以运行全部流程。


相关文章
|
6月前
|
IDE 小程序 JavaScript
6月开发者日回顾|IDE多功能更新,质量洞察、全息检测工具全新升级
6月开发者日回顾|IDE多功能更新,质量洞察、全息检测工具全新升级
55 0
|
3月前
|
API UED 开发者
超实用技巧大放送:彻底革新你的WinForms应用,从流畅动画到丝滑交互设计,全面解析如何在保证性能的同时大幅提升用户体验,让软件操作变得赏心悦目不再是梦!
【8月更文挑战第31天】在Windows平台上,使用WinForms框架开发应用程序时,如何在保持性能的同时提升用户界面的吸引力和响应性是一个常见挑战。本文探讨了在不牺牲性能的前提下实现流畅动画与交互设计的最佳实践,包括使用BackgroundWorker处理耗时任务、利用Timer控件创建简单动画,以及使用Graphics类绘制自定义图形。通过具体示例代码展示了这些技术的应用,帮助开发者显著改善用户体验,使应用程序更加吸引人和易于使用。
72 0
|
6月前
|
并行计算 Linux 异构计算
分享一款刚开源上线3天的音乐人声分离工具!无需联网!页面化操作!
分享一款刚开源上线3天的音乐人声分离工具!无需联网!页面化操作!
|
6月前
|
机器学习/深度学习 人工智能 监控
视觉智能平台常见问题之体验产品的美颜测试关掉如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
|
6月前
|
机器学习/深度学习 人工智能 算法
免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼
在音视频领域,把已经发布的混音歌曲或者音频文件逆向分离一直是世界性的课题。音波混合的物理特性导致在没有原始工程文件的情况下,将其还原和分离是一件很有难度的事情。 言及背景音人声分离技术,就不能不提Spleeter,它是一种用于音频源分离(音乐分离)的开源深度学习算法,由Deezer研究团队开发。使用的是一个性能取向的音源分离算法,并且为用户提供了已经预训练好的模型,能够开箱即用,这也是Spleeter泛用性高的原因之一,关于Spleeter,请移步:[人工智能AI库Spleeter免费人声和背景音乐分离实践(Python3.10)](https://v3u.cn/a_id_305),这里
免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼
|
安全 Java Devops
在线捉虫:1分钟代码自动检测体验
1分钟快速体验阿里云云效提供的免费在线git代码托管和代码自动检测能力
|
Android开发 iOS开发 Windows
无影产品动态|iOS & Android客户端6.0.0版本发布,提升触控灵敏度,操作体验更丝滑
无影ios & Android客户端6.0.0版本发布!移动端触控体验更舒适,用户操作更便捷,一起来看看!
795 0
无影产品动态|iOS & Android客户端6.0.0版本发布,提升触控灵敏度,操作体验更丝滑
|
开发工具
语音聊天室源码技术美颜滤镜功能的配置
美颜滤镜功能从现身以来一直受到人们的火爆追捧,所以为了顺应市场的需求,开发语音聊天室源码平台也必须要有美颜滤镜功能,今天我就将语音聊天室源码技术美颜滤镜功能的配置知识分享给大家。
语音聊天室源码技术美颜滤镜功能的配置
|
机器学习/深度学习 算法
【OpenVI—视觉生产系列之视频插帧实战篇】几行代码,尽享流畅丝滑的视频观感
随着网络电视、手机等新媒体领域的快速发展,用户对于观看视频质量的要求也越来越高。当前市面上所广为传播的视频帧率大多仍然处于20~30fps,已经无法满足用户对于高清、流畅的体验追求。而视频插帧算法,能够有效实现多倍率的帧率提升,有效消除低帧率视频的卡顿感,让视频变得丝滑流畅。配合其它的视频增强算法,更是能够让低质量视频焕然一新,让观众享受到极致的播放和观看体验。
623 0
【OpenVI—视觉生产系列之视频插帧实战篇】几行代码,尽享流畅丝滑的视频观感