可控高清视频生成: 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 显存的显卡可以运行全部流程。


相关文章
|
4月前
|
人工智能 搜索推荐 API
开源2.0|从事视频剪辑的“熬者们”,自动化剪辑工具 FunClip请收好
开源2.0|从事视频剪辑的“熬者们”,自动化剪辑工具 FunClip请收好
开源2.0|从事视频剪辑的“熬者们”,自动化剪辑工具 FunClip请收好
|
3月前
|
Android开发 开发者
Android平台无纸化同屏如何实现实时录像功能
Android平台无纸化同屏,如果需要本地录像的话,实现难度不大,只要复用之前开发的录像模块的就可以,对我们来说,同屏采集这块,只是数据源不同而已,如果是自采集的其他数据,我们一样可以编码录像。
|
4月前
|
API UED 开发者
超实用技巧大放送:彻底革新你的WinForms应用,从流畅动画到丝滑交互设计,全面解析如何在保证性能的同时大幅提升用户体验,让软件操作变得赏心悦目不再是梦!
【8月更文挑战第31天】在Windows平台上,使用WinForms框架开发应用程序时,如何在保持性能的同时提升用户界面的吸引力和响应性是一个常见挑战。本文探讨了在不牺牲性能的前提下实现流畅动画与交互设计的最佳实践,包括使用BackgroundWorker处理耗时任务、利用Timer控件创建简单动画,以及使用Graphics类绘制自定义图形。通过具体示例代码展示了这些技术的应用,帮助开发者显著改善用户体验,使应用程序更加吸引人和易于使用。
81 0
|
4月前
|
开发者 图形学 UED
深度解析Unity游戏开发中的性能瓶颈与优化方案:从资源管理到代码执行,全方位提升你的游戏流畅度,让玩家体验飞跃性的顺滑——不止是技巧,更是艺术的追求
【8月更文挑战第31天】《Unity性能优化实战:让你的游戏流畅如飞》详细介绍了Unity游戏性能优化的关键技巧,涵盖资源管理、代码优化、场景管理和内存管理等方面。通过具体示例,如纹理打包、异步加载、协程使用及LOD技术,帮助开发者打造高效流畅的游戏体验。文中提供了实用代码片段,助力减少内存消耗、提升渲染效率,确保游戏运行丝滑顺畅。性能优化是一个持续过程,需不断测试调整以达最佳效果。
103 0
|
5月前
|
存储 监控 搜索推荐
深度解析:装机设置全攻略,打造个性化高性能电脑
装机不仅仅是一个技术活,更是一个充满乐趣和创造性的过程。通过精心的硬件选择、兼容性的考虑、操作系统的安装与优化、个性化的设置以及性能测试与调优,你可以打造出一台符合自己使用习惯、性能出众的个性化电脑。同时,不要忽视备份与恢复策略的重要性,确保你的数据和系统安全无忧。希望本文能够为你提供有用的指导和启发,让你在装机的道路上更加得心应手。
74 1
|
4月前
|
搜索推荐 API 语音技术
FunClip的基础功能问题之使用FunClip进行智能剪辑的问题如何解决
FunClip的基础功能问题之使用FunClip进行智能剪辑的问题如何解决
452 0
|
7月前
|
并行计算 Linux 异构计算
分享一款刚开源上线3天的音乐人声分离工具!无需联网!页面化操作!
分享一款刚开源上线3天的音乐人声分离工具!无需联网!页面化操作!
104 1
|
7月前
|
机器学习/深度学习 人工智能 监控
视觉智能平台常见问题之体验产品的美颜测试关掉如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
|
Web App开发 编解码 前端开发
更专业省心的来了,你没必要研究UE4和Unity官方推流了!
需求催生了一种新的“云渲染”方案,将庞大负载的“渲染”放到云端强大算力的服务器去执行,前端仅仅是展示和交互。 本文小编介绍了目前主流的3种方案,如果你感兴趣的话一起看看吧~
更专业省心的来了,你没必要研究UE4和Unity官方推流了!