Convertire TTML in CSV
Oppure incollare il testo dei sottotitoli
Cosa cambia questa conversione
3 elementi vengono scartati o richiedono una decisione
- Stile
tutto lo stile (grassetto, corsivo, colore, contorno, ombra)
- Posizionamento
il posizionamento sullo schermo (ogni blocco torna alla posizione predefinita)
- Contenuto specifico del formato
il contenuto che il formato di partenza tiene fuori dai suoi blocchi (blocchi non-cue, testo di intestazione, impostazioni per blocco, eventi commentati) — il formato di destinazione non ha un posto per esso
Questo elenco deriva dalla matrice delle capacità di questi due formati, non dal particolare file caricato. Un file specifico può perdere di più se usa caratteristiche che il formato consente ma la matrice non modella.
Il CSV conserva tre cose per sottotitolo: quando comincia, quando finisce e che cosa dice. Un documento TTML ne conserva molte di più — stili in `<styling>`, regioni in `<layout>`, metadati in `<metadata>`, un albero XML con namespace — e la conversione in CSV le lascia cadere.
L’output ha una riga di intestazione `start,end,text` e poi una riga per cue, con i tempi in millisecondi. Ogni `<p>` diventa una riga, e i riferimenti a stile e regione spariscono insieme agli elementi che li definivano. Il TTML scrive `00:00:04.126`, e quel valore arriva nel CSV senza arrotondamenti.
Si perdono formattazione, posizionamento e contenuti specifici del formato. Un `<p>` su più righe resta una cella sola, con le righe separate dal testo che il CSV usa per andare a capo dentro le virgolette. Più file insieme si elaborano in coda e si scaricano in un unico ZIP.
Esempi
Un file TTML tipico, convertito in CSV
Ingresso
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" xml:lang="en">
<head>
<styling>
<style xml:id="s1" tts:color="#FFFF00" tts:fontWeight="bold"/>
</styling>
<layout>
<region xml:id="bottom" tts:origin="10% 80%" tts:extent="80% 20%"/>
</layout>
</head>
<body>
<div>
<p begin="00:00:01.000" end="00:00:03.500" region="bottom" style="s1">Hello <span tts:fontStyle="italic">there</span>.</p>
<p begin="00:00:03.500" end="00:00:06.000" region="bottom">How are you?<br/>Fine, thanks.</p>
</div>
</body>
</tt>
Uscita
start,end,text
00:00:01.000,00:00:03.500,Hello <i>there</i>.
00:00:03.500,00:00:06.000,"How are you?
Fine, thanks."
In questa conversione si perdono la formattazione, il posizionamento e i contenuti specifici del formato. Tutto il resto resta identico, riga per riga.
La stessa conversione su un input difficile
Ingresso
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
ttp:frameRate="25" xml:lang="en">
<body>
<div>
<p begin="1.5s" dur="2s">Loaded from an offset and a duration.</p>
<p begin="4s" end="00:00:06.50">A coarser clock spelling.</p>
<p begin="00:00:07:00" end="00:00:08:12">Frames, at 25fps.</p>
<p begin="9s"><span tts:color="#FF0000">Half-open</span> and Tom & Jerry.</p>
</div>
</body>
</tt>
Uscita
start,end,text
00:00:01.500,00:00:03.500,Loaded from an offset and a duration.
00:00:04.000,00:00:06.500,A coarser clock spelling.
00:00:07.000,00:00:08.480,"Frames, at 25fps."
00:00:09.000,00:00:11.000,"<font color=""#FF0000"">Half-open</font> and Tom & Jerry."
Namespace spaiati, entità non dichiarate e paragrafi vuoti: il file è sporco ma legale, e il confronto con l’esempio ordinato mostra fin dove arriva la tolleranza del parser.
Domande frequenti
Che aspetto ha l’output quando TTML diventa CSV?
Ha l’aspetto del CSV: una riga di intestazione `start,end,text` e poi una riga per cue, con i due tempi in millisecondi. Ogni elemento `<p>` diventa una riga, nello stesso ordine e con lo stesso testo.
Il CSV conserva i colori e i pesi del carattere del TTML?
No. Il colore dichiarato in `<styling>` con `tts:color` e il peso dichiarato con `tts:fontWeight` non hanno una colonna nel CSV: il risultato è testo semplice, e ciò che il lettore mostra dipende dai suoi valori predefiniti.
Che ne è delle regioni definite in `<layout>`?
Nessuna colonna del CSV le accoglie: `tts:origin` ed `tts:extent` spariscono insieme al riferimento `region=` di ogni `<p>`. Il testo resta, ma la collocazione sullo schermo non è più nel file.
Perché l’elenco delle perdite cita i contenuti specifici del formato?
Perché l’intestazione TTML contiene elementi che non sono né stile né posizione: un `<metadata>`, la dichiarazione XML, i namespace. Il CSV non ha dove metterli, e il rapporto li conta invece di lasciarli sparire senza dirlo.
Come esce in CSV un paragrafo TTML su più righe?
Come una sola cella di testo con le righe separate dagli a capo che il CSV conserva dentro le virgolette. L’accoppiamento resta: le righe appartengono ancora a un solo sottotitolo, e il lettore le mostra insieme.
I cue mantengono l’ordine nell’output CSV?
Sì, e vengono ordinati per tempo di inizio lungo la strada: prima i più antichi, come si aspetta ogni formato di questo sito. Se il documento TTML elencava i paragrafi fuori sequenza, il CSV li rimette in ordine: cambia la struttura, non il contenuto.
Posso riconvertire il CSV in TTML?
Sì, e ha un elenco suo: convertire CSV in TTML perde formattazione, posizionamento e contenuti specifici del formato. Quell’elenco è diverso da quello qui sopra perché i due formati conservano cose diverse.
I millisecondi del TTML arrivano intatti nel CSV?
Sì: il TTML scrive `00:00:04.126` e il CSV riceve lo stesso valore in millisecondi, senza arrotondamenti. La precisione al millisecondo è una delle poche cose che questa direzione non perde.
L’output CSV conserva la codifica del documento TTML?
No: l’output è UTF-8, con fine riga Unix e senza BOM, qualunque codifica dichiarasse il documento TTML. Ciò che esce è sempre lo stesso CSV in UTF-8.