Risincronizzare i sottotitoli all’audio
La prima esecuzione scarica il motore video: circa 31 MB, serviti da questo sito e poi messi in cache dal browser. Serve solo a leggere la traccia audio; i sottotitoli vengono confrontati con il suono stesso, senza modello vocale e senza nulla che venga caricato.
Opzioni
Quanto i sottotitoli possono essere lontani da dove dovrebbero stare, in entrambe le direzioni. È un’impostazione di costo e di rischio più che di precisione: una finestra più ampia trova una deriva maggiore ma dà anche alla ricerca più occasioni di fermarsi su una coincidenza che per caso ottiene un buon punteggio. Oltre il minuto circa, nulla dipende più da un taglio o da un logo: uno scarto così grande di solito significa un montaggio diverso del film, o una discrepanza di frequenza dei fotogrammi, che questa pagina risolve separatamente. Scegliere la finestra più piccola che copre la propria ipotesi.
Questa pagina corregge i sottotitoli che sono nell’ordine giusto ma ai tempi sbagliati. Le dai due cose — il file di sottotitoli e il video o l’audio a cui appartiene — e lei calcola di quanto si è spostato il testo, poi riscrive il file con ogni blocco spostato. Uno scarto di qualche secondo viene da tagli e loghi; uno scarto che cresce lungo il film viene da una discordanza di frequenza dei fotogrammi, dove un master a 23,976 fps è stato abbinato a sottotitoli temporizzati per 25 fps e l’errore è già di un minuto e mezzo alla fine della prima ora.
La misura viene fatta dall’audio stesso. La pagina estrae una traccia mono, la riduce in fotogrammi di venti millisecondi di volume e marca quali fotogrammi contengono parlato. Poi pone una sola domanda più e più volte: con questo spostamento e questo cambio di velocità, quanta parte del testo dei sottotitoli cade sul parlato invece che sul silenzio? La risposta viene valutata per blocco e mediata, e la coppia vincente è quella che viene applicata. Non è coinvolto alcun riconoscimento vocale, ed è per questo che gira in un paio di secondi e che funziona anche quando i sottotitoli sono in una lingua per cui non hai un modello.
Poiché il punteggio è una misura e non una garanzia, la pagina è costruita per non fare nulla quando la misura è debole: cinque blocchi o meno, una traccia audio senza parlato rilevabile, un punteggio migliore che cade comunque in gran parte sul silenzio, o due allineamenti molto diversi che ottengono circa lo stesso punteggio. Ognuno di questi casi finisce con un rapporto e nessun file di sottotitoli riscritto, perché un fallimento silenzioso è molto meglio di uno sicuro di sé: sottotitoli spostati di cinque secondi sembrano disordinati, ma sottotitoli spostati di cinque secondi da uno strumento che dichiarava successo sono difficili da notare e da spiegare. Quando l’allineamento è buono ottieni due file, perché i due rispondono a domande diverse: il sottotitolo corretto mantiene il formato con cui è arrivato, chiamato film.synced.srt o con la sua estensione, pronto da riprodurre; il rapporto è un piccolo file di testo con lo scarto in millisecondi, il rapporto effettivamente applicato, il punteggio, la confidenza e una riga che dice se il file è stato toccato o no. Entrambi escono dalla stessa esecuzione, quindi un lotto di episodi produce una coppia abbinata per ognuno. L’annullamento ha effetto al passo successivo, perché anche qui il lavoro è fatto di passi indivisibili. Il lavoro è locale: l’audio viene decodificato da ffmpeg compilato in WebAssembly, scaricato una volta da questo sito e poi memorizzato; i sottotitoli vengono analizzati nella scheda. Nulla del tuo film o dei tuoi sottotitoli viene inviato da nessuna parte.
Domande frequenti
In che cosa uno scarto misurato differisce dall’offset fisso che digito nella pagina di spostamento?
La pagina di spostamento applica un numero che conosci già, quindi resta corretta indipendentemente dal fatto che l’audio sia d’accordo. Questa pagina parte dall’estremo opposto: presume che il numero non lo sappia, legge l’attività vocale dall’audio e risolve insieme spostamento e cambio di velocità. È anche per questo che può correggere un problema di frequenza, che nessun offset singolo sa esprimere: a 25 contro 23,976 l’errore è zero all’inizio e cresce di circa 3,6 secondi all’ora, quindi uno spostamento che ripara l’inizio peggiora la fine.
Perché la pagina a volte si rifiuta del tutto di scrivere un nuovo file di sottotitoli?
Perché una correzione sbagliata è più difficile da notare di una mancante. La ricerca riporta quattro cose: quanti blocchi aveva a disposizione, se l’audio conteneva parlato, quale frazione del tempo dei sottotitoli cadeva sul parlato e quanto il vincitore fosse migliore della migliore alternativa davvero diversa. Se una di queste è debole, l’esecuzione produce solo il rapporto, la cui riga di stato dice non trovato insieme al motivo. Non perdi nulla — il file originale resta intatto — e ottieni un numero da controllare prima di procedere a mano.
Che cosa significa il rapporto nel caso di una discordanza da 23,976 a 25 fps?
I tempi dei blocchi vengono moltiplicati per il rapporto e poi spostati dell’offset, quindi un rapporto di 1,0427 significa che i sottotitoli erano temporizzati per una base di fotogrammi più veloce e ogni blocco va allungato più tardi. La pagina prova entrambe le direzioni di ogni coppia comune, perché il verso dipende da quale file ti capita in mano: 1,0427 e 0,9590 sono la stessa discordanza vista dai due estremi. Se il rapporto riportato è 1,000000 e l’offset è sotto un fotogramma, il file è già allineato e viene lasciato com’è.
Il file corretto conserva la mia formattazione o solo i tempi?
Cambiano i tempi e nient’altro. I sottotitoli vengono analizzati nella stessa rappresentazione interna usata da ogni altra pagina del sito, l’inizio e la fine di ogni blocco vengono riscritti e il tutto viene serializzato di nuovo nel formato con cui era arrivato. La formattazione, il posizionamento e i tag in linea di un ASS sopravvivono, e sopravvive anche la struttura del file, ed è per questo che un .ass in ingresso dà un .ass in uscita invece di un .srt appiattito. L’unica eccezione visibile è un blocco compresso sotto il millisecondo da un rapporto grande, che viene tenuto a un millisecondo e conteggiato nell’elenco delle perdite.
Funziona quando i sottotitoli sono in una lingua diversa da quella dell’audio?
Sì, ed è il senso di misurare il volume invece di riconoscere le parole. L’attività vocale è una forma — una frase è un’esplosione di energia seguita da uno spazio — e quella forma è la stessa sia che la voce parli tedesco sia che parli spagnolo. Un doppiaggio tedesco sotto sottotitoli spagnoli si allinea bene quanto una coppia nella stessa lingua. Quello che non sa fare è distinguere una battuta doppiata da una originale, quindi se il doppiaggio inserisce dialogo extra l’allineamento trova comunque la corrispondenza complessiva, ma singoli blocchi nei passaggi inseriti possono posarsi sulla riga sbagliata.