I sottotitoli sembrano la parte più semplice di un video: poche righe di testo con un orario. In realtà esistono formati molto diversi, con capacità e limiti propri, e la scelta sbagliata porta a problemi frequenti: caratteri accentati illeggibili, testo che compare in anticipo, stili ignorati dal lettore, sottotitoli che spariscono quando si cambia container. Questa guida si concentra sugli aspetti tecnici: come sono fatti i file, come si integrano nel video e come si correggono.
Sottotitoli separati, integrati e incisi
Prima dei formati, va chiarita la distinzione principale.
- File separato: il sottotitolo è un file a parte, per esempio
film.srt, letto dal lettore insieme al video. - Traccia integrata (soft subtitle): il sottotitolo è dentro il container come flusso a sé, attivabile o disattivabile. È il caso tipico dei file MKV con più lingue.
- Sottotitoli incisi (burned-in o hardcoded): il testo è disegnato nei pixel del video e non può più essere rimosso.
I primi due sono flessibili e accessibili; i sottotitoli incisi garantiscono che il testo appaia ovunque, per esempio sui social dove molti guardano senza audio, ma non si possono disattivare né tradurre.
SRT: semplice e universale
SubRip (.srt) è il formato più diffuso. Ogni blocco ha un numero progressivo, un intervallo di tempo e il testo:
1
00:00:03,200 --> 00:00:06,000
Buongiorno, cominciamo dalle basi.
2
00:00:06,400 --> 00:00:09,100
Il primo passo è capire il formato.
Caratteristiche: - i millisecondi sono separati da una virgola; - la formattazione è minima: molti lettori accettano corsivo e grassetto con tag simili all'HTML, ma il supporto non è garantito; - non esiste un'intestazione che dichiari la codifica dei caratteri.
WebVTT: lo standard del web
WebVTT (.vtt) è il formato previsto dall'elemento <track> dei browser ed è usato anche nello streaming HLS. Somiglia a SRT ma con differenze importanti:
WEBVTT
00:00:03.200 --> 00:00:06.000 line:85%
Buongiorno, cominciamo dalle basi.
- il file inizia obbligatoriamente con la riga
WEBVTT; - i millisecondi sono separati da un punto;
- la codifica è sempre UTF-8;
- supporta posizionamento, allineamento, stili via CSS e note di commento.
Convertire un SRT in VTT è quasi immediato, ma copiare un file SRT rinominandolo in .vtt non basta: mancano l'intestazione e il separatore corretto.
ASS/SSA: stili e karaoke
Advanced SubStation Alpha (.ass) è pensato per sottotitoli elaborati: tipi di carattere, colori, contorni, posizioni precise, effetti di animazione e karaoke. È molto usato nelle traduzioni amatoriali di animazione. Il file contiene una sezione di stili e una di eventi. Il rovescio della medaglia è la compatibilità: molti televisori e browser lo ignorano o lo mostrano senza stili.
Formati a immagini
Su DVD e Blu-ray i sottotitoli non sono testo ma immagini (VobSub e PGS). Si possono inserire in un MKV, ma non in un MP4, e non si possono modificare senza un riconoscimento ottico dei caratteri.
Compatibilità con i container
| Container | Sottotitoli supportati tipicamente |
|---|---|
| MKV | SRT, ASS, WebVTT, PGS, VobSub |
| MP4 | mov_text (testo semplice), in alcuni casi WebVTT |
| WebM | WebVTT |
Quando un remux da MKV a MP4 fallisce, il colpevole è spesso proprio la traccia di sottotitoli. Si può convertirla in mov_text:
ffmpeg -i film.mkv -map 0 -c copy -c:s mov_text film.mp4
La codifica dei caratteri
Un file SRT salvato in una codifica diversa da quella attesa mostra le lettere accentate come simboli strani: «perché» al posto di «perché». È il segno di un file UTF-8 letto come Latin-1, o viceversa. La regola pratica è salvare sempre in UTF-8; se un file arriva con una codifica diversa, va convertito prima dell'uso, per esempio con l'opzione -sub_charenc di FFmpeg o con un editor di testo.
Sincronizzare i sottotitoli
I problemi di sincronizzazione sono di due tipi:
- Ritardo costante: tutti i sottotitoli sono in anticipo o in ritardo della stessa quantità. Si risolve spostando l'intero file, per esempio con l'opzione
-itsoffsetin FFmpeg o con la funzione di sfasamento dei lettori. - Deriva progressiva: all'inizio il testo è in sincrono, poi si allontana sempre di più. Di solito indica un frame rate diverso, per esempio sottotitoli preparati per una versione a 23,976 fps applicati a una versione a 25 fps. Serve un riscalamento dei tempi, che gli editor di sottotitoli permettono indicando due punti di riferimento.
Incidere i sottotitoli con FFmpeg
ffmpeg -i video.mp4 -vf "subtitles=testo.srt" -c:v libx264 -crf 20 -c:a copy video_sottotitolato.mp4
Incidere richiede sempre una ricodifica del video. Conviene farlo a partire dal master e mantenere anche una versione senza sottotitoli.
Buone pratiche di leggibilità
- non più di due righe per blocco;
- righe di lunghezza contenuta, spezzate nei punti naturali della frase;
- una durata sufficiente per leggere con calma, evitando blocchi che lampeggiano;
- un piccolo intervallo tra un blocco e il successivo, così l'occhio percepisce il cambio.
In sintesi
- SRT è universale, WebVTT è lo standard del web, ASS gestisce stili complessi.
- I sottotitoli possono essere separati, integrati nel container o incisi nell'immagine.
- MP4 accetta pochi formati di sottotitoli: spesso serve convertirli in mov_text.
- Salvate sempre in UTF-8 per evitare caratteri illeggibili.
- Un ritardo crescente indica di solito un frame rate diverso.