搭建一個 AI 網路電視臺

釋出於 2023 年 7 月 17 日
在 GitHub 上更新

AI 網路電視臺是一個實驗性演示,旨在展示自動影片和音樂合成的最新進展。

👉 立即訪問 AI 網路電視臺 Space 觀看直播。

如果您使用移動裝置,可以透過 Twitch 映象觀看直播。

thumbnail.gif

概念

AI 網路電視臺的目的是以一種有趣且易於訪問的方式,演示使用 Zeroscope 和 MusicGen 等開源文字轉影片模型生成的影片。

您可以在 Hugging Face 中心找到這些開源模型

單個影片序列特意製作得很短,這意味著網路電視臺應被視為技術演示/展示片,而非實際節目(帶有藝術指導或程式設計)。

架構

AI 網路電視臺透過獲取一系列影片鏡頭提示,並將其傳遞給文字轉影片模型以生成一系列片段

此外,一個基礎主題和想法(由人類撰寫)透過大型語言模型(此處為 ChatGPT)生成每個影片剪輯的各種獨立提示。

以下是 AI 網路電視臺當前架構的圖示

diagram.jpg

實現管道

網路電視臺使用 NodeJS 和 TypeScript 實現,並使用 Hugging Face 上託管的各種服務。

文字轉影片模型

核心影片模型是 Zeroscope V2,一個基於 ModelScope 的模型。

Zeroscope 由兩部分組成,可以連結在一起

👉   生成和升級都需要使用相同的提示詞。

呼叫影片鏈

為了快速製作原型,網路電視臺透過兩個執行 Gradio 的重複 Hugging Face Spaces 執行 Zeroscope,這些 Spaces 使用 @gradio/client NPM 包呼叫。您可以在這裡找到原始的 Spaces

如果您在 Hub 上搜尋 Zeroscope,還可以找到社群部署的其他 Spaces。

👉   公開 Spaces 隨時可能因訪問量過大而暫停。如果您打算部署自己的系統,請複製這些 Spaces 並在您自己的賬戶下執行。

使用託管在 Space 上的模型

使用 Gradio 的 Spaces 具有公開 REST API 的能力,然後可以使用 @gradio/client 模組從 Node 呼叫該 API。

這裡是一個例子

import { client } from "@gradio/client"

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

  // call the "run()" function with an array of parameters
  const { data } = await api.predict("/run", [		
    prompt,
    42,	// seed	
    24, // nbFrames
    35 // nbSteps
  ])
  
  const { orig_name } = data[0][0]

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

  // the file can then be downloaded and stored locally
}

後期處理

一旦單個鏡頭(影片剪輯)被升級,它就會被傳遞給 FILM(用於大運動的幀插值),一種幀插值演算法

在後期處理過程中,我們還添加了用 MusicGen 生成的音樂

廣播流

注意:您可以使用多種工具來建立影片流。AI 網路電視臺目前使用 FFmpeg 讀取由 mp4 影片檔案和 m4a 音訊檔案組成的播放列表。

以下是建立此類播放列表的示例

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

const allFiles = await fs.readdir("** PATH TO VIDEO FOLDER **")
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://<SERVER>

FFmpeg 有許多不同的配置選項,更多資訊請參閱官方文件

對於 RTMP 伺服器,您可以在 GitHub 上找到開源實現,例如 NGINX-RTMP 模組

AI 網路電視臺本身使用 node-media-server

💡 您也可以直接流式傳輸到 Twitch RTMP 入口點之一。有關更多詳細資訊,請檢視 Twitch 文件。

觀察與示例

以下是一些生成內容的示例。

我們首先注意到,應用 Zeroscope XL 的第二遍處理會顯著提高影像質量。幀插值的影響也清晰可見。

角色與場景構成

提示詞:逼真的電影,講述了一隻羊駝扮演程式設計師,戴著眼鏡,穿著連帽衫,在舒適、昏暗的房間裡專注地盯著螢幕上的程式碼行,佳能 EOS,環境光線,高細節,電影感,artstation 熱門。
提示詞:3D 渲染動畫,展示一群食物角色形成金字塔,一隻香蕉得意地站在頂端。在一個擁有棉花糖雲朵巧克力路的城市,皮克斯風格,CGI,環境光線,直射陽光,豐富配色,超現實,電影感,逼真。
提示詞:一隻紅狐近距離特寫,銳利的眼睛凝視鏡頭,環境光線營造出高對比度剪影,IMAX 攝像機,高細節電影效果,黃金時段,膠片顆粒。

動態場景模擬

文字轉影片模型真正引人入勝的一點是它們能夠模仿它們所訓練的真實世界現象。

我們已經看到大型語言模型能夠合成模仿人類反應的令人信服的內容,但這在應用於影片時將事物帶到了一個全新的維度。

影片模型預測場景的下一幀,其中可能包含流體、人物、動物或車輛等運動物體。目前,這種模擬並不完美,但評估未來的模型(針對更大或專業資料集,例如動物運動進行訓練)在重現物理現象的準確性以及模擬代理行為的能力方面將很有趣。

提示詞:電影鏡頭,蜜蜂在花朵周圍充滿活力地嗡嗡作響,陽光照亮場景,以 4k IMAX 拍攝,背景虛化柔和。
提示詞:一頭灰熊在湍急的河流中捕撈三文魚的動態鏡頭,環境光線突出濺起的水花,低角度,IMAX 攝像機,4K 電影畫質,黃金時段,膠片顆粒。
提示詞:加利福尼亞海岸寧靜早晨的航拍鏡頭,海浪輕柔地拍打著岩石海岸。驚豔的日出以鮮豔的色彩照亮海岸,用 DJI Phantom 4 Pro 精美捕捉。在柔和的晨光下,風景的色彩和紋理栩栩如生。膠片顆粒,電影感,IMAX,電影。

💡 未來探索這些能力將很有趣,例如透過在覆蓋更多現象的更大影片資料集上訓練影片模型。

樣式和效果

提示詞:3D 渲染影片,一個友好的西蘭花角色戴著帽子,在糖果遍佈的城市街道上,薑餅屋林立,在明亮的陽光和藍天下行走,皮克斯風格,電影感,逼真,電影,環境光線,自然光線,CGI,廣角視野,白天,超現實。
提示詞:電影感影片,拍攝宇航員和羊駝在黎明時分,山地景觀沐浴在柔和的低飽和度色彩中,清晨薄霧,毛髮上閃爍的露珠,崎嶇的山峰,復古 NASA 宇航服,佳能 EOS,皮膚高細節,史詩般的構圖,高畫質,4K,Artstation 熱門,美麗。
提示詞:熊貓和黑貓乘坐小船沿河流而下,吉卜力工作室風格 > 電影感,美麗構圖 > IMAX 攝像機跟隨小船平移 > 高畫質,電影感,電影,霧效,膠片顆粒,Artstation 熱門。

失敗案例

方向錯誤:模型有時在處理運動和方向時會遇到問題。例如,這裡的影片片段似乎是倒放的。此外,修飾符關鍵詞綠色也沒有被考慮進去。

提示詞:電影,展現一個綠色南瓜落入釘床,慢動作爆炸,碎片四處飛濺,環境霧氣烘托戲劇性燈光,IMAX 攝像機拍攝,8k 超高畫質,高質量,Artstation 熱門。

真實場景的渲染錯誤:有時我們會看到諸如移動的垂直線或波浪之類的偽影。目前尚不清楚其原因,但這可能與使用的關鍵詞組合有關。

提示詞:電影鏡頭,大峽谷上空迷人的飛行,橙紅色刻畫的懸崖和高原。正午陽光下,深邃的陰影與熾熱的景觀形成對比,使用 DJI Phantom 4 Pro 拍攝。攝像機旋轉以捕捉廣闊的紋理和色彩,imax 質量。膠片顆粒,電影感,電影。

影像中插入的文字或物體:模型有時會將提示中的詞語注入場景中,例如“IMAX”。在提示中提及“Canon EOS”或“Drone footage”也可能導致這些物體出現在影片中。

在下面的例子中,我們注意到“llama”(羊駝)這個詞不僅插入了一隻羊駝,還插入了兩次火焰中的“llama”字樣。

提示詞:電影場景,一隻羊駝扮演消防員,身穿消防服,在混亂的城市場景中,戲劇性地向熊熊火焰噴水,佳能 EOS,環境光線,高質量,獲獎,高度細緻的毛髮,電影感,Artstation 熱門。

建議

以下是根據之前的觀察可以給出的一些早期建議

使用影片專用提示關鍵詞

您可能已經知道,如果您不提示 Stable Diffusion 影像的特定方面,衣服顏色或一天中的時間等內容可能會變得隨機,或者被賦予一個通用值,例如中性午間光線。

影片模型也是如此:您需要對事物具體化。例子包括攝像機和角色的運動、它們的朝向、速度和方向。您可以為了創意目的(想法生成)而將其保持未指定,但這可能不會總是給出您想要的結果(例如,實體反向動畫)。

保持場景之間的一致性

如果您計劃建立多個影片序列,您會希望在每個提示中新增儘可能多的細節,否則您可能會從一個序列到另一個序列丟失重要細節,例如顏色。

💡 這也將提高影像質量,因為提示用於 Zeroscope XL 的升級部分。

利用幀插值

幀插值是一個強大的工具,可以修復小的渲染錯誤,並將許多缺陷轉化為特色,尤其是在動畫較多的場景中,或者卡通效果可以接受的情況下。FILM 演算法將透過影片剪輯中之前和之後的事件來平滑幀中的元素。

當攝像機平移或旋轉時,這對於置換背景非常有效,並且還可以為您提供創作自由,例如控制生成後的幀數,以製作慢動作效果。

未來工作

我們希望您喜歡觀看 AI 網路電視臺的直播,並希望它能激發您在該領域創造更多內容。

由於這是首次嘗試,許多事情並非本次技術演示的重點:生成更長、更多樣化的序列,新增音訊(音效、對話),生成和編排複雜場景,或者讓語言模型代理對管道擁有更多控制權。

其中一些想法可能會在 AI 網路電視臺的未來更新中實現,但我們也迫不及待地想看到研究人員、工程師和開發者社群會創造出什麼!

社群

註冊登入 發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.