Unire due tracce di sottotitoli in una versione bilingue: che cosa succede davvero ai sottotitoli
Pubblicato il 05/08/2026 · 15 min di lettura · Strumenti per sviluppatori
Daniel Okonkwo — Sviluppatore front-end e redattore Tech presso Allin
Performance web · Formati di file
Verificato su 4 fonti
Questo strumento non accoppia affatto i sottotitoli, e saperlo prima di cominciare fa risparmiare un'ora. Offre due modalità. «Sovrapponi» concatena i due elenchi e ordina il risultato per tempo di inizio: nulla viene combinato, quattro sottotitoli inglesi e tre francesi producono sette sottotitoli distinti, ciascuno ancora con una sola lingua. «Accoda» sposta l'intero secondo file perché cominci dopo la fine del primo più un intervallo scelto, il che serve a unire i sottotitoli di due parti di video, non di due lingue. Nessuna delle due modalità accoppia per indice né per sovrapposizione temporale — le due strategie di cui una fusione bilingue avrebbe bisogno. Questo conta, perché i conteggi quasi mai coincidono: un traduttore che trasforma due brevi battute inglesi in una frase francese ha già rotto la corrispondenza degli indici, e da quel sottotitolo in poi la numerazione dei due file diverge per sempre. «Sovrapponi» resta utile quando entrambe le tracce sono state sincronizzate sullo stesso master, perché inizi uguali tengono ogni coppia adiacente e l'ordinamento conserva l'ordine di lettura, così la riga del primo file viene per prima. Ma appena una traccia anticipa l'altra di quaranta millisecondi su una battuta, quella coppia si inverte e le tue due lingue smettono di comparire in un ordine costante. Ciò che «sovrapponi» non produce mai è un sottotitolo con due righe. Se è quello che vuoi, le due lingue vanno unite dentro il testo di uno stesso sottotitolo, il che è una modifica di testo e non un'operazione di tempi — e SubRip non ha alcun posizionamento, quindi dove le righe finiscono sullo schermo lo decide il lettore e non il tuo file.
Il sottotitolo 12 della traccia inglese non è il sottotitolo 12 di quella francese, perché i traduttori spezzano e uniscono le frasi in modo diverso. Esistono due strategie per accoppiarli; questo strumento non ne usa nessuna: intercala. Ecco che cosa ne esce e quando basta.
Perché il sottotitolo 12 non è il sottotitolo 12
Prendi dodici secondi di dialogo. In inglese sono quattro sottotitoli: «I told you.» / «I told you twice.» / «And you did it anyway.» / «That is the part I mind.» Il traduttore francese fonde i primi due in un'unica riga che sta comodamente sullo schermo e consegna tre sottotitoli che coprono gli stessi dodici secondi. Da lì in poi, il sottotitolo inglese 3 è il francese 2, l'inglese 4 è il francese 3, e ogni divergenza successiva — una riga spezzata per la velocità di lettura, due righe unite perché la lingua d'arrivo è più breve — sposta di nuovo la corrispondenza. Nulla, in nessuno dei due file, ne conserva traccia.
Quindi una fusione bilingue deve decidere, sottotitolo per sottotitolo, quale riga di un file va con quale riga dell'altro, e ci sono solo due modi onesti di farlo. Accoppiare per indice è istantaneo e corretto fino alla prima divergenza, dopo la quale sbaglia con sicurezza per tutto il resto del film — e il fallimento è invisibile in un editor di testo, perché entrambi i file restano perfettamente ben formati. Accoppiare per sovrapposizione temporale è la risposta vera: due sottotitoli vanno insieme quando i loro intervalli si intersecano oltre una certa soglia. Quella soglia serve, perché il sottotitolo del traduttore spesso comincia una frazione più tardi e perché un sottotitolo lungo in una lingua può sovrapporsi a due corti nell'altra, il che costringe a scegliere fra accoppiarlo con la sovrapposizione maggiore e accoppiarlo con entrambi.
Che cosa fa invece questo strumento: intercalare e concatenare
La modalità «sovrapponi» prende l'elenco dei sottotitoli del primo file, quello del secondo, li mette uno in coda all'altro e ordina il tutto per tempo di inizio. È tutto. Nessun sottotitolo viene mai combinato con un altro, nessun testo unito, nessuna soglia applicata. Eseguila sull'esempio di quattro e tre qui sopra: restituisce sette sottotitoli, numerati da 1 a 7, che alternano fra le due lingue là dove alternano i tempi. Il contatore sotto la casella te lo dice prima ancora di scorrere: sette, non quattro.
Non è inutile, e conviene essere onesti su quando funziona. Se entrambe le tracce sono state sincronizzate sullo stesso master — il caso normale di un'edizione sottotitolata professionalmente, in cui il traduttore parte dallo spotting originale — i tempi di inizio saranno spesso identici, e inizi identici tengono ogni coppia adiacente nell'output. L'ordinamento conserva l'ordine in cui i sottotitoli sono stati letti, così la riga del primo file viene per prima a ogni parità, e ottieni un file che alterna lingua in modo affidabile. Provato su due tracce con tempi identici, quattro sottotitoli ciascuna, l'output è di otto sottotitoli in coppie rigorose primo-file-poi-secondo.
L'affidabilità finisce appena i tempi sono soltanto vicini invece che uguali. Dai alla traccia francese una partenza quaranta millisecondi più tardi su ogni riga: le coppie restano adiacenti, con l'inglese sempre davanti. Dalle una partenza quaranta millisecondi più presto su una sola riga e quella coppia si inverte: la riga francese diventa il sottotitolo 1 e l'inglese il 2, mentre il resto del file conserva l'ordine opposto. Leggere una traccia bilingue il cui ordine delle lingue cambia senza preavviso è peggio che leggere due file separati; prima di usare un output «sovrapponi» per studiare, controlla quindi qualche coppia sparsa nel film, non solo la prima.
La modalità «accoda» è un altro strumento per un altro lavoro: unire i sottotitoli di un film che arriva in due file. Calcola il maggiore tempo di fine del primo file, gli somma l'intervallo che inserisci e aggiunge quel totale a ogni marca del secondo file. La trappola è che somma alle marche proprie del secondo file invece di sostituirle. Se la tua seconda parte è già sincronizzata da zero, tutto torna. Se è stata ritagliata da un file più lungo e il suo primo sottotitolo sta a 00:10:00, ottieni 00:10:13 invece di 00:00:13 — lo strumento è stato provato proprio su questo e ha prodotto un buco di dieci minuti. Riporta prima il secondo file a zero con lo strumento di sfasamento, poi accoda.
Due sottotitoli nella stessa finestra, e perché nessuno può dirti che cosa succede
Un output «sovrapponi» contiene spesso due sottotitoli consecutivi con tempi di inizio e fine identici — è esattamente l'aspetto di una coppia bilingue una volta passato lo strumento. Che cosa ne faccia un lettore non è specificato da nessuna parte, perché SubRip non ha una specifica in cui specificarlo. La Library of Congress non elenca alcun documento di specifica per il formato. Il contenitore Matroska, quando assorbe SubRip, conserva il tempo di inizio come marca del blocco e la durata come durata del blocco, e nient'altro: non ci sono impostazioni generali per quel codec, quindi il contenitore trasporta testo e tempo e non ha un campo in cui registrare una preferenza sulle sovrapposizioni.
In pratica i lettori differiscono, e l'unica procedura affidabile è provare il tuo su un campione di trenta secondi prima di impegnarti su un film intero. Alcuni motori impilano le voci simultanee come righe separate; alcuni mostrano l'ultima caricata e nascondono l'altra; alcuni ne scartano una in silenzio. Nessuno sbaglia, perché non c'è nulla su cui sbagliare. Non trasportare un'assunzione da un lettore desktop a un telefono, un'app televisiva o una pagina web: i percorsi di rendering sono diversi, e un file bilingue che appare corretto su un portatile può mostrare una sola lingua su un decoder.
La domanda vicina — dove compare ciascuna lingua sullo schermo — ha una risposta più breve: non puoi controllarlo da un file SRT, perché SubRip non ha alcun posizionamento. La formattazione del programma originale si limitava a grassetto, corsivo, sottolineato e colore, ereditati dalle etichette HTML, e nulla nel formato tratta la collocazione. WebVTT è l'opposto: la sua riga dei tempi può portare un elenco di impostazioni con allineamento, riga e posizione, e definisce interi blocchi REGION per le aree di scorrimento. Se la collocazione conta per la tua traccia bilingue, questa è una ragione per lavorare in WebVTT e non in SubRip.
Come mettere davvero due lingue in un solo sottotitolo
Il risultato che probabilmente vuoi è un sottotitolo per momento con due righe, l'originale sopra e la traduzione sotto. È un'operazione di testo: le due stringhe devono finire nello stesso corpo di sottotitolo, separate da un a capo. La via allettante su questo sito è l'andata e ritorno per foglio di calcolo — esportare la prima traccia con il convertitore da SRT a CSV, incollare la seconda lingua in una colonna accanto, costruire una colonna di testo combinata e ricostruire il file con il convertitore da CSV a SRT. Questa via funziona da capo a fondo, e il paragrafo successivo spiega perché le si può affidare un film intero.
Entrambe le metà sono corrette. Un sottotitolo con un a capo viene scritto come campo CSV fra virgolette con un a capo reale dentro, la forma descritta dalla RFC 4180 e quella che un foglio di calcolo apre come una cella sola; il convertitore da CSV a SRT legge il file come record CSV e non come righe di testo, quindi un a capo chiude un record solo quando cade fuori dalle virgolette. Provato con un sottotitolo bilingue costruito a mano, «I told you.» sopra «Je te l'avais dit.», l'andata e ritorno restituisce entrambe le righe nello stesso sottotitolo, e un file che mescola sottotitoli di una, due e tre righe torna identico byte per byte.
La ricetta pratica è dunque questa. Esporta la prima traccia, incolla la seconda lingua in una colonna libera e costruisci una colonna di testo combinata che metta un a capo reale dentro la cella tra le due — Alt+Invio in Excel su Windows, altrove la scorciatoia del tuo foglio, e non una barra rovesciata seguita da una n. Reincolla le quattro colonne nel convertitore da CSV a SRT e i sottotitoli escono con l'originale sopra e la traduzione sotto. Conserva la colonna indice mentre lavori: l'importazione ricostruisce nel suo ordine, così un foglio che hai ordinato strada facendo ti restituisce comunque un file in ordine cronologico. Ciò che va sorvegliato è il foglio di calcolo e non gli strumenti — può ritipizzare una colonna di tempi appena apri il file: importa invece di fare doppio clic e imposta le due colonne di tempo su Testo. Se preferisci non passare da un foglio di calcolo, incollare le due tracce affiancate in un editor di testo e unirle a mano resta la via più corta per una manciata di sottotitoli.
| Strategia | Come decide che cosa va con che cosa | Risultato sull'esempio | Disponibile qui? |
|---|---|---|---|
| Accoppiare per indice | Il sottotitolo n di un file con l'n dell'altro | Corretto finché i conteggi divergono, poi sbagliato fino alla fine | No |
| Accoppiare per sovrapposizione temporale | Intervalli che si intersecano oltre una soglia scelta | 3 o 4 sottotitoli combinati, secondo la soglia | No |
| Intercalare (questo strumento, modalità «sovrapponi») | I due elenchi concatenati, poi ordinati per tempo di inizio | 7 sottotitoli separati, una lingua ciascuno, coppie solo se gli inizi coincidono | Sì |
| Concatenare (questo strumento, modalità «accoda») | Il secondo file è spinto oltre la fine del primo, più un intervallo | 7 sottotitoli uno dopo l'altro — per due parti di video, non due lingue | Sì |
| Accoppiare a mano in un editor di testo | Decidi tu, leggendo i due file affiancati | 4 sottotitoli, ciascuno con due righe — il risultato bilingue | Non automatizzato dal fusore — fallo in un editor, o con l'andata e ritorno in CSV |
Domande frequenti
- Lo strumento accoppia il sottotitolo 12 con il 12, o usa i tempi?
- Né l'uno né l'altro, perché non accoppia affatto. La modalità «sovrapponi» concatena i due elenchi di sottotitoli e ordina il risultato per tempo di inizio; la modalità «accoda» somma uno scarto al secondo elenco e lo mette dopo il primo. In entrambi i casi ogni sottotitolo dei due file sopravvive come sottotitolo a sé, conserva una sola lingua e viene rinumerato nell'output. Quattro sottotitoli inglesi e tre francesi danno sette sottotitoli, non quattro combinati, e il conteggio mostrato sotto la casella lo dice prima ancora di scorrere. Accoppiare per indice sarebbe comunque sbagliato qui — i conteggi divergono la prima volta che un traduttore unisce due righe brevi in una — e accoppiare per sovrapposizione temporale, che è l'approccio giusto, richiede una soglia per cui questo strumento non ha campo. Ciò che «sovrapponi» ti dà, quando entrambe le tracce sono state spottate sullo stesso master, è un file in cui ogni coppia sta adiacente, perché inizi uguali si ordinano insieme e l'ordine di lettura è conservato.
- Ho unito 4 sottotitoli inglesi con 3 francesi e ne ho ottenuti 7. È un bug?
- No, è ciò che significa intercalare, e sette è la risposta aritmeticamente corretta per un'operazione che non combina nulla. Lo strumento fa esattamente ciò che dichiara — unire due file in uno, rinumerato — e «unire file» non è la stessa operazione di «unire sottotitoli». Se ti aspettavi quattro sottotitoli con due lingue ciascuno, ti aspettavi un passaggio di accoppiamento che questo strumento non contiene. Leggi l'output a sette sottotitoli come una traccia di lettura intercalata e non bilingue: ovunque le due tracce sorgenti avessero lo stesso spotting vedrai le due righe una dopo l'altra, il che è utilizzabile per studiare; ovunque i tempi differiscano, una lingua comparirà da sola. Se ti serve un vero file bilingue, i due testi devono finire dentro un solo corpo di sottotitolo separati da un a capo, e ci si arriva in un editor di testo oppure con l'andata e ritorno in CSV, che ora riporta intatto un sottotitolo su due righe.
- Che cosa fa un lettore con due sottotitoli che occupano esattamente la stessa finestra?
- Non c'è una risposta valida ovunque, ed è un fatto sul formato più che una lacuna di questo articolo. SubRip non ha una specifica: la scheda della Library of Congress non elenca alcun documento di specifica e descrive il formato come solo in parte documentato e mal normalizzato. Nulla definisce quindi che cosa dovrebbe fare un motore di rendering quando due voci rivendicano lo stesso intervallo. Alcuni le impilano su righe separate, alcuni ne mostrano una sola, alcuni ne scartano una senza dirlo, e lo stesso file può comportarsi diversamente in un lettore desktop, in un'app per telefono e in un browser, perché i percorsi di rendering sono diversi. Neppure il contenitore aiuta: quando SubRip viene inserito in Matroska, il tempo di inizio diventa la marca del blocco e la lunghezza una durata di blocco, e poiché non ci sono impostazioni generali per quel codec non c'è dove registrare una preferenza. Prova un campione di trenta secondi nel lettore che userai davvero, e lì e non dove capita comodo.
- Posso mettere l'originale in alto sullo schermo e la traduzione in basso?
- Non da un file SRT, perché SubRip non ha alcun posizionamento. La formattazione che il programma originale supportava si limitava a grassetto, corsivo, sottolineato e colore, ereditati dalle etichette HTML, e nulla di ciò tratta la collocazione; il contenitore Matroska conferma la stessa forma dall'altro lato, salvando un sottotitolo SRT come testo più una marca più una durata e lasciando vuoti i dati privati del codec, perché non ci sono impostazioni generali da registrare. Il comando {\an8} che a volte si incontra nei file estratti appartiene a un altro formato e funziona solo nei lettori che decidono di onorarlo. Ciò che controlli è l'ordine delle righe dentro uno stesso sottotitolo, il che comporta mettere le due lingue nello stesso sottotitolo e accettare la collocazione che il lettore sceglierà per l'intero blocco. Se la collocazione conta davvero, usa WebVTT: la sua riga dei tempi accetta un elenco di impostazioni con allineamento, riga e posizione, e definisce blocchi REGION per le aree di scorrimento — collocazione reale e specificata, non una convenzione.
- Quando la modalità «accoda» è la scelta giusta, e qual è la trappola?
- È la scelta giusta per un lavoro: un film che arriva come due file video con un file di sottotitoli ciascuno. Lo strumento trova il maggiore tempo di fine del primo file, gli somma l'intervallo che inserisci in secondi e aggiunge quel totale a ogni marca del secondo, così la seconda parte comincia pulita dopo la prima. La trappola è che somma alle marche esistenti del secondo file invece di sostituirle. È corretto quando il secondo file è sincronizzato da zero, cosa abituale se le due parti sono state sottotitolate separatamente. È sbagliato quando il secondo file è stato ritagliato da uno più lungo e porta ancora le posizioni originali: provato con un secondo file il cui primo sottotitolo stava a 00:10:00, accodarlo dopo una prima parte di 12 secondi con un intervallo di 1 secondo lo ha messo a 00:10:13 e non a 00:00:13, lasciando dieci minuti di silenzio in mezzo al risultato. La correzione richiede trenta secondi — sposta il secondo file di meno la sua stessa prima marca prima di unire — ma nulla ti avvisa, quindi controlla il primo sottotitolo della seconda metà nell'output.
Articoli che potrebbero interessarti
Tutte le guide →Strumenti correlati
SubRip non ha una specifica. La Library of Congress lo registra come solo in parte documentato e mal normalizzato, quindi che cosa sia un file .srt valido lo decide il lettore, il codificatore o la piattaforma che lo legge, e prima o poi due di essi non saranno d'accordo. Tutto ciò che è descritto qui è stato verificato sull'output reale dello strumento e non su una norma, perché per questo formato non ne esiste alcuna. WebVTT è diverso — ha una specifica pubblicata dal W3C — ma resta un Candidate Recommendation Draft e non una raccomandazione conclusa. Conserva il file originale, prova quello convertito nel lettore o nel servizio di caricamento che intendi davvero usare prima di buttare qualcosa, e considera ogni affermazione su ciò che fanno «tutti i lettori», comprese quelle di questa pagina, come qualcosa da verificare sul tuo.
Fonti
- Library of Congress — Sustainability of Digital Formats, FDD000569, SubRip Subtitle format (SRT): lists no specification document, records the format as only partly documented and not well standardised, and describes the supported formatting as a limited set derived from HTML tags — bold, italic, underline and colour — with nothing addressing placement
- Matroska — Subtitles technical page: an SRT cue's start time becomes the block timestamp and its span becomes the BlockDuration, the text is converted to UTF-8 as S_TEXT/UTF8, and "because there are no general settings for SRT, the CodecPrivate is left blank" — the container carries no styling, positioning or overlap policy
- W3C — WebVTT: The Web Video Text Tracks Format, Candidate Recommendation Draft of 20 May 2026 — the counter-example: a cue timings line may be followed by a cue settings list, and WebVTT region definition blocks declare named areas, so placement is specified rather than left to the player
- Ecma International — ECMA-262, ECMAScript Language Specification, Array.prototype.sort: the sort is required to be stable, which is why cues sharing a start time keep the order in which the two files were read and the first file's line comes first in every tie
Hai notato un errore in questo articolo?