Creazione di una WebTV AI
WebTV AI Creation
L’AI WebTV è una demo sperimentale per mostrare gli ultimi progressi nella sintesi automatica di video e musica.
👉 Guarda lo streaming adesso andando nello spazio AI WebTV.
Se stai utilizzando un dispositivo mobile, puoi visualizzare lo streaming dallo specchio di Twitch.
- L’Europa guarda alle fabbriche virtuali nella nuova rivoluzione industriale
- Equipe di robot in tour di esplorazione lunare
- Non per le macchine da raccogliere” le rivolte dei dati si scatenano contro l’IA
La motivazione per l’AI WebTV è quella di mostrare video generati con modelli open-source di testo-su-video come Zeroscope e MusicGen, in modo divertente e accessibile.
Puoi trovare quei modelli open-source sul hub di Hugging Face:
- Per i video: zeroscope_v2_576 e zeroscope_v2_XL
- Per la musica: musicgen-melody
Le singole sequenze video sono appositamente brevi, il che significa che la WebTV dovrebbe essere vista come una demo tecnica/showreel piuttosto che un vero e proprio spettacolo (con una direzione artistica o programmazione).
L’AI WebTV funziona prendendo una sequenza di suggerimenti per riprese video e passandoli a un modello di testo-su-video per generare una sequenza di riprese.
Inoltre, un tema e un’idea di base (scritti da un umano) vengono passati attraverso un LLM (in questo caso, ChatGPT), al fine di generare una varietà di suggerimenti individuali per ogni clip video.
Ecco un diagramma dell’architettura attuale dell’AI WebTV:
La WebTV è implementata in NodeJS e TypeScript e utilizza vari servizi ospitati su Hugging Face.
Il modello di testo-su-video
Il modello video centrale è Zeroscope V2, un modello basato su ModelScope.
Zeroscope è composto da due parti che possono essere concatenate insieme:
- Un primo passaggio con zeroscope_v2_576, per generare una clip video di dimensioni 576×320
- Un secondo passaggio opzionale con zeroscope_v2_XL per aumentare la risoluzione del video a 1024×576
👉 Dovrai utilizzare lo stesso suggerimento sia per la generazione che per l’aumento della risoluzione.
Chiamare la catena video
Per realizzare un prototipo rapido, la WebTV esegue Zeroscope da due Spazi Hugging Face duplicati che utilizzano Gradio, che vengono chiamati utilizzando il pacchetto NPM @gradio/client. Puoi trovare gli spazi originali qui:
- zeroscope-v2 di @hysts
- Zeroscope XL di @fffiloni
Anche altri spazi creati dalla comunità possono essere trovati cercando Zeroscope sull’Hub.
👉 Gli Spazi pubblici possono diventare sovraffollati e interrotti in qualsiasi momento. Se intendi distribuire il tuo sistema, duplica quegli Spazi e avviali con il tuo account.
Utilizzo di un modello ospitato su uno Spazio
Gli Spazi che utilizzano Gradio hanno la capacità di esporre un’API REST, che può quindi essere chiamata da Node utilizzando il modulo @gradio/client.
Ecco un esempio:
import { client } from "@gradio/client"
export const generateVideo = async (prompt: string) => {
const api = await client("*** URL DELLO SPAZIO ***")
// chiama la funzione "run()" con un array di parametri
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}`
// il file può quindi essere scaricato e memorizzato localmente
}
Post-elaborazione
Una volta che una singola ripresa (una clip video) è stata aumentata di risoluzione, viene passata a FILM (Frame Interpolation for Large Motion), un algoritmo di interpolazione dei fotogrammi:
- Link originali: sito web, codice sorgente
- Modello su Hugging Face: /frame-interpolation-film-style
- Uno Spazio Hugging Face che puoi duplicare: video_frame_interpolation di @fffiloni
Durante la post-elaborazione, aggiungiamo anche musica generata con MusicGen:
- Link originali: sito web, codice sorgente
- Hugging Face Space che puoi duplicare: MusicGen
Trasmissione dello streaming
Nota: ci sono molti strumenti che puoi utilizzare per creare uno streaming video. Attualmente, AI WebTV utilizza FFmpeg per leggere una playlist composta da file video mp4 e file audio m4a.
Ecco un esempio di creazione di una tale playlist:
import { promises as fs } from "fs"
import path from "path"
const allFiles = await fs.readdir("** PERCORSO ALLA CARTELLA DEI 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)
Questo genererà il seguente contenuto della playlist:
ffconcat version 1.0
file 'video1.mp4'
file 'video2.mp4'
...
In seguito, FFmpeg viene nuovamente utilizzato per leggere questa playlist e inviare uno streaming FLV a un server RTMP. FLV è un vecchio formato, ma è ancora popolare nel mondo dello streaming in tempo reale grazie alla sua bassa latenza.
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>
Esistono molte diverse opzioni di configurazione per FFmpeg, per ulteriori informazioni consulta la documentazione ufficiale.
Per il server RTMP, puoi trovare implementazioni open-source su GitHub, come il modulo NGINX-RTMP.
AI WebTV stesso utilizza node-media-server.
💡 Puoi anche trasmettere direttamente ad uno degli ingressi RTMP di Twitch. Dai un’occhiata alla documentazione di Twitch per ulteriori dettagli.
Ecco alcuni esempi del contenuto generato.
La prima cosa che notiamo è che l’applicazione del secondo passaggio di Zeroscope XL migliora significativamente la qualità dell’immagine. L’impatto dell’interpolazione dei fotogrammi è anche chiaramente visibile.
Personaggi e composizione della scena
Prompt: Film fotorealistico di un lama che fa il programmatore, indossa gli occhiali e una felpa con cappuccio, guarda intensamente uno schermo con righe di codice, in una stanza accogliente e poco illuminata, Canon EOS, illuminazione ambiente, dettagli elevati, cinematico, popolare su artstation
Prompt: Animazione 3D mostrante un gruppo di personaggi alimentari che formano una piramide, con una banana che si erge trionfalmente in cima. In una città con nuvole di zucchero filato e strada di cioccolato, stile Pixar, CGI, illuminazione ambiente, luce diretta del sole, ricco schema di colori, ultrarealistico, cinematico, fotorealistico.
Prompt: Primo piano intimo di una volpe rossa, che guarda la telecamera con occhi penetranti, illuminazione ambiente che crea un contrasto elevato, telecamera IMAX, dettagli elevati, effetto cinematografico, ora dorata, grana del film.
Simulazione di scene dinamiche
Qualcosa di veramente affascinante riguardo ai modelli di testo-video è la loro capacità di emulare fenomeni reali su cui sono stati addestrati.
Lo abbiamo visto con i grandi modelli di linguaggio e la loro capacità di sintetizzare contenuti convincenti che imitano le risposte umane, ma questo raggiunge una nuova dimensione quando viene applicato ai video.
Un modello video predice i fotogrammi successivi di una scena, che potrebbero includere oggetti in movimento come fluidi, persone, animali o veicoli. Al momento, questa emulazione non è perfetta, ma sarà interessante valutare i futuri modelli (addestrati su dataset più grandi o specializzati, come la locomozione animale) per la loro accuratezza nella riproduzione di fenomeni fisici e anche per la loro capacità di simulare il comportamento degli agenti.
Prompt: Ripresa cinematografica di api che ronzano energicamente attorno a un fiore, raggi di sole che illuminano la scena, ripresa in 4k IMAX con uno sfondo sfocato.
Prompt: Ripresa dinamica di un orso grizzly che cattura un salmone in un fiume impetuoso, illuminazione ambientale che mette in evidenza l’acqua che schizza, angolazione bassa, telecamera IMAX, qualità video 4K, ora dorata, grana cinematografica.
Prompt: Ripresa aerea di una tranquilla mattina sulla costa della California, con onde che si infrangono dolcemente contro la scogliera. Un’incantevole alba illumina la costa con colori vibranti, catturata magnificamente con un DJI Phantom 4 Pro. I colori e le texture del paesaggio prendono vita sotto la morbida luce mattutina. Grana cinematografica, cinematico, IMAX, film
💡 Sarà interessante vedere queste capacità esplorate maggiormente in futuro, ad esempio addestrando modelli video su dataset video più ampi che coprono più fenomeni.
Stile ed effetti
Prompt: Video renderizzato in 3D di un simpatico personaggio di broccoli che indossa un cappello, che cammina in una strada cittadina piena di caramelle con case di pan di zenzero, sotto un sole brillante e cieli azzurri, stile Pixar, cinematografico, fotorealistico, illuminazione ambientale, illuminazione naturale, CGI, vista grandangolare, diurno, ultra realistico.
Prompt: Film cinematografico, ripresa di un astronauta e un lama all’alba, il paesaggio montano illuminato da colori tenui e delicati, nebbia mattutina, rugose vette, tuta vintage della NASA, Canon EOS, pelle altamente dettagliata, composizione epica, alta qualità , 4K, di tendenza su Artstation, bellissimo
Prompt: Panda e un gatto nero navigano lungo il fiume in piena su una piccola barca, stile Studio Ghibli > Cinematografico, bellissima composizione > Telecamera IMAX che segue la barca > Alta qualità , cinematografico, film, effetto nebbia, grana cinematografica, di tendenza su Artstation
Casi di errore
Direzione errata: a volte il modello ha difficoltà con il movimento e la direzione. Ad esempio, qui la clip sembra essere riprodotta al contrario. Inoltre, la parola chiave modificatrice verde non è stata presa in considerazione.
Prompt: Film che mostra una <strong+zucca verde che cade su un letto di chiodi, esplosione rallentata con schegge che volano ovunque, nebbia ambientale che aggiunge all’illuminazione drammatica, girato con telecamera IMAX, definizione ultra alta 8K, alta qualità , di tendenza su Artstation.
Errori di rendering su scene realistiche: a volte possiamo vedere artefatti come linee verticali o onde in movimento. Non è chiaro cosa causi ciò, ma potrebbe essere dovuto alla combinazione di parole chiave utilizzate.
Prompt: Filmato di un affascinante volo sopra il Grand Canyon, rilievi e altipiani incisi in arancione e rosso. Ombre profonde in contrasto con il paesaggio infuocato sotto il sole di mezzogiorno, girato con DJI Phantom 4 Pro. La telecamera ruota per catturare l’immensità , le texture e i colori, con qualità IMAX. Grana cinematografica, cinematico, film.
Testo o oggetti inseriti nell’immagine: a volte il modello inserisce parole del prompt nella scena, come “IMAX”. Menzionare “Canon EOS” o “Riprese con il drone” nel prompt può anche far apparire quegli oggetti nel video.
Nell’esempio seguente, notiamo che la parola “lama” inserisce un lama ma anche due occorrenze della parola “lama” in fiamme.
Prompt: Scena di un film in cui un lama agisce come un pompiere, in uniforme da pompiere, spruzzando dramaticamente acqua su fiamme ardenti, in mezzo a una scena urbana caotica, Canon EOS, illuminazione ambientale, alta qualità , premiato, pelliccia altamente dettagliata, cinematico, di tendenza su Artstation.
Ecco alcune prime raccomandazioni che possono essere tratte dalle osservazioni precedenti:
Utilizzo di parole chiave specifiche per i video
Potreste già sapere che se non specificate un aspetto specifico dell’immagine con Stable Diffusion, cose come il colore dei vestiti o l’ora del giorno potrebbero diventare casuali o essere assegnate un valore generico come una luce neutra di mezzogiorno.
Lo stesso vale per i modelli video: vorrai essere specifico riguardo alle cose. Gli esempi includono il movimento della telecamera e dei personaggi, la loro orientazione, velocità e direzione. Puoi lasciarlo non specificato per scopi creativi (generazione di idee), ma ciò potrebbe non sempre darti i risultati desiderati (ad esempio, entità animate al contrario).
Mantenere la coerenza tra le scene
Se hai intenzione di creare sequenze di video multipli, assicurati di aggiungere il maggior numero possibile di dettagli in ogni prompt, altrimenti potresti perdere dettagli importanti da una sequenza all’altra, come il colore.
💡 Questo migliorerà anche la qualità dell’immagine poiché il prompt viene utilizzato per la parte di ingrandimento con Zeroscope XL.
Sfrutta l’interpolazione dei fotogrammi
L’interpolazione dei fotogrammi è un potente strumento che può riparare piccoli errori di rendering e trasformare molti difetti in caratteristiche, specialmente nelle scene con molte animazioni o in cui è accettabile un effetto cartone animato. L’algoritmo FILM appianerà gli elementi di un fotogramma con eventi precedenti e successivi nella clip video.
Questo funziona molto bene per spostare lo sfondo quando la telecamera sta panoramizzando o ruotando e ti darà anche la libertà creativa, come il controllo sul numero di fotogrammi dopo la generazione, per creare effetti rallentati.
Speriamo che ti sia piaciuto guardare lo streaming di AI WebTV e che ti ispiri a costruire di più in questo settore.
In quanto si trattava di una prima prova, molte cose non erano al centro del tech demo: generare sequenze più lunghe e variegate, aggiungere audio (effetti sonori, dialoghi), generare e orchestrare scenari complessi o dare a un agente di modellazione del linguaggio un maggiore controllo del processo.
Alcune di queste idee potrebbero trovare spazio in futuri aggiornamenti di AI WebTV, ma non vediamo l’ora di vedere cosa la comunità di ricercatori, ingegneri e creatori riuscirà a realizzare!