Siirry pääsisältöön
SubtitleMatrix

Muunna TTML muotoon JSON

MuunnoksetTTML / DFXP
Tai liitä tekstityksen teksti

Mitä tämä muunnos muuttaa

1 asia pudotetaan tai vaatii päätöksen

  • Muotokohtainen sisältö

    sisältö, jonka lähdemuoto pitää alaotsikoidensa ulkopuolella (ei-alaotsikkolohkot, otsikkoteksti, alaotsikkokohtaiset asetukset, kommentoidut tapahtumat) — kohdemuodossa ei ole sille paikkaa

Tämä luettelo tulee näiden kahden muodon kyvykkyysmatriisista, ei lataamastasi tiedostosta. Tietty tiedosto voi menettää enemmän, jos se käyttää ominaisuuksia, jotka muoto sallii mutta matriisi ei mallinna.

Kun TTML muunnetaan JSONiksi, jokainen TTML-tiedoston alaotsikko kirjoitetaan uudelleen muotoon, jossa yksi alaotsikko on cues-taulukon alkio, jossa on start-, end- ja lines-kentät. Aikakoodi vaihtaa muotoa: TTML kirjoittaa sen muodossa begin="00:00:01.000" end="00:00:03.500", JSON puolestaan muodossa {"start": 1000, "end": 3500}. Sanoja ei muuteta, vaan TTML-tiedoston teksti siirretään JSONiin sellaisenaan.

Tässä suunnassa TTML-tiedostosta putoaa alaotsikoiden ulkopuolinen sisältö, kun se muunnetaan JSONiksi. Kun TTML muunnetaan JSONiksi, kohteen ulkopuolelle jäävät prologi, head-osion tyylitaulu ja alueet sekä div-rakenne. Luettelo on näkyvissä ennen kuin valitset TTML-tiedoston, ja se tarkentuu JSON-muunnoksen lukemisen jälkeen.

Eräajossa TTML-tiedostot jonottuvat ja valmistuvat yksi kerrallaan; keskeytys toimii kesken JSON-muunnoksen ja tulokset pakataan yhdeksi ZIP-tiedostoksi. Mitään ei lähetetä palvelimelle: koko TTML-muunnos JSONiksi tapahtuu omalla koneellasi.

Esimerkit

Tyypillinen TTML-tiedosto muunnettuna JSONiksi

Syöte

<?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>

Tuotos

{
  "version": 1,
  "cues": [
    {
      "start": 1000,
      "end": 3500,
      "lines": [
        {
          "text": "Hello there.",
          "tags": [
            {
              "kind": "italic",
              "start": 6,
              "end": 11
            }
          ]
        }
      ]
    },
    {
      "start": 3500,
      "end": 6000,
      "lines": [
        "How are you?",
        "Fine, thanks."
      ]
    }
  ]
}

Tästä TTML → JSON -tulosteesta puuttuvat muotokohtainen sisältö. Kaikki muu vastaa rivi riviltä.

Sama TTML → JSON -muunnos hankalalla aineistolla

Syöte

<?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>

Tuotos

{
  "version": 1,
  "cues": [
    {
      "start": 1500,
      "end": 3500,
      "lines": [
        "Loaded from an offset and a duration."
      ]
    },
    {
      "start": 4000,
      "end": 6500,
      "lines": [
        "A coarser clock spelling."
      ]
    },
    {
      "start": 7000,
      "end": 8480,
      "lines": [
        "Frames, at 25fps."
      ]
    },
    {
      "start": 9000,
      "end": 11000,
      "lines": [
        {
          "text": "Half-open and Tom &amp; Jerry.",
          "tags": [
            {
              "kind": "color",
              "start": 0,
              "end": 9,
              "value": "#FF0000"
            }
          ]
        }
      ]
    }
  ]
}

Näin rikkinäinen TTML-tiedosto saapuu JSON-muunnokseen: BOM-merkintä, Windows-rivinvaihdot ja lukukelvottomat aikakoodit eivät kaada jäsennintä. Vertaa sitä yllä olevaan siistiin esimerkkiin ja katso, mitä JSON saa mukaansa.

Usein kysytyt kysymykset

Mitä aikaleimoille tapahtuu, kun TTML muunnetaan JSONiksi?

TTML kirjoittaa ajan muodossa begin="00:00:01.000" end="00:00:03.500": XML-määritteinä millisekunnin tarkkuudella. JSON käyttää muotoa {"start": 1000, "end": 3500}, eli kokonaislukuina millisekunteina. Tarkkuus on molemmilla puolilla sama, joten aika itse ei muutu – vain sen kirjoitusasu vaihtuu.

Mitä kaikkea TTML-tiedostosta jää pois JSONissa?

Kun TTML muunnetaan JSONiksi, menetettävää on alaotsikoiden ulkopuolinen sisältö. Kun TTML muunnetaan JSONiksi, kohteen ulkopuolelle jäävät prologi, head-osion tyylitaulu ja alueet sekä div-rakenne. Alaotsikoiden teksti ja keskinäinen järjestys säilyvät.

Entä lihavointi, kursivointi ja väri – säilyvätkö ne TTML:stä JSONiin?

TTML merkitsee rivinsisäisen muotoilun muodossa <span>-elementit ja <br/>, ja JSON kirjoittaa sen muodossa merkkirajoina tallennetut tagit.

Mitä rivinvaihdoille tapahtuu, kun TTML muunnetaan JSONiksi?

Monirivisen alaotsikon rivit erotetaan TTML:ssä <br/>-elementillä, ja JSON merkitsee ne lines-taulukon erillisinä alkioina. JSON:ssa rivit ovat lines-taulukon alkioita, joten rakenne säilyy täsmälleen.

Mitä TTML:n prologille ja head-osion tyylitaululle tapahtuu JSONissa?

TTML:n runko koostuu prologista, head-osion tyylitaulusta ja alueista sekä div-rakenteesta. JSON ei tunne niitä, joten ne jäävät pois; p-elementtien teksti ja begin/end-ajat säilyvät.

Voiko JSON-tiedoston muuntaa takaisin TTML:ksi?

Kyllä, mutta paluusuunnassa menetettävää on: karaoken ajoitus. Kun JSON muunnetaan TTML:ksi, tavukohtainen korostus ei siirry, koska TTML ei tunne karaokea. Edestakainen matka TTML:stä JSONiin ja takaisin ei palauta sitä, mitä ensimmäinen muunnos pudotti.

Lähetetäänkö TTML-tiedostoni palvelimelle, kun teen JSON-muunnosta?

Ei. Jono käsittelee TTML-tiedostot yksi kerrallaan, ajon voi keskeyttää milloin tahansa ja tulokset tulevat yhtenä ZIP-tiedostona. Jokainen JSON-tiedosto kirjoitetaan selaimessa, joten mitään ei lähetetä palvelimelle; yksittäinen tekstitystiedosto saa olla enintään 64 Mt.

Aiheeseen liittyvät työkalut