▶ Video e streaming

Formati dei sottotitoli: SRT, WebVTT, ASS e sottotitoli incisi

Struttura tecnica di SRT, WebVTT e ASS, differenza tra sottotitoli separati e incisi, codifica dei caratteri e come sincronizzarli o convertirli.

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:

  1. 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 -itsoffset in FFmpeg o con la funzione di sfasamento dei lettori.
  2. 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.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche