Press "Enter" to skip to content

构建一个人工智能网络电视

AI WebTV 是一个实验性演示,展示了自动视频和音乐合成的最新进展。

👉 现在可以通过访问 AI WebTV 空间来观看直播。

如果您使用移动设备,可以从 Twitch 镜像观看直播。

构建一个人工智能网络电视 四海 第1张

AI WebTV 的动机是以娱乐和易于接触的方式演示由开源文本到视频模型(如 Zeroscope 和 MusicGen)生成的视频。

您可以在 Hugging Face hub 上找到这些开源模型:

  • 用于视频:zeroscope_v2_576 和 zeroscope_v2_XL
  • 用于音乐:musicgen-melody

每个视频序列都故意制作得很短,因此 WebTV 应该被视为技术演示/展示卷轴,而不是实际的节目(带有艺术指导或编程)。

AI WebTV 的工作原理是将一系列视频拍摄提示传递给文本到视频模型,以生成一系列拍摄。

此外,还将由人类编写的基本主题和思路通过 LLM(在本例中为 ChatGPT)传递,以生成每个视频剪辑的各种个别提示。

下图显示了 AI WebTV 的当前架构:

构建一个人工智能网络电视 四海 第2张

WebTV 使用 NodeJS 和 TypeScript 实现,并使用 Hugging Face 托管的各种服务。

文本到视频模型

核心视频模型是 Zeroscope V2,这是一个基于 ModelScope 的模型。

Zeroscope 由两部分组成:

  • 第一步是使用 zeroscope_v2_576 进行处理,生成 576×320 的视频剪辑
  • 可选的第二步是使用 zeroscope_v2_XL 将视频放大到 1024×576

👉 您需要同时使用相同的提示进行生成和放大。

调用视频链

为了进行快速原型设计,WebTV 从两个重复的运行 Gradio 的 Hugging Face Spaces 中运行 Zeroscope,使用 @gradio/client NPM 包进行调用。您可以在这里找到原始空间:

  • 由 @hysts 创建的 zeroscope-v2
  • 由 @fffiloni 创建的 Zeroscope XL

如果搜索 Hub 上的 Zeroscope,还可以找到社区部署的其他空间。

👉 公共空间可能会过度拥挤并随时暂停。如果您打算部署自己的系统,请复制这些空间并在自己的帐户下运行。

使用托管在空间上的模型

使用 Gradio 的空间具有公开 REST API 的功能,然后可以使用 @gradio/client 模块从 Node 中调用该 API。

以下是一个示例:

import { client } from "@gradio/client"

export const generateVideo = async (prompt: string) => {
  const api = await client("*** SPACE 的 URL ***")

  // 使用参数数组调用 "run()" 函数
  const { data } = await api.predict("/run", [      
    prompt,
    42, // 种子
    24, // 帧数
    35 // 步数
  ])
  
  const { orig_name } = data[0][0]

  const remoteUrl = `${instance}/file=${orig_name}`

  // 然后可以下载并本地存储该文件
}

后处理

一旦个别拍摄(视频剪辑)被放大,它们将传递给 FILM(用于大运动的帧插值)算法进行后处理:

  • 原始链接:网站,源代码
  • Hugging Face 上的模型:/frame-interpolation-film-style
  • 您可以复制的 Hugging Face 空间:video_frame_interpolation by @fffiloni

在后处理过程中,还会添加由 MusicGen 生成的音乐:

  • 原始链接:网站,源代码
  • Hugging Face Space你可以复制:MusicGen

广播流

注意:您可以使用多种工具来创建视频流。AI WebTV目前使用FFmpeg来读取由mp4视频文件和m4a音频文件组成的播放列表。

下面是创建这样一个播放列表的示例:

import { promises as fs } from "fs"
import path from "path"

const allFiles = await fs.readdir("** VIDEO文件夹的路径 **")
const allVideos = allFiles
  .map(file => path.join(dir, file))
  .filter(filePath => filePath.endsWith('.mp4'))

let playlist = 'ffconcat version 1.0\n'
allFilePaths.forEach(filePath => {
  playlist += `file '${filePath}'\n`
})
await fs.promises.writeFile("playlist.txt", playlist)

这将生成以下播放列表内容:

ffconcat version 1.0
file 'video1.mp4'
file 'video2.mp4'
...

然后再次使用FFmpeg读取此播放列表并发送FLV流到RTMP服务器。FLV是一种旧格式,但由于其低延迟,在实时流媒体领域仍然很受欢迎。

ffmpeg -y -nostdin \
  -re \
  -f concat \
  -safe 0 -i channel_random.txt -stream_loop -1 \
  -loglevel error \
  -c:v libx264 -preset veryfast -tune zerolatency \
  -shortest \
  -f flv rtmp://<服务器>

FFmpeg有许多不同的配置选项,更多信息请参阅官方文档。

对于RTMP服务器,您可以在GitHub上找到开源实现,例如NGINX-RTMP模块。

AI WebTV本身使用node-media-server。

💡 您还可以直接流式传输到Twitch RTMP入口之一。请查阅Twitch文档了解更多详情。

这里有一些生成内容的示例。

我们首先注意到的是,应用Zeroscope XL的第二次传递显着提高了图像的质量。帧插值的影响也非常明显。

角色和场景构图

提示:以一个戴眼镜和连帽衫的羊驼扮演程序员的写实电影,紧紧盯着一屏幕上的代码行,在一个舒适的昏暗房间里,使用佳能EOS相机,环境光照,高细节,电影化风格,在artstation上流行。

提示:渲染的3D动画展示了一群食物角色形成金字塔,香蕉在塔顶上战胜众人。在一个有棉花糖云和巧克力路的城市里,采用Pixar的风格,CGI,环境光照,直射阳光,丰富的色彩方案,超逼真,电影化,写实风格。

提示:近距离拍摄一只红狐狸,用锐利的眼神凝视着摄像机,环境光照营造出高对比度的剪影效果,IMAX相机,高细节,电影化效果,黄金时刻,胶片颗粒。

动态场景模拟

文本到视频模型真正迷人的地方在于它们能够模拟它们训练过的真实现象。

我们已经看到了大型语言模型的能力,它们能够合成出模仿人类回应的令人信服的内容,但是当应用于视频时,这将带来全新的维度。

视频模型预测场景的下一帧,其中可能包括运动中的物体,如流体、人物、动物或车辆。目前,这种模拟并不完美,但评估未来模型(在更大或专门的数据集上训练,如动物运动)在再现物理现象方面的准确性以及模拟代理行为的能力将非常有趣。

提示:拍摄一部电影级别的镜头,展示了蜜蜂在花朵周围活跃地嗡嗡作响,阳光照亮了整个场景,4K IMAX拍摄,背景模糊。

提示: 一只灰熊在湍急的河流中捕捉鲑鱼的动态镜头,环境光线凸显水花,低角度,IMAX相机,4K影片质量,黄金时段,胶片颗粒感。

提示: 加利福尼亚海岸的宁静早晨的航拍镜头,海浪轻轻拍打着岩石海岸。惊艳的日出用鲜艳的色彩照亮了海岸线,美丽地捕捉到了DJI Phantom 4 Pro。在柔和的晨光下,风景的色彩和纹理焕发生机。胶片颗粒感,电影化,IMAX,电影

💡有趣的是,未来将有更多关于这些功能的探索,例如通过在覆盖更多现象的更大视频数据集上训练视频模型。

风格和效果

提示: 友好的西兰花角色戴着帽子,在一条布满糖果的城市街道上散步,阳光明媚,蓝天白云,像皮克斯一样的风格,电影化,写实画面,电影,环境光线,自然光,计算机生成图像,广角视角,白天,超写实。

提示: 电影化的电影镜头,拍摄了一个黎明时分的宇航员和一只羊驼,山脉景观沐浴在柔和的柔和的色彩中,清晨的雾气,毛发上闪烁的露水,崎岖的山峰,复古的NASA服装,佳能EOS,高度细腻的肌肤,史诗般的构图,高质量,4K,艺术站上的趋势,美丽

提示: 熊猫和黑猫在流动的河流中划船,吉卜力风格>电影化,美丽的构图>IMAX摄像机跟随船只移动>高质量,电影化,电影,雾效果,胶片颗粒感,在艺术站上流行

失败案例

方向错误:模型有时对于运动和方向有困难。例如,在这里剪辑似乎是倒放的。同时,修饰关键词绿色没有被考虑在内。

提示: 影片展示了一个绿色南瓜掉入钉子床的场景,慢动作爆炸,碎块飞溅,环境雾气增添戏剧性的照明效果,用IMAX相机拍摄,8K超高清,高质量,在艺术站上流行。

逼真场景的渲染错误:有时我们可以看到一些伪影,如移动的垂直线或波纹。目前尚不清楚造成这种情况的原因,但可能是由于所使用的关键词组合。

提示: 电影拍摄了一个令人着迷的在大峡谷上空飞行的场景,橙色和红色的台地和平顶。在正午的阳光下,深处的阴影与火红的景色形成对比,用DJI Phantom 4 Pro拍摄。相机旋转以捕捉广袤的景象,纹理和色彩,以IMAX质量呈现。胶片颗粒感,电影化,电影。

文本或物体插入图像:模型有时会将提示中的单词注入到场景中,比如”IMAX”。在提示中提到”佳能EOS”或”无人机镜头”也会使这些物体出现在视频中。

在以下示例中,我们注意到单词”羊驼”插入了一只羊驼,但也出现了两次单词”羊驼”在火焰中。

提示: 电影场景中,一只羊驼扮演消防员,身穿消防员制服,在熊熊燃烧的火焰中戏剧性地喷水,混乱的城市场景中,佳能EOS,环境光照,高质量,获奖作品,高度详细的毛发,电影化,在艺术站上流行。

以下是根据之前的观察得出的一些建议:

使用视频特定的提示关键词

您可能已经了解,如果在稳定扩散中没有提示图像的特定方面,诸如服装颜色或白天时间可能会变得随机,或被分配为中性的正午光照。

对于视频模型也是如此:您会希望对事物做出具体的描述。例如相机和角色的运动,它们的方向,速度和方向。出于创意目的,您可以不具体说明(创意生成),但这可能不会总是给您想要的结果(例如,以相反方式动画化的实体)。

保持场景的一致性

如果您计划创建多个视频的序列,您需要确保在每个提示中尽可能添加更多细节,否则可能会在一个序列到另一个序列中丢失重要细节,比如颜色。

💡 这也将提高图像的质量,因为提示用于与Zeroscope XL进行放大。

利用帧插值

帧插值是一种强大的工具,可以修复小的渲染错误,并将许多缺陷转化为特点,特别是在有大量动画或接受卡通效果的场景中。FILM算法将平滑视频剪辑中当前帧与前后事件的元素。

当摄像机平移或旋转时,这对于位移背景效果非常好,还能给您创造自由,比如控制生成后的帧数,制作慢动作效果。

我们希望您喜欢观看AI WebTV的直播,并希望它能激发您在此领域进行更多创作。

由于这是第一次尝试,许多事情并不是技术演示的重点: 生成更长更多样化的序列,添加音频(声音效果,对话),生成和编排复杂情节,或让语言模型代理对流水线拥有更多控制权。

这些想法中的一些可能会在AI WebTV的未来更新中实现,但我们也迫不及待地想看到研究人员、工程师和构建者社区会有哪些创意!

Leave a Reply

Your email address will not be published. Required fields are marked *