Ricerca nel sito web

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:

  1. 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+:

  1. 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:

  1. sudo apt update
  2. 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:

  1. 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:

  1. 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 e libmp3lame è 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:

  1. 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:

  1. 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:

  1. head -20 Lie_2_You__ft__Dylan_Emmet____Leonell_Cassio__No_Copyright_Music.vtt
Output
WEBVTT 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:

  1. 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 di ffmpeg) 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 formato vtt, 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.

Articoli correlati: