Come realizzare video karaoke utilizzando gli strumenti di intelligenza artificiale Whisper e Spleeter
introduzione
Gli strumenti AI sono utili per manipolare immagini, audio o video per produrre un nuovo risultato. Fino a poco tempo fa, l'editing automatico di immagini o audio era difficile da implementare senza utilizzare una notevole quantità di tempo e potenza di calcolo, e anche allora era spesso possibile solo eseguire filtri chiavi in mano per rimuovere determinate frequenze dai suoni o modificare la tavolozza dei colori delle immagini. Gli approcci più recenti, che utilizzano modelli di intelligenza artificiale e enormi quantità di dati di addestramento, sono in grado di eseguire tecniche di filtraggio e trasformazione molto più sofisticate.
Whisper sono strumenti AI open source progettati per l'analisi e la manipolazione dell'audio. Entrambi sono stati sviluppati e rilasciati insieme ai propri modelli linguistici pre-addestrati, rendendo possibile eseguirli direttamente sull'input fornito, come file audio MP3 o AAC, senza alcuna configurazione aggiuntiva. Spleeter viene utilizzato per separare le tracce vocali dalle tracce strumentali della musica. Whisper viene utilizzato per generare sottotitoli per la lingua parlata. Entrambi hanno molti usi singolarmente e hanno un uso particolare insieme: possono essere usati per generare tracce karaoke da normali file audio. In questo tutorial, utilizzerai Whisper e Spleeter insieme per creare le tue selezioni karaoke o integrarle in un altro stack di applicazioni.
Prerequisiti
Questi strumenti sono disponibili sulla maggior parte delle piattaforme. Questo tutorial fornirà le istruzioni di installazione per un server Ubuntu 22.04, seguendo la nostra guida per abilitare lo scambio per questo tutorial.
Sia Spleeter che Whisper sono librerie Python e richiedono di aver installato Python e pip
, il gestore di pacchetti Python. Su Ubuntu, puoi fare riferimento al passaggio 1 di Come installare Python 3 e configurare un ambiente di programmazione su un server Ubuntu 22.04.
Inoltre, sia Spleeter che Whisper utilizzano librerie di machine learning che possono essere eseguite facoltativamente fino a 10-20 volte più velocemente su una GPU. Se una GPU non viene rilevata, torneranno automaticamente a funzionare sulla tua CPU. La configurazione del supporto GPU non rientra nell'ambito di questo tutorial, ma dovrebbe funzionare dopo l'installazione di PyTorch in ambienti abilitati per GPU.
Passaggio 1: installazione di Spleeter, Whisper e altri strumenti
Innanzitutto, dovrai utilizzare pip
, il gestore di pacchetti di Python, per installare gli strumenti che utilizzerai per questo progetto. Oltre a spleeter
, dovresti installare anche youtube-dl
, uno script che può essere utilizzato per scaricare video di YouTube localmente, che utilizzerai per recuperare un video di esempio. Installali con pip install
:
- sudo pip install spleeter youtube-dl
Invece di installare Whisper direttamente, puoi installare un'altra libreria chiamata yt-whisper
direttamente da Github, sempre usando pip
. yt-whisper
include Whisper stesso come dipendenza, quindi avrai accesso al normale comando whisper
dopo l'installazione, ma in questo modo otterrai anche yt-whisper
, che rende il download e la sottotitolazione dei video da YouTube un processo in un solo passaggio. pip install
può analizzare i collegamenti Github ai repository Python facendoli precedere da git+
:
- sudo pip install git+https://github.com/m1guelpf/yt-whisper.git
Infine, ti consigliamo di assicurarti di avere ffmpeg
installato per eseguire ulteriori manipolazioni audio e video. ffmpeg
è uno strumento universale per manipolare, unire e ricodificare file audio e video. Su Ubuntu, puoi installarlo usando il gestore di pacchetti di sistema eseguendo un apt update
seguito da apt install
:
- sudo apt update
- sudo apt install ffmpeg
Ora che hai installato gli strumenti necessari, otterrai audio e video di esempio nel passaggio successivo.
Passaggio 2: download e separazione dell'audio da un video
youtube-dl
, che hai installato nel passaggio 1, è uno strumento per scaricare video da YouTube nel tuo ambiente locale. Sebbene sia necessario prestare attenzione quando si utilizza materiale potenzialmente protetto da copyright fuori contesto, ciò può essere utile in una serie di contesti, soprattutto quando è necessario eseguire un'ulteriore elaborazione sui video o utilizzarli per materiale sorgente.
Utilizzando youtube-dl
, scarica il video che utilizzerai per questo tutorial. Questo link di esempio è a una canzone di pubblico dominio chiamata \Lie 2 You, ma puoi usarne un altro:
- youtube-dl https://www.youtube.com/watch?v=dA2Iv9evEK4&list=PLzCxunOM5WFJxaj103IzbkAvGigpclBjt
youtube-dl
scaricherà il brano insieme ad alcuni metadati e lo unirà in un singolo file video .webm
. Puoi riprodurre questo video in un lettore multimediale locale come mpv, ma ciò dipenderà dal tuo ambiente.
Nota: poiché l'uso di youtube-dl
non è esplicitamente supportato da YouTube, i download possono occasionalmente essere lenti.
Successivamente, separerai la traccia audio dal video che hai appena scaricato. Questo è un compito in cui ffmpeg
eccelle. Puoi usare il seguente comando ffmpeg
per produrre l'audio in un nuovo file chiamato audio.mp3
:
- ffmpeg -i "Lie 2 You (ft. Dylan Emmet) – Leonell Cassio (No Copyright Music)-dA2Iv9evEK4.webm" -c:a libmp3lame -qscale:a 1 audio.mp3
Questo è un esempio della sintassi del comando ffmpeg
. In breve:
-i /path/to/input
è il percorso del tuo file di input, in questo caso il video.webm
che hai appena scaricato-c:a libmp3lame
specifica un codec audio da codificare. Tutto l'audio e il video devono essere codificati in qualche modo elibmp3lame
è il codificatore mp3 più comune.qscale:a 1
specifica il bitrate del tuo output mp3, in questo caso corrispondente a un bitrate variabile intorno ai 220kbps. Puoi esaminare altre opzioni nella documentazione di ffmpeg.audio.mp3
è il nome del tuo file di output, presentato alla fine del comando senza altri flag.
Dopo aver eseguito questo comando, FFmpeg creerà un nuovo file chiamato audio.mp3
.
Nota: puoi saperne di più sulle opzioni ffmpeg
dalla documentazione ufficiale.
Nel passaggio successivo, utilizzerai Spleeter per isolare la traccia strumentale dal tuo nuovo file audio.mp3
.
Passaggio 3: separazione delle tracce vocali utilizzando Spleeter
Ora che hai il tuo file audio autonomo, sei pronto per usare spleeter
per separare la traccia vocale. Spleeter contiene diversi modelli da utilizzare con il comando spleeter separate
, che consente di eseguire una separazione ancora più sofisticata delle tracce di pianoforte, chitarra, batteria, basso e così via, ma per ora utilizzerai il valore predefinito Modello 2stems
. Esegui spleeter separate
sul tuo audio.mp3
, fornendo anche un percorso a una directory -o output
:
- spleeter separate -p spleeter:2stems -o output audio.mp3
Se stai eseguendo Spleeter senza una GPU, il completamento di questo comando potrebbe richiedere alcuni minuti. Questo produrrà una nuova directory chiamata output
, contenente due file chiamati vocals.wav
e accompaniment.wav
. Queste sono le tue tracce vocali e strumentali separate. Se riscontri errori o hai bisogno di personalizzare ulteriormente l'output di Spleeter, fai riferimento alla documentazione.
Puoi provare ad ascoltare questi file in MPV o in un altro lettore audio. Avranno una dimensione del file relativamente maggiore per ora perché spleeter
li decodifica direttamente in output WAV non elaborato, ma nei passaggi successivi li codificherai nuovamente in un singolo video.
Passaggio 4: generazione di sottotitoli utilizzando Whisper
Ora che hai la tua traccia audio strumentale, devi solo generare i sottotitoli dal video originale. Puoi eseguire whisper
direttamente sul video .webm
che hai scaricato, ma sarà ancora più rapido eseguire il comando yt_whisper
sul video originale di YouTube collegamento:
- yt_whisper https://www.youtube.com/watch?v=dA2Iv9evEK4&list=PLzCxunOM5WFJxaj103IzbkAvGigpclBjt
Se esamini la documentazione di Whisper, suggerisci che questo modello fornisce un buon compromesso tra requisiti di memoria, prestazioni e precisione. Se hai bisogno di eseguire whisper
da solo su un'altra sorgente di input o con parametri diversi, puoi utilizzare questi preset come frame di riferimento.
Se stai eseguendo Whisper senza una GPU, il completamento di questo comando potrebbe richiedere alcuni minuti. Questo genererà un file di sottotitoli per il video nel formato .vtt
. Puoi ispezionare i sottotitoli utilizzando head
o un editor di testo per verificare che corrispondano al testo della canzone:
- head -20 Lie_2_You__ft__Dylan_Emmet____Leonell_Cassio__No_Copyright_Music.vtt
OutputWEBVTT
00:00.000 --> 00:07.000
I need feeling you on me And I guess in a way you do
00:07.000 --> 00:19.000
All my breath on revelin' emotions I need some space to think this through
00:19.000 --> 00:29.000
Call me all night long Try to give you hints in a hard to see
00:29.000 --> 00:39.000
Right on the line, no Losing it on you is the last thing I need
00:39.000 --> 00:49.000
If I'm honest, I'll just make you cry And I don't wanna fight with you
00:49.000 --> 00:57.000
I would rather lie to you But if I'm honest, now's not the right time
Ora hai le tue tracce audio separate e il tuo file di sottotitoli. Nel passaggio finale, li riassemblerai tutti insieme usando ffmpeg
.
Passaggio 5: unione di tracce audio e video con sottotitoli
Infine, è il momento di combinare i tuoi output in un video finalizzato contenente 1) il video di sfondo originale, 2) la traccia strumentale isolata che hai generato utilizzando Spleeter e 3) i sottotitoli che hai generato utilizzando Whisper. Questo può essere fatto con un singolo comando ffmpeg
leggermente più complicato:
- ffmpeg -i "Lie 2 You (ft. Dylan Emmet) – Leonell Cassio (No Copyright Music)-dA2Iv9evEK4.webm" -i output/audio/accompaniment.wav -i "Lie_2_You__ft__Dylan_Emmet____Leonell_Cassio__No_Copyright_Music.vtt" -map 0:v -map 1:a -map 2 -metadata:s:s:0 language=eng -c:v copy -c:a aac -c:s mov_text final.mp4
A differenza del precedente comando ffmpeg
, questo comando utilizza tre diversi input: il video .webm
, l'audio .wav
e il .vtt
didascalie. Utilizza diversi argomenti map
per mappare il primo (o lo 0°, contando da 0) input alla traccia video, quindi all'audio e l'ultimo ai metadati dei sottotitoli, in questo modo: -map 0:v -map 1:a -map 2 -metadata:s:s:0 language=eng
. Successivamente, specifica i codec utilizzati per ciascuna traccia:
-
c:v copy
significa che stai preservando la sorgente video originale e non ricodificandola. Questo di solito fa risparmiare tempo e preserva la qualità del video (la codifica video è di gran lunga l'uso più intensivo della CPU diffmpeg
) fintanto che la sorgente originale è in un formato compatibile.youtube-dl
utilizzerà quasi sempre per impostazione predefinita il formato H264 comune, che può essere utilizzato per lo streaming di video, file.mp4
autonomi, dischi Blu Ray e così via, quindi non dovresti aver bisogno di cambiarlo. -
c:a aac
significa che stai ricodificando l'audio nel formato AAC. AAC è l'impostazione predefinita per la maggior parte dei video.mp4
, è supportato praticamente in tutti gli ambienti e fornisce un buon equilibrio tra dimensione del file e qualità audio. -
c:s mov_text
specifica il formato dei sottotitoli che stai codificando. Anche se i tuoi sottotitoli erano in formatovtt
,mov_text
è un tipico formato di sottotitoli da incorporare all'interno di un video stesso.
Nota: potresti anche voler compensare i sottotitoli di un paio di secondi per aiutare gli spettatori ad anticipare quali righe verranno dopo. Puoi farlo aggiungendo -itsoffset -2
al comando ffmpeg
.
Infine, fornisci un formato di output, final.mp4
. Nota che in realtà non hai specificato l'output .mp4
se non in questo nome file — ffmpeg
dedurrà automaticamente un formato di output basato sul percorso di output che fornisci. Quando si lavora con file audio e video, i codec utilizzati sono generalmente più importanti dei tipi di file stessi, che fungono da contenitori per il contenuto. Le differenze importanti sono in quali lettori video si aspettano di essere in grado di leggere quali tipi di file. Un file .mp4
contenente video H264 e audio AAC è, al momento della stesura di questo documento, il file multimediale più comune utilizzato ovunque e verrà riprodotto in quasi tutti gli ambienti, incluso direttamente in un browser senza la necessità di scaricare il file o configurare un server di streaming e può contenere sottotitoli, quindi è un obiettivo molto sicuro. .mkv
è un altro popolare formato contenitore che supporta più funzionalità, ma non è così diffuso.
Il tuo video final.mp4
ora può essere scaricato, condiviso o proiettato sul muro per la serata karaoke. Buona fortuna con la tua esibizione!
Ora hai una soluzione video karaoke end-to-end utilizzando quattro strumenti. Questi possono essere combinati in uno script autonomo, integrati in un'altra applicazione o eseguiti in modo interattivo secondo necessità.
Conclusione
In questo tutorial, hai utilizzato due strumenti di machine learning per creare una traccia vocale separata e un set di didascalie da un video sorgente, quindi li hai uniti di nuovo insieme. Questo è particolarmente utile per realizzare video karaoke da sorgenti audio esistenti, ma può essere applicato anche a molte altre attività.
Successivamente, potresti voler configurare un server di streaming video o sperimentare altre librerie AI o Machine Learning.