Andare al contenuto principale
SubtitleMatrix

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 &amp; 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 &amp; 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.

Strumenti correlati