TTML naar CSV
Of plak ondertiteltekst
Wat deze conversie verandert
3 dingen vervallen of vragen om een beslissing
- Opmaak
alle opmaak (vet, cursief, kleur, contour, schaduw)
- Positionering
positionering op het scherm (elk blok keert terug naar de standaardpositie)
- Formaatspecifieke inhoud
inhoud die het bronformaat buiten zijn blokken bewaart (blokken die geen ondertitel zijn, koptekst, instellingen per blok, uitgecommentarieerde gebeurtenissen) — het doelformaat heeft er geen plek voor
Deze lijst komt uit de capaciteitenmatrix voor deze twee formaten, niet uit het bestand dat je hebt geladen. Een specifiek bestand kan meer verliezen wanneer het kenmerken gebruikt die het formaat toestaat maar de matrix niet modelleert.
Deze pagina zet TTML om naar CSV. Elke p uit het TTML-document wordt een rij met een starttijd, een eindtijd en de tekst; de eerste rij noemt de kolommen. De tijden blijven exact, want TTML en CSV schrijven een moment allebei tot op de milliseconde.
Wat niet meekan, is het uiterlijk en de plaatsing. De styling- en layout-tabellen in de head verdwijnen, net als de style- en region-verwijzingen op de p’s; wat in de tekst zelf als opmaak zit, wordt als tag in de tekstcel gezet. Dat is de enige vorm van opmaak die een formaat op cuniveau nog kan dragen.
De omzetting draait volledig in je browser, zonder upload. Een reeks bestanden gaat in één ZIP naar buiten, en een blok van twee regels blijft binnen dezelfde tekstcel bij elkaar.
Voorbeelden
Een gewoon TTML-bestand, omgezet naar CSV
Invoer
<?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>
Uitvoer
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 deze uitvoer gaan opmaak, positionering en formaateigen inhoud verloren: de koptabellen en verwijzingen verdwijnen. De tijden en de tekst blijven gelijk.
Dezelfde omzetting op een weerbarstige invoer
Invoer
<?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>
Uitvoer
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."
Dit is het soort schade dat echte bestanden hebben: gemengde regeleinden, losse spaties, een p-element zonder eigen eindtijd. Vergelijk het met het nette voorbeeld hierboven.
Veelgestelde vragen
Blijven vet en cursief van TTML naar CSV bewaard?
De nadruk wel, de stijltabel niet. Opmaak die bij een stuk tekst hoort — vet, cursief, onderstreept, een kleur — wordt als tag in de CSV-tekst geschreven, want dat is het enige soort opmaak dat een formaat op cuniveau nog kan dragen. Wat verdwijnt, is alles wat het TTML-bestand globaal zei: lettertype, grootte, rand, schaduw en marges.
Wat gebeurt er met de plaats op het scherm van TTML naar CSV?
CSV kan niet zeggen waar een ondertitel wordt getekend, dus de region- en style-verwijzingen op een p verdwijnen en elk blok valt terug op de standaardpositie die de speler kiest — bij de meeste spelers onderaan, gecentreerd.
Wat gebeurt er met de TTML-proloog, de styling- en layout-tabellen in CSV?
Die verdwijnen. TTML bewaart uiterlijk en plaatsing in de head: de XML-declaratie, de styling-tabel met benoemde stijlen, de layout-tabel met benoemde regio’s, metadata en de verwijzingen daarop. CSV kent cues, geen document, dus niets uit die head heeft een plek. Opmaak binnen een p-element wordt wel als tag in de tekst gezet.
Hoe ziet de CSV-uitvoer eruit als TTML daar naartoe gaat?
De eerste rij luidt start,end,text. Daarna volgt per ondertitelblok één rij met twee tijdstippen en de tekst; de tijdnotatie is 00:00:04.126, met punt en milliseconden.
Zijn de TTML-tijden exact in het CSV-bestand?
Ja, tot op de milliseconde — fijner kan geen van beide formaten. TTML en CSV schrijven een moment allebei als 00:00:04.126, dus de tijdstippen komen teken voor teken over zoals ze erin gingen.
Hoe komt een TTML-blok van twee regels in CSV terecht?
Beide regels komen in dezelfde tekstcel, tussen dubbele aanhalingstekens, omdat CSV een veld met een regeleinde zo schrijft. Ze blijven dus één ondertitelblok.
Blijft de volgorde van TTML-blokken in CSV gelijk?
Ja. De rijen komen te staan op volgorde van hun starttijd, het vroegste eerst; een invoer die niet op volgorde stond, wordt dus herschikt. Aan de tekst verandert dat niets.
Kan ik CSV weer naar TTML omzetten?
Ja, en die richting kost niets extra: een CSV-bestand bevat minder dan TTML kan vasthouden, dus er gaat onderweg niets meer af. Wat deze richting al kwijtraakte, blijft wel weg — opmaak, positionering en formaateigen inhoud zijn uit een CSV-bestand niet terug te bouwen, omdat er niets in staat wat ze waren.
Blijft de tekencodering van het TTML-bestand in CSV behouden?
Nee, de uitvoer is UTF-8 met Unix-regeleinden en zonder byteordemarkering, ongeacht de codering van het TTML-bestand. Een afwijkende codering wordt bij het inlezen omgezet; de CSV-uitvoer is altijd gelijk.