Vai al contenuto
OneKitly

Sottotitoli fuori sincrono: misurare lo scarto e spostare un SRT di un numero esatto di secondi

Pubblicato il 05/08/2026 · 14 min di lettura · Strumenti per sviluppatori

Daniel Okonkwo

Daniel OkonkwoSviluppatore front-end e redattore Tech presso OneKitly

Performance web · Formati di file

Verificato su 4 fonti

Vedi il profilo
In breve

Misura lo scarto prima di spostare qualsiasi cosa. Trova una battuta inconfondibile vicino all'inizio, annota l'istante esatto in cui viene detta nel lettore, sottrai la marca di inizio del sottotitolo e hai lo scarto in secondi; poi ripeti la misura vicino alla fine del film. Se i due valori coincidono, la traccia ha uno scarto costante e un solo spostamento sistema tutto il file: incolla l'SRT, inserisci lo scarto in secondi (positivo ritarda, negativo anticipa) e prendi il file corretto. Se il secondo valore è più grande del primo, non è uno scarto, è una deriva, e nessuno spostamento la risolverà. La deriva significa quasi sempre un conflitto di frame rate. Una traccia sincronizzata su un master a 25 fps e riprodotta su un riversamento a 23,976 fps — 23,976 è esattamente 24000/1001 — ha bisogno che le sue marche siano moltiplicate per 1,042708, non spostate: l'errore cresce di 2,5625 secondi per ogni minuto di proiezione, cioè un secondo ogni 23,4 secondi e 3 minuti 50,6 secondi su una linea temporale di sottotitoli di 90 minuti. La coppia più dolce, 24 contro 23,976 o 30 contro 29,97, vale esattamente 1,001: solo 5,4 secondi sugli stessi 90 minuti, ed è per questo che nella prima mezz'ora viene scambiata per uno scarto costante. Un comportamento da conoscere prima di inserire un valore negativo: un sottotitolo spinto interamente prima dello zero viene rimosso, non appiattito, e una riga ambra sopra l'output conta quanti se ne sono andati. Un sottotitolo a cavallo dello zero mantiene la sua fine reale e parte da 00:00:00,000. Questo rende anche un grande spostamento negativo un modo praticabile per tagliare un'introduzione: i sottotitoli che vi stavano dentro spariscono, tutto ciò che segue conserva la sua spaziatura, e ti viene detto che cosa si è perso.

Misura lo scarto in due punti invece di indovinarlo una volta sola. Se è costante, un solo spostamento sistema il file. Se cresce, è un problema di frame rate — 25 fps contro 23,976 deriva di 2,5625 secondi al minuto — e nessuno spostamento lo risolverà.

Misura lo scarto, non stimarlo a occhio

Scegli una battuta che non puoi sbagliare — un nome, un numero, un grido, qualunque cosa cominci con una consonante netta. Fai partire il film, metti in pausa sul fotogramma in cui il suono inizia e leggi l'orologio del lettore. Poi cerca la stessa battuta nel file dei sottotitoli e leggi la sua marca di inizio. Lo scarto è il tempo del video meno il tempo del sottotitolo. Se il video segna 00:04:12,500 e il sottotitolo 00:04:09,000, i sottotitoli arrivano 3,5 secondi in anticipo e lo scarto da applicare è di +3,5 secondi.

Ora fallo una seconda volta, il più vicino possibile alla fine del film dove trovi una battuta pulita. Questa seconda misura è tutta la diagnosi, e saltarla è il motivo per cui si sposta quattro volte lo stesso file senza mai sistemarlo. Due numeri che coincidono entro qualche decimo significano scarto costante: uno spostamento e via. Due numeri che differiscono di minuti significano che il file non è sfasato, sta andando alla velocità sbagliata, e ogni spostamento sistemerà un capo del film peggiorando l'altro.

Una nota pratica sulla lettura dell'orologio: la maggior parte dei lettori mostra la posizione al decimo di secondo, e un decimo è ben al di sotto di ciò che uno spettatore nota, quindi qui non serve precisione al fotogramma. Serve invece onestà su quale istante hai misurato. Misura l'istante in cui il suono comincia, non quello in cui te ne accorgi, e misura lo stesso tipo di istante entrambe le volte — altrimenti le due letture differiscono per il tuo tempo di reazione e ti inventi una deriva che non c'è.

Quando lo scarto cresce: l'aritmetica dei frame rate

Lo stesso film esiste in due famiglie di velocità di scorrimento, e il file dei sottotitoli ricorda su quale è stato scritto. La famiglia cinema va a 24 fotogrammi al secondo, o a 24000/1001 — 23,976 — su qualunque riversamento che abbia dovuto stare dentro la cadenza della televisione a colori americana. La famiglia broadcast di gran parte d'Europa va a 25. Non sono etichette decorative: le abbreviazioni di frame rate di ffmpeg le scrivono come frazioni esatte, film = 24/1, pal = 25/1, ntsc-film = 24000/1001, ntsc = 30000/1001. Un file di sottotitoli fatto per l'una e riprodotto sull'altra non è nel posto sbagliato, avanza alla velocità sbagliata.

La correzione è una moltiplicazione, non un'addizione. Le marche scritte per una versione a 25 fps, riprodotte su una a 23,976 fps, vanno moltiplicate per 25 ÷ (24000/1001) = 25025/24000 = 1,042708. Leggilo come un tasso di errore e diventa riconoscibile a colpo d'occhio: 2,5625 secondi di deriva per ogni minuto di proiezione, un secondo pieno ogni 23,4 secondi. Su una linea temporale di sottotitoli di 90 minuti si accumulano 230,6 secondi — 3 minuti 50,6 secondi. Al contrario, una battuta che appartiene al minuto 90 del riversamento a 23,976 porta una marca a 25 fps di 86 minuti 18,8 secondi e compare 3 minuti 41,2 secondi in anticipo.

La coppia pericolosa è quella piccola. Passare da 24 a 23,976, o da 30 a 29,97, è un rapporto di esattamente 1,001, che sugli stessi 90 minuti fa 5,4 secondi. Nei primi venti minuti è invisibile; all'ultima bobina è un'intera frase fuori posto. Si sposta quel file di due secondi, si guarda l'inizio soddisfatti e un'ora dopo si ritrova lo stesso problema — perché non è mai stato uno scarto. Due misure a un'ora di distanza ti dicono quale dei due casi hai in circa novanta secondi di lavoro.

Questo strumento sposta e non riscala, e conviene dirlo apertamente invece di lasciartelo scoprire. Se le tue due misure non concordano, il file ha bisogno che ogni marca venga moltiplicata, il che richiede uno strumento di conversione di frame rate o un breve script — e il moltiplicatore è il rapporto fra le tue due posizioni misurate, non un valore da indovinare. Dividi il tempo video reale della battuta tarda per quello della battuta iniziale, fai lo stesso con le due marche dei sottotitoli; il rapporto fra questi due rapporti è ciò che va applicato.

Che cosa fa davvero qui uno spostamento negativo

Uno spostamento negativo è il caso comune — i sottotitoli che arrivano tardi vanno anticipati — ed è l'unico punto in cui uno strumento per sottotitoli deve prendere una decisione che il formato non prende per lui. Un sottotitolo a 00:00:01,000 spostato di −5 secondi comincerebbe a −4 secondi. SubRip non ha modo di scriverlo. Tre risposte sono possibili: scrivere comunque una marca negativa e lasciare che il lettore ci si strozzi, scartare il sottotitolo, oppure limitarlo a zero. Questo strumento sceglie fra le ultime due, sottotitolo per sottotitolo, secondo ciò che resta dopo l'origine.

Il test riguarda la marca di fine del sottotitolo, e produce due esiti diversi. Un sottotitolo a cavallo dello zero viene troncato: a −2,5 secondi, 00:00:01,000 --> 00:00:04,000 torna come 00:00:00,000 --> 00:00:01,500. Mantiene la sua fine reale, quindi compare fin dal primissimo fotogramma e dura un secondo e mezzo meno del dovuto — visibile, ma non fatale. Un sottotitolo spinto interamente prima dello zero è un'altra cosa. A −5 secondi, lo stesso sottotitolo finirebbe a −1 secondo: non ha più nulla da mostrare e viene tolto dal file. I sottotitoli che restano sono rinumerati a partire da 1, così ciò che torna è un file più corto e non un file imbottito.

Spingi tutto il file indietro abbastanza e i sottotitoli compresi in quel tratto semplicemente spariscono. Uno spostamento di −20 secondi applicato a un file i cui primi tre sottotitoli stanno nei primi dodici secondi non restituisce più nulla, e una riga ambra sopra l'output segnala che ora tutti i sottotitoli cadono prima dello zero. Al di sotto di quell'estremo, la stessa riga porta due conteggi: quanti sottotitoli sono stati rimossi e quanti iniziavano prima dello zero e ora partono dall'origine. Ciò che lo strumento non fa più è perdere sottotitoli senza dirlo: leggi i conteggi prima di sovrascrivere qualcosa e confrontali con ciò che pensavi di perdere.

Questo fa anche di un grande spostamento negativo un vero strumento di taglio. Togli un'introduzione di trenta secondi dalla testa di un video, sposta i sottotitoli di −30 secondi, e quelli che appartenevano all'introduzione vengono rimossi, quello a cavallo del taglio comincia al primo fotogramma con la sua fine reale, e tutto ciò che segue conserva la spaziatura. Il conteggio nell'avviso è la verifica: se dice quattro sottotitoli rimossi e tu contavi di perderne due, il tuo scarto superava la durata dell'introduzione.

Che cosa esce, e che cosa cambia in silenzio

L'output è sempre SubRip, qualunque cosa entri. I sottotitoli sono rinumerati da 1 nell'ordine del file, le marche sono scritte come HH:MM:SS,mmm con una virgola prima dei millisecondi, e tutto ciò che sta fra la riga della marca e la riga vuota passa intatto — comprese le tue etichette di corsivo o i trattini di dialogo. Quest'ultimo punto conta: questo è un ri-temporizzatore, non un pulitore, e non altererà il tuo testo in alcun modo.

Legge anche un file WebVTT, e vale la pena saperlo perché il risultato non è quello che si aspetta un utente ignaro. Incolla un .vtt: lo strumento trova i sottotitoli, butta via la riga di intestazione WEBVTT, butta via gli identificatori dei sottotitoli e qualunque impostazione posta dopo la freccia, converte il punto decimale in virgola e ti restituisce SubRip. I tempi si spostano correttamente. Ma il file che torna non è più WebVTT valido — l'intestazione è un requisito rigido della specifica, e le impostazioni di posizionamento su cui magari contavi sono sparite. Se volevi un .vtt spostato, non è questa la strada.

Due piccoli fatti sui bordi, entrambi trovati dando allo strumento il proprio output. Il lettore delle marche accetta fino a tre cifre nel campo delle ore, quindi una marca come 111:06:41,000 viene riletta senza problemi; il tetto sta a 999:59:59,999, oltre il quale lo strumento scriverebbe ore che non saprebbe più rileggere — un muro che nessun film raggiungerà mai. E lo scarto viene arrotondato a millisecondi interi in uscita, così un valore di 0,0005 secondi diventa uno spostamento di un millisecondo invece che nulla. Nessuno dei due disturberà un film, ma vale la pena conoscerli entrambi se concateni operazioni.

Deriva al minuto
La stessa linea temporale di sottotitoli di 90 minuti sotto cinque conflitti di frame rate — moltiplicatore, deriva al minuto, deriva totale
ConflittoMoltiplicatore da applicareDeriva al minutoDeriva su 90 minutiCome appare guardando
Scarto costante (qualsiasi causa)1,000000 — sposta invece0 s0 sUgualmente sbagliato al minuto 1 e all'89 — basta uno spostamento
Sottotitoli a 24 fps su video a 23,976 fps (o 30 su 29,97)1,0010000,060 s5,4 sInvisibile per venti minuti, una frase fuori posto alla fine — il caso più spesso mal diagnosticato
Sottotitoli a 25 fps su video a 24 fps1,0416672,500 s3 min 45,0 sI sottotitoli anticipano e il divario si allarga già nella prima bobina
Sottotitoli a 25 fps su video a 23,976 fps1,0427082,563 s3 min 50,6 sIl classico conflitto PAL-cinema: un secondo perso ogni 23,4 secondi
Sottotitoli a 23,976 fps su video a 25 fps0,959041−2,458 s−3 min 41,2 sLo stesso conflitto al contrario: i sottotitoli restano sempre più indietro
Sfasamento temporale sottotitoli SRTCorreggi sottotitoli non sincronizzati spostando ogni marca temporale di un file SRT dello stesso sfasamento. Incolla i sottotitoli, inserisci uno sfasamento positivo per ritardarli o negativo per anticiparli, in secondi o millisecondi, e copia o scarica il file corretto. I tempi non diventano mai negativi.Prova lo strumento

Domande frequenti

Come misuro lo scarto con precisione senza scorrere fotogramma per fotogramma tutto il film?
Bastano due misure, con una precisione al decimo di secondo. Trova una battuta che inizi con una consonante netta vicino all'inizio del film, metti in pausa sul fotogramma in cui il suono comincia e leggi la posizione del lettore; sottraine la marca di inizio del sottotitolo. Fai lo stesso con una battuta vicino alla fine. Se i due scarti coincidono, applica la loro media e hai finito. Qui la costanza del metodo conta più della precisione: misura sempre lo stesso istante — l'inizio del suono, non il momento in cui lo riconosci — perché un errore di tempo di reazione di mezzo secondo in una delle due misure basta a inventare una deriva inesistente. Se il tuo lettore mostra solo secondi interi, usane uno che mostri i decimi: la differenza fra 3 e 3,5 secondi di scarto si vede sullo schermo.
I miei sottotitoli sono perfetti all'inizio e circa quattro minuti in anticipo alla fine. Che cos'è?
È un conflitto di frame rate, e la sua entità dice quale. Circa quattro minuti di deriva su un lungometraggio è la firma di sottotitoli a 25 fps su un video a 23,976 fps: il moltiplicatore è 1,042708, la deriva 2,5625 secondi al minuto, e su una linea temporale di sottotitoli di 90 minuti fa in tutto 230,6 secondi — 3 minuti 50,6 secondi, o 3 minuti 41,2 secondi se la misuri sull'orologio del video. Uno spostamento non può ripararlo, perché aggiunge lo stesso numero a ogni marca mentre il tuo errore è proporzionale alla marca. Serve moltiplicare ogni marca per 1,042708, cioè conversione di frame rate e non spostamento temporale. Questo strumento non lo fa, e applicare uno spostamento sposterà soltanto da un capo all'altro del film il punto in cui i sottotitoli capitano giusti.
Che cosa succede ai sottotitoli che uno spostamento negativo spinge prima di 00:00:00,000?
Vengono rimossi, e lo strumento dice quanti. La decisione è presa sulla marca di fine, quindi ci sono due esiti. Un sottotitolo a cavallo dello zero conserva la sua fine reale: spostare 00:00:01,000 --> 00:00:04,000 di −2,5 secondi restituisce 00:00:00,000 --> 00:00:01,500, che appare dal primo fotogramma e dura un secondo e mezzo in meno. Un sottotitolo la cui fine è passata anch'essa prima dello zero non ha più nulla da mostrare e viene scartato; i superstiti sono rinumerati a partire da 1, così l'output è un file valido più corto e non uno imbottito di voci vuote. Una riga ambra sopra l'output porta i conteggi — quanti sottotitoli sono stati rimossi, quanti ora partono dall'origine — e se lo spostamento cancella tutto, lo dice invece di consegnarti un file. Non vengono mai scritti tempi negativi. In pratica questo rende un grande spostamento negativo un modo utilizzabile per tagliare un'introduzione: confronta il numero rimosso con i sottotitoli che pensavi di perdere prima di sovrascrivere qualcosa.
Posso incollare un file WebVTT, o accetta solo SubRip?
Legge WebVTT, ma ti restituisce SubRip, e quella conversione non è gratuita. WebVTT è una specifica del W3C: il file deve aprirsi con una riga WEBVTT, le marche usano un punto prima della frazione a tre cifre e non una virgola, il campo delle ore è opzionale, e una riga di tempi può portare dopo la freccia un elenco di impostazioni — allineamento, posizione, regione — oltre a un identificatore opzionale nella riga sopra. Questo strumento trova i tempi, li sposta e scrive SubRip: l'intestazione sparisce, gli identificatori spariscono, le impostazioni spariscono e il punto diventa virgola. Se la tua sorgente era WebVTT con stile o posizionato, tutto questo viene scartato senza dirlo. Se in realtà vuoi testo semplice da un file di sottotitoli e non un file ri-temporizzato, il convertitore da VTT a TXT è la via onesta.
Esiste una specifica ufficiale di SubRip con cui verificare il mio file?
No, e conviene saperlo prima di discutere con uno strumento su che cosa sia valido. Il formato è ciò che produceva il programma SubRip originale, più ciò che i lettori hanno poi deciso di tollerare. La Library of Congress lo descrive come solo in parte documentato e mal normalizzato, e non elenca alcun documento di specifica; la sua scheda dà la forma del timecode come ore:minuti:secondi,millisecondi, con la virgola, e la freccia come due trattini e una parentesi angolare chiusa. Non esiste nemmeno un tipo di media registrato, mentre WebVTT ha text/vtt registrato presso la IANA. In pratica questo significa che la codifica è un'ipotesi — il programma originale usciva per impostazione predefinita in una code page Windows, quindi ogni parser deve tentare il rilevamento del set di caratteri — e che quando due strumenti non concordano sul tuo file, nessuno dei due sbaglia rispetto a una norma. Prova nel lettore che userai davvero.

Articoli che potrebbero interessarti

Tutte le guide
TutorialDa SRT a testo: ottenere una trascrizione pulita dai sottotitoliTogliere i numeri e le marche temporali è la metà facile. A decidere se la trascrizione si legge sono le etichette di corsivo, i trattini di dialogo, le descrizioni sonore e le frasi spezzate su due sottotitoli — e questo convertitore te le lascia tutte.TutorialDai sottotitoli al foglio di calcolo, e ritorno: che cosa sopravvive al viaggioUna virgola viene protetta, una virgoletta raddoppiata e un sottotitolo su due righe conserva entrambe — verificato byte per byte su tre viaggi consecutivi. Ciò che può ancora alterare il file è il foglio di calcolo in mezzo.TutorialUnire due tracce di sottotitoli in una versione bilingue: che cosa succede davvero ai sottotitoliIl 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.SpiegazionePerché il tuo taglio video cade due secondi primaHai chiesto 1:23 e ottenuto 1:21. Niente è rotto: un taglio che non ricodifica può cadere solo su un fotogramma chiave, e quanto sia lontano il più vicino dipende interamente da cosa ha registrato il video. Ecco come sapere quale hai e quando accettare lo scarto.GuidaEstrarre fotogrammi fissi da un video — e perché sembrano più molli del videoDietro tre pulsanti si nascondono tre comandi: un fotogramma a un istante dato, un numero fisso distribuito sul clip, o uno ogni N secondi. Ecco gli argomenti esatti, il tetto di 60 fotogrammi e il motivo per cui un fotogramma preso da metà di un clip compresso non sarà mai nitido quanto un fotogramma chiave.TutorialTirare fuori l'audio da un video senza una seconda generazione di perditaLa colonna sonora dentro il tuo video è già passata una volta per un codificatore con perdita. Che estrarla ti costi un secondo passaggio dipende interamente da quale dei tre pulsanti premi — e «estrai in MP3», quello a cui tutti si buttano, è quello che costa.

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

Hai notato un errore in questo articolo?