Generare un voice-over per YouTube con poche righe di Python
Testo scritto con l’intelligenza artificiale a partire da una fonte citata, senza revisione umana prima della pubblicazione.
Usare l'API di ElevenLabs insieme a Python e ffmpeg permette di creare, ottimizzare e sincronizzare l'audio senza registrare la voce manualmente.
Apri script.txt, chiama l’API di ElevenLabs, salva l’audio. Il file è pronto per entrare in timeline. Il flusso in tre passaggi riduce scrittura, registrazione e pulizia a una singola richiesta HTTP1.
La base è un motore TTS di ElevenLabs, con voci pronte e un’API semplice. Il resto della pila è open source: Python per orchestrare, ffmpeg per gestire i media, piccole librerie di supporto. Lo script legge il testo, manda un POST all’endpoint di sintesi e scrive su disco i byte della risposta1.
Per iniziare serve un account ElevenLabs. Ci si registra, si copia la chiave nella sezione API e la si conserva in modo sicuro. Poi si sfoglia il catalogo e si annota l’ID della voce scelta. Il servizio offre un piano gratuito adatto ai prototipi. Chi ha bisogno di più crediti o di voci con qualità superiore può passare a un piano a pagamento1.
L’endpoint è questo: https://api.elevenlabs.io/v1/text-to-speech/{VOICE_ID}. L’header include xi-api-key con la chiave e Content-Type application/json. Nel payload vanno il testo e i parametri di voce. Due slider utili: stability e similarity_boost, impostati nell’esempio a 0.75 e 0.8. La risposta restituisce dati audio in formato compresso, che il codice salva così come arrivano. Un esempio usa VOICE_ID "21m0v3l3g8n9i4p" come segnaposto. Basta sostituirlo con l’ID selezionato nel catalogo1.
L’uscita è già pulita, ma una rifinitura aiuta l’integrazione nel video. Con ffmpeg si normalizza il volume alla soglia consigliata per YouTube: ffmpeg -i voiceover.mp3 -af loudnorm=I=-14:TP=-2:LRA=11 voiceover_normalized.mp3 Si può anche applicare una compressione leggera per rendere più uniforme la dinamica: ffmpeg -i voiceover_normalized.mp3 -af "compand=attacks=0.3:decays=0.8:points=-70/-70|-20/-20|-10/-10|0/0" voiceover_compressed.mp3 Questi passaggi si concatenano in uno script di shell o si integrano nel flusso Python con subprocess1.
Per l’unione con il girato ci sono due strade. Se il video è già montato, si sostituisce la traccia sonora: ffmpeg -i original_video.mp4 -i voiceover_compressed.mp3 -c:v copy -map 0:v:0 -map 1:a:0 -shortest final_video.mp4 Se si parte da zero, si crea un video da un’immagine fissa: ffmpeg -loop 1 -i placeholder.jpg -i voiceover_compressed.mp3 -c:v libx264 -t 30 -pix_fmt yuv420p -shortest final_video.mp4 L’opzione -map seleziona i flussi video e audio dalle sorgenti. -shortest arresta l’export quando termina la traccia più corta1.
Chi preferisce usare una voce specifica può clonarla. Servono da 10 a 30 secondi di parlato pulito. Si carica il campione all’endpoint /voices per creare una nuova voce e si usa l’ID restituito nelle richieste di sintesi. Nel codice basta sostituire VOICE_ID. Il resto del flusso non cambia1.
Per rendere riutilizzabile la pipeline, lo script si confeziona come CLI con click. Il comando prende il percorso del testo e dell’output, invia la richiesta al TTS e scrive l’audio. In alternativa, si espone la funzione di sintesi via Flask per usarla in un servizio interno1.
Se il carico cresce, si scala in modo prevedibile. Possibili passi:
- Mettere in coda più script e generare in parallelo con Celery o AWS Lambda.
- Offrire un’interfaccia web con una piccola app React1.
Il dettaglio che fa risparmiare tempo è a monte: la scelta della voce nel catalogo. Un ID coerente tra video diversi evita ritocchi in post e rende il canale più riconoscibile1.
Fonti
Come è nato questo articolo Scritto da un sistema di intelligenza artificiale, con controlli automatici
Millebit non ha giornalisti che scrivono gli articoli: li scrive un motore editoriale basato su modelli di intelligenza artificiale, a partire dalle fonti elencate qui sopra. Prima di uscire, ogni testo passa questi controlli:
- Rilettura. Un passaggio toglie i tic della prosa generata da un modello, come i contrasti costruiti e le frasi che annunciano invece di informare, senza toccare fatti e fonti.
- Fedeltà alle fonti. Un passaggio dedicato toglie ogni affermazione che le fonti non sostengono. Valutazione su questo pezzo: 9/10.
- Anti-cliché. Un filtro scarta frasi fatte, enfasi e tic della prosa artificiale: superato.
- Giudizio editoriale. Un modello valuta il pezzo su sette criteri (apertura, chiarezza, economia, concretezza, voce, struttura, fedeltà) e sotto 7,8/10 non si pubblica. Questo articolo ha preso 8,3/10 dopo 1 revisione.
I controlli riducono gli errori ma non li eliminano: un modello può fraintendere una fonte. Per le decisioni importanti, risali alla fonte originale. Se trovi un errore, segnalacelo.
Per vedere Millebit nelle notizie principali di Google, aggiungilo alle tue fonti preferite. Oppure segui l’edizione di oggi, il feed RSS o La Sintesi.