Video e sottotitoli · Toolkit sottotitoli
Perché un file di sottotitoli viene riprodotto in VLC ma non funziona nell'elemento traccia HTML5
· Come funziona
sottotitoli webvtt elaborazione del browser
I giocatori desktop perdonano; l'elemento traccia del browser non lo è. Questo post spiega come il parser di didascalia HTML5 legge un file WebVTT, gli errori che elimina silenziosamente e come preparare un file che entrambi accettino.
Lo stesso file funziona in VLC e non mostra nulla sulla pagina web: due parser, due livelli di tolleranza
Un file di sottotitoli che viene riprodotto correttamente in un lettore desktop e non mostra nulla su una pagina Web non è cambiato tra i due. Ciò che è cambiato è quanta tolleranza porta il lettore. I lettori desktop sono progettati per visualizzare tutto ciò che un utente trascina su di loro, quindi indovinano, riparano e saltano. L'elemento HTML5 track implementa una specifica e una specifica che accetta ipotesi non sarebbe una.
La differenza non è nemmeno un bug. Si tratta di due progetti con obblighi diversi e la conseguenza pratica è che il lettore desktop non è un buon test per verificare se un file funzionerà sul web.
Come l'elemento traccia carica un file di didascalia: la richiesta, il tipo MIME, CORS per le tracce multiorigine e il controllo dell'intestazione WEBVTT
L'elemento track recupera il file di didascalia come una normale risorsa, il che significa che è soggetto alle stesse regole di qualsiasi altra richiesta. Deve essere servito con il tipo di supporto WebVTT e un file servito come testo normale viene rifiutato indipendentemente dal suo contenuto. Una traccia ospitata su un'altra origine necessita di intestazioni multiorigine e dell'attributo crossorigin sull'elemento video e senza di esse il recupero fallisce prima che avvenga qualsiasi analisi.
Poi arriva il controllo dell'intestazione. Un file WebVTT deve iniziare con la firma WEBVTT, facoltativamente preceduta da un contrassegno dell'ordine dei byte, e un file senza di essa non è un file WebVTT. Questo è il motivo più comune per cui un file SRT rinominato con un'estensione VTT non visualizza nulla: la ridenominazione ha modificato l'estensione e non la prima riga.
Analisi cue-by-cue: cosa fa il browser con un timecode non valido o una riga inaspettata e perché l'errore è silenzioso
L'analisi dopo quel punto avviene passo dopo passo e la modalità di errore è ciò che crea confusione. Un blocco che il parser non riesce a leggere viene scartato e l'analisi continua. Non c'è eccezione, nessun errore della console e nessuna indicazione visiva; lo spunto semplicemente non appare mai. Un file con quattro timecode malformati su novecento viene riprodotto quasi perfettamente, con quattro momenti di silenzio che sembrano una traduzione mancante piuttosto che un errore di formato.
Questo è il motivo per cui il sintomo viene solitamente segnalato come intermittente. Niente è intermittente in questo. Gli stessi segnali falliscono ogni volta, ma poiché i segnali circostanti funzionano, il file sembra sostanzialmente funzionale e l'errore viene attribuito al contenuto piuttosto che all'analisi.
Indulgenza dei lettori desktop: perché VLC e altri accettano file tecnicamente non validi
I giocatori desktop assumono deliberatamente la posizione opposta. Accettano entrambi i separatori di millisecondi, tollerano le righe di indice mancanti, deducono il formato dal contenuto anziché dall'estensione, riparano l'ordine e saltano ciò che non possono utilizzare senza lamentarsi. Un utente che trascina un file su un lettore desidera che il film abbia i sottotitoli, non un rapporto di convalida.
Il parser del toolkit segue la stessa tradizione indulgente sull'input, accettando ore opzionali, separatori e file i cui blocchi sono irregolari. La differenza è ciò che fa dopo: registra ogni difetto che ha tollerato come un problema individuato, e riscrive una forma canonica invece di preservare l’irregolarità che ha accettato.
Esempio funzionante: un file con tre errori comuni: testarlo in un browser e vedere quali segnali svaniscono
Prendi un file con tre difetti: manca l'intestazione WEBVTT, una cue ha un campo secondi di settantacinque e una cue termina prima di iniziare. In un lettore desktop il file viene riprodotto, i secondi impossibili vengono riparati o saltati silenziosamente e il segnale invertito lampeggia o viene eliminato. Lo spettatore vede i sottotitoli.
Nell'elemento traccia l'intestazione mancante lo termina immediatamente; non viene visualizzato alcun segnale, poiché il file non è mai stato accettato come WebVTT. Aggiungi l'intestazione e l'immagine cambia: viene visualizzata la maggior parte dei segnali, il segnale con settantacinque secondi viene scartato durante l'analisi e il segnale invertito viene analizzato ma mai mostrato perché non ha una durata da visualizzare. Nomina la validazione sia prima di caricare la pagina, riportando il timecode impossibile che la cue che finisce prima di iniziare, ciascuno per numero.
Ciò che questo non copre: styling con ::cue, impostazioni di posizionamento e didascalie in tempo reale
Questo riguarda se i segnali vengono caricati, non come appaiono. Lo styling tramite lo pseudo-elemento cue, le impostazioni di posizionamento e allineamento sulla linea del timecode, le definizioni delle regioni e il testo verticale sono tutte preoccupazioni separate che contano solo una volta analizzato il file. Un file che non visualizza nulla non è un problema di stile e lo stile non lo salverà.
Anche i sottotitoli live e in streaming sono esclusi da questo. Le tracce di sottotitoli segmentate fornite insieme ai flussi adattivi hanno il proprio modello di consegna e un file statico caricato da un elemento della traccia non è il modo in cui raggiungono il lettore.
Conclusione: preparati per il parser più rigoroso: come la conversione e la pulizia del Subtitle Toolkit producono un file accettato dall'elemento traccia
Preparati per il parser più rigoroso piuttosto che per quello più indulgente, perché il parser rigoroso è quello utilizzato dal tuo pubblico. Converti in WebVTT correttamente in modo che la riga della firma venga scritta anziché presunta, forniscila con il tipo di supporto corretto e aggiungi intestazioni multiorigine se il file risiede su un altro host.
Esegui la conversione e leggi i problemi segnalati prima della spedizione. Il convertitore scrive timestamp canonici con il separatore richiesto dal formato, rinumera le cue in modo contiguo e segnala gli errori che ha dovuto tollerare, ovvero l'elenco delle cue che sarebbero silenziosamente svanite in un browser. Quindi ricarica la pagina e confronta il conteggio dei segnali con la fonte invece di fidarti della comparsa dei sottotitoli.