Konversi TTML ke JSON
Atau tempel teks subtitle
Apa yang berubah dalam konversi ini
1 hal dihapus atau memerlukan keputusan
- Konten khusus format
konten yang disimpan format sumber di luar cue-nya (blok non-cue, teks header, pengaturan per cue, event yang dikomentari) — format tujuan tidak punya tempat untuknya
Daftar ini berasal dari matriks kemampuan untuk kedua format ini, bukan dari file tertentu yang Anda muat. File tertentu bisa kehilangan lebih banyak jika memakai fitur yang diizinkan format tetapi tidak dimodelkan matriks.
Di sini Anda dapat mengonversi TTML ke JSON: seret satu file atau tempel teks, lalu unduh hasil JSON. Pemrosesan sepenuhnya lokal di peramban — tidak ada file yang diunggah dan tidak perlu akun.
Perbedaan kedua format ini bukan soal tampilan: konten khusus format tidak punya tempat di JSON. TTML adalah dokumen XML dengan namespace `tts:` untuk gaya dan `ttp:` untuk parameter profil: `<head>` mendeklarasikan gaya bernama di `<styling>` dan region di `<layout>`, sedangkan elemen `<p>` adalah subtitlenya dan waktu ditulis hingga milidetik. JSON menyimpan setiap cue sebagai objek dengan `id`, `start`, dan `end` dalam milidetik. Karena daftar di atas berasal dari model kemampuan format, daftar itu sudah final bahkan sebelum Anda menyeret file.
Batch juga didukung: antrean memproses setiap file secara berurutan, lalu seluruh hasil dikemas sebagai satu ZIP.
Contoh
File TTML umum, dikonversi ke JSON
Masukan
<?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>
Keluaran
{
"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."
]
}
]
}
Yang hilang pada keluaran ini: konten khusus format. Sisanya cocok baris demi baris.
Konversi yang sama pada input berantakan
Masukan
<?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>
Keluaran
{
"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 & Jerry.",
"tags": [
{
"kind": "color",
"start": 0,
"end": 9,
"value": "#FF0000"
}
]
}
]
}
]
}
Inilah jenis kerusakan yang ada pada file nyata — byte-order mark, akhir baris Windows, namespace yang tidak dikenal, atau atribut waktu yang tidak terbaca. Bandingkan dengan contoh rapi di atas untuk melihat apa yang dimaafkan parser.
Pertanyaan yang sering diajukan
Apa yang terjadi pada prolog TTML serta tabel `<styling>` dan `<layout>` di JSON?
Dibuang, dengan satu pengecualian yang tepat. File TTML menyimpan tampilan dan tata letaknya di head, bukan di kata-kata: deklarasi XML dan pengikatan namespace-nya, tabel `<styling>` berisi gaya bernama (`tts:color`, `tts:fontWeight`), tabel `<layout>` berisi region bernama (`tts:origin`, `tts:extent`), `<metadata>` apa pun, dan atribut `style` / `region` yang dipakai `<p>` untuk merujuknya. Keluaran JSON memang punya objek `styles` dan `tags` per baris, dan pemformatan yang ditulis di dalam paragraf (`<span tts:fontStyle="italic">`) adalah bagian dari baris, jadi itu ikut tiba — di array `tags`. Tidak ada bagian dari head yang diterjemahkan ke objek `styles`, sehingga objek itu keluar kosong.
Seperti apa keluarannya ketika TTML menjadi JSON?
Keluaran JSON disusun seperti JSON — array objek cue, masing-masing dengan `id`, `start`, dan `end` miliknya. Cue yang di TTML ditulis `00:00:04.126` menjadi cue yang di JSON ditulis `4126`, dalam urutan yang sama, dan tidak ada teks yang berubah.
Apakah timing TTML akurat di file JSON?
Ya, hingga milidetik — serinci yang bisa dicapai kedua format. TTML menulis satu momen sebagai `00:00:04.126` dan JSON menulis momen yang sama sebagai `4126`; tidak ada yang dibulatkan atau digeser di antara keduanya, dan cue yang tampil selama 2,9 detik tetap begitu.
Bagaimana cue TTML dua baris keluar di JSON?
Dua baris TTML menjadi dua entri dalam array `lines` milik cue. Pasangannya bertahan — keduanya tetap menjadi satu subtitle di keluaran JSON, dan pemutar menampilkannya bersama.
Apakah cue TTML mempertahankan urutannya di keluaran JSON?
Urutannya dipertahankan, tetapi dirapikan: cue diurutkan menurut waktu mulai, paling awal lebih dulu. Susunan itu yang diharapkan setiap format di sini dan yang dibaca pemutar. Kalau file TTML semula tidak berurutan, keluaran JSON mengembalikannya ke urutan yang benar — perubahan struktur, bukan isi.
Bisakah JSON dikonversi balik ke TTML?
Ya, dan arah itu punya daftarnya sendiri: mengonversi JSON ke TTML menghilangkan karaoke. Daftar itu berbeda dari daftar di atas karena kedua format menyimpan hal yang berbeda.
Apakah keluaran JSON mempertahankan encoding file TTML?
Tidak — keluarannya UTF-8, dengan akhir baris Unix dan tanpa byte-order mark, apa pun yang dipakai file TTML. File yang datang dalam UTF-16 atau encoding satu-byte Windows didekode saat masuk (panel hasil memberi tahu bila itu terjadi); yang keluar selalu JSON UTF-8 yang sama.