Sottotitoli Automatici con Whisper e Remotion: Guida Completa

Scritto da Francesco Di Donato • 16 luglio 2025 • 9 minuti di lettura
Utile e Versatile
Whisper e Remotion sono strumenti veramente alla mano. Quello che vedrai in questo post, la creazione automatica di sottotitoli, è solo uno dei tanti possibili casi d’uso di queste tecnologie open-source. Consideralo una palestra per imparare i fondamentali, che potrai poi applicare ai tuoi progetti.
Sei un podcaster? Potresti usare questo stack per generare video promozionali con la forma d’onda del tuo audio sincronizzata, sfruttando i template già pronti di Remotion.
Sei un creative coder o un artista digitale? Immagina di poter finalmente renderizzare le tue creazioni WebGL, i tuoi shader e i tuoi poligoni in un video MP4 pulito, senza impazzire con software di cattura schermo.
Potresti magari fare i talks e necessitare di un template video-slide fatto a modo tuo.
Questo workflow ti darà gli strumenti per fare tutto ciò. Ora, partiamo dal nostro esempio concreto.
Nel mio caso, voglio aggiungere sottotitoli ai miei video. Principalmente perche’ la statistica mi mostra che parte dei viewers hanno il volume a zero. Tuttavia, seppur app varie e editor di TikTok stesso siano eccellenti per iniziare, richiedono comunque tempo d’operazione e mano d’opera non indifferente da parte mia. Il tempo e’ una risorsa preziosa, quindi e’ tempo di automatizzare.
Vogliamo:
- Input: un qualche
.mp4
dove qualcuno parla (☝️🤓). Il montaggio del scene che compongo il video e’ gia’ avvenuto con altri tool appositi. Qui mettiamo solo le captions. - Estrarre testo e traduzioni con una precisione quanto piu’ alta possibile. Montare il tutto in un video finale con animazioni e uno stile unici, che nessun editor tradizionale può darti. E lo faremo scrivendo codice che, probabilmente, conosci già.
- Applicare il tuo format, i tuoi colori. Puo’ sia automatizzare visualizzazioni ricorrenti che migliorare il tuo personal branding. Sta a te in base come
lo implementilo fai generare ad un LLM.
Sostanzialmente:
- Smettere di editare
- Automatizzare il costruire
Whisper
Tutti pensano che Whisper sia un tool di trascrizione. Sbagliato. O meglio, incompleto. Per capire la sua potenza, dobbiamo prima capire come funziona un ASR (Automatic Speech Recognition) tradizionale e perché Whisper è diverso.
Un ASR classico è una catena di montaggio che processa il suono per gradi. Il primo passo è il più astratto e cruciale: il Modello Acustico.
Cosa fa un Modello Acustico? Scompone il suono in “Fonemi”.
Immagina i fonemi come i mattoncini LEGO® del linguaggio parlato. Sono le più piccole unità di suono che distinguono una parola da un’altra. Non sono le lettere, ma proprio i suoni.
- Cane vs. Pane: L’unica cosa che cambia è il suono iniziale. Il suono duro /k/ e il suono /p/ sono due fonemi diversi.
- Rosa vs. Rasa: Qui, il suono vocalico al centro cambia tutto il significato. Il suono /o/ e il suono /a/ sono altri due fonemi distinti.
Un ASR tradizionale, come prima cosa, deve “ascoltare” l’onda sonora continua del tuo parlato e spezzettarla in una sequenza di questi mattoncini-suono. Solo dopo, con altri modelli, prova a ricostruire le parole e le frasi. È un processo a step, rigido e specializzato.
In cosa differisce
Whisper butta via questa catena di montaggio. È un singolo modello Transformer end-to-end, molto più simile a un LLM come GPT che a un ASR. E il suo segreto sta nei token.
Come funziona davvero Whisper? Il gioco dei token.
Whisper non “ascolta e trascrive” nel senso classico. Invece, trasforma l’audio in una rappresentazione numerica e poi chiede al suo decoder “Ok, partendo da questo audio e da questi comandi, quali parole devo generare?”.
I “comandi” sono dei token speciali che gli diamo come prompt per guidare il risultato. La flessibilità è totale.
Esempio 1: Trascrizione Semplice in Italiano
<|startoftranscript|> <|it|> <|transcribe|>
startoftranscript
: Avvia il processo.it
: Specifica la lingua (Italiano).transcribe
: Imposta il compito di trascrizione.
Esempio 2: Traduzione verso l’Inglese
<|startoftranscript|> <|it|> <|translate|>
translate
: Questo singolo cambio di token dice al modello di non trascrivere, ma di tradurre l’audio italiano direttamente in testo inglese.
Esempio 3: Controllo dei Timestamp
<|startoftranscript|> <|it|> <|transcribe|> <|notimestamps|>
notimestamps
: Se non vuoi i dati di timing per ogni parola, aggiungi questo token. Se lo ometti, li otterrai di default.
Esempio 4: Identificazione della Lingua
<|startoftranscript|>
- Dando solo il token di avvio, il primo token che Whisper genererà sarà quello della lingua che ha rilevato (es.
<|en|>
o<|es|>
).
Capito il trucco? Whisper non ha funzioni diverse, ha un unico motore generativo che puoi pilotare con i token. Questo lo rende incredibilmente versatile, ma è anche il motivo per cui può “allucinare”: se non è sicuro, prova a generare la sequenza di testo più plausibile, proprio come farebbe un LLM.
Licenze
Sempre controllare personalmente le licenze. Questo post e’ qui per restare, e le cose possono sempre cambiare nel tempo.
La doppia natura di Whisper rimane un punto chiave.
- Open-Source (Licenza MIT): Te lo scarichi, lo fai girare dove vuoi, anche in progetti commerciali. L’unico obbligo è mantenere l’attribuzione originale. Massima libertà, massima responsabilità.
- API di OpenAI (Termini di Servizio): Paghi per un servizio. Più semplice, più scalabile, ma sei legato alle regole di OpenAI. Sei un cliente, non un utilizzatore di software libero.
Remotion
In pratica Remotion e’ un coso che (al momento in cui scrivo) installi con npx create-video@latest
e viene con templates fatti bene, ottimissimi punti di inizio. Tipo il template per TikTok.
Le Gabbie Dorate
Gli editor video integrati nelle piattaforme social (CapCut, l’editor di TikTok, Instagram Reels) sono fantastici per iniziare. Sono per definizione un subset delle possibilita’. Cosa puoi farci dipende da cosa i loro developers sono stati pagati per implementare. Lavori dentro i loro confini, il che’ non e’ necessariamente un male. Dipende se al momento hai capacity per investire del tempo in automatizzare un qualche aspetto di video editoria che ti possa tornare utile ora o dopo.
La Potenza dello Stack Web
Non è un’esagerazione. Significa che puoi usare:
- CSS: Vuoi usare un font specifico da Google Fonts? Fatto. Vuoi un gradiente di testo complesso, un
text-shadow
artistico o unclip-path
per rivelare il testo in modo originale?Puoi farloPuoi promptare per bene in modo da fartelo fare. Democratizzazione della Brand identity(?) - SVG: Importa loghi vettoriali complessi come quelli della tua azienda come watermark.
- WebGL: Per i più
audacinerd, questo apre le porte al 3D e agli effetti accelerati via GPU con librerie comethree.js
. Scherzi a parte fare robe 3D e’ arte a tutti gli effetti, letteralmente dipingere con la matematica. E’ figo, dai.
Ma tanti altri utili.
Magari Audiogram per mettere una visualizzazione della traccia audio del tuopodcast o musica. Super interessante il template del codice animato (dipendenza: Code Hike).
Licenze
Sempre controllare personalmente le licenze. Questo post e’ qui per restare, e le cose possono sempre cambiare nel tempo.
Gratis per team piccoli (fino a 3 persone), non-profit e freelance. A pagamento per le aziende più grandi (da 4 dipendenti in su). Un modello fair che incentiva l’adozione.
Perfetto, aggiorniamo la sezione del workflow con questi passaggi pratici. Il template per TikTok di Remotion è un punto di partenza eccellente perché integra già whisper.cpp
.
Ecco la nuova sezione “Workflow”, riscritta con le tue istruzioni.
Workflow
Consiglio di partire dal template ufficiale di Remotion per video in stile TikTok, che ha già tutto l’occorrente per partire.
Crea il Progetto Apri il terminale e lancia questo comando. Creerà una nuova cartella con un progetto Remotion pre-configurato per generare sottotitoli.
npx create-video@latest --template tiktok
Configura Whisper Prima di lanciare qualsiasi script, apri il file
src/whisper-config.mjs
. Qui devi specificare il modello di Whisper da usare e la lingua del tuo audio. Per un buon equilibrio, potresti usare:WHISPER_MODEL
:large-v3
(molto accurato) omedium
(più veloce).WHISPER_LANG
:it
per l’italiano.
Nota: La prima volta che eseguirai lo script di trascrizione,
whisper.cpp
verrà scaricato e compilato automaticamente. Pazienza per qualche minuto, le volte successive sarà istantaneo.await installWhisperCpp({ ... }); await downloadWhisperModel({ ... });
Trascrivi l’Audio Sposta il tuo file video (es.
mio-video.mp4
) nella cartellapublic/
del progetto. Dopodiché, lancia lo script di trascrizione:node sub.mjs public/mio-video.mp4
Il template utilizza il seguente codice per estrarre l’audio dal video usando il corretto bitrate:
const extractToTempAudioFile = (fileToTranscribe, tempOutFile) => { // Extracting audio from mp4 and save it as 16khz wav file execSync( `npx remotion ffmpeg -i "${fileToTranscribe}" -ar 16000 "${tempOutFile}" -y`, { stdio: ["ignore", "inherit"] }, ); };
Lo salva in una
temp
folder. Subito dopo lo utilizza per ottenere lecaptions
.const whisperCppOutput = await transcribe({ ... }) const { captions } = toCaptions({ whisperCppOutput })
Salverà il risultato (parole e timestamp) in un file JSON con lo stesso nome del video, ma diversa estensione.
[ { "text": "Esempio", "startMs": 0, "endMs": 330, "timestampMs": null, "confidence": 0.90491 } ]
Traduci il Trascritto (Optional) Sei libero di far evolvere questo script come più convenga. Nel mio caso, ho introdotto un ulteriore step di traduzione, sempre grazie a Whisper.
const englishWhisperOutput = await transcribe({ ... translateToEnglish: true, });
È molto importante fornire l’insieme del testo alla funzione di
transcribe
. L’output di Whisper migliora se ha a disposizione l’intero contesto. Se spacchetti l’input in chunks e li processi separatamente, verranno trattati in modo indipendente gli uni dagli altri e non sara’ in grado di sfruttare il contesto per una piu’ accurata trascrizione e traduzione.Personalizza e Visualizza Lancia il Remotion Studio per vedere un’anteprima live nel tuo browser:
pnpm dev
Apri il file
src/CaptionVideo.tsx
. Questo è il componente React dove puoi modificare l’aspetto dei sottotitoli: cambia il font, i colori, la posizione, le animazioni. Ogni modifica sarà riflessa in tempo reale nello Studio.Renderizza il Video Finale Quando sei soddisfatto del risultato che vedi nell’anteprima, ferma lo studio (
Ctrl+C
) e lancia il comando di rendering finale:npx remotion render
Remotion processerà il video frame by frame, applicando i tuoi sottotitoli personalizzati, e salverà il file MP4 finale nella cartella
out/
.In alternativa, puoi triggerare il render direttamente dall’interfaccia
localhost
. Puoi anche selezione diverse impostazioni.
Conclusione
L’accoppiata Whisper + Remotion è un game-changer. Trasforma la creazione video da un processo manuale e restrittivo a uno programmatico, automatizzato e creativamente illimitato.
Stai letteralmente costruendo i tuoi video come se fossero applicazioni web interattive. E questo non solo ti fa risparmiare un’enormità di tempo, ma alza drasticamente la qualità e l’unicità del tuo prodotto finale.
Dantoti pure piu’ tempo libero.