Lompat ke konten utama
SubtitleMatrix

Konversi TTML ke ASS

Konversi formatTTML / DFXP
Atau tempel teks subtitle

Apa yang berubah dalam konversi ini

2 hal dihapus atau memerlukan keputusan

  • Presisi

    presisi waktu — jam keluaran lebih kasar, sehingga setiap stempel waktu dibulatkan ke 10 ms terdekat

  • 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.

Halaman ini mengonversi TTML ke ASS. Seret file ke sini — atau tempel teksnya — dan Anda mendapat versi ASS kembali. Konversi berjalan sepenuhnya di peramban Anda, jadi tidak ada yang diunggah dan tidak perlu akun.

Kedua format ini tidak menyimpan hal yang sama, dan perbedaannya bukan sekadar kosmetik: konten khusus format tidak punya tempat di ASS; nilai yang lebih halus dari 10 ms dibulatkan, karena ASS menyimpan waktu dalam langkah 10 ms. 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. Daftar di atas berasal dari apa yang dapat diekspresikan masing-masing format, bukan dari file Anda, jadi jawabannya sama sebelum Anda memuat apa pun.

Satu file tidak masalah, begitu juga satu musim penuh: antrean memprosesnya secara berurutan dan hasilnya diunduh bersama sebagai satu ZIP.

Contoh

File TTML umum, dikonversi ke ASS

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

[Script Info]
ScriptType: v4.00+

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:03.50,Default,,0,0,0,,Hello {\i1}there{\i0}.
Dialogue: 0,0:00:03.50,0:00:06.00,Default,,0,0,0,,How are you?\NFine, thanks.

Yang hilang pada keluaran ini: presisi dan 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 &amp; Jerry.</p>
    </div>
  </body>
</tt>

Keluaran

[Script Info]
ScriptType: v4.00+

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.50,0:00:03.50,Default,,0,0,0,,Loaded from an offset and a duration.
Dialogue: 0,0:00:04.00,0:00:06.50,Default,,0,0,0,,A coarser clock spelling.
Dialogue: 0,0:00:07.00,0:00:08.48,Default,,0,0,0,,Frames, at 25fps.
Dialogue: 0,0:00:09.00,0:00:11.00,Default,,0,0,0,,{\c&H000000FF&}Half-open{\c} and Tom &amp; Jerry.

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

Mengapa stempel waktu bergeser dari TTML ke ASS?

ASS menyimpan waktu sebagai `0:00:04.13` sedangkan TTML menyimpannya sebagai `00:00:04.126` — seperseratus detik versus seperseribu — jadi setiap timecode dibulatkan ke 10 ms terdekat: 00:00:04,126 menjadi 4,13 detik. Tidak ada yang diregangkan atau diurutkan ulang dan tidak ada cue yang bergeser lebih dari 5 ms, tetapi jika Anda menyelaraskan subtitle ini dengan file lain, di situlah konversi ini berhenti eksak.

Apa yang terjadi pada prolog TTML serta tabel `<styling>` dan `<layout>` di ASS?

Dibuang. 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. ASS menyimpan cue, bukan dokumen, jadi tidak ada bagian dari head itu yang punya tempat mendarat. Pemformatan yang ditulis di dalam paragraf adalah hal lain — `<span tts:fontStyle="italic">` adalah penekanan pada kata-kata, dan ditulis dengan markup ASS sendiri sejauh ASS memilikinya.

Seperti apa keluarannya ketika TTML menjadi ASS?

Keluaran ASS disusun seperti ASS — tanpa nomor cue: setiap subtitle adalah baris `Dialogue:` di bagian `[Events]`, dengan kolom layer di tempat SRT menyimpan nomor. Cue yang di TTML ditulis `00:00:04.126` menjadi cue yang di ASS ditulis `0:00:04.13`, dalam urutan yang sama, dan tidak ada teks yang berubah.

Bagaimana cue TTML dua baris keluar di ASS?

Dua baris TTML menjadi dua baris dengan `\N` di antaranya, cara ASS menulis pemisah baris keras. Pasangannya bertahan — keduanya tetap menjadi satu subtitle di keluaran ASS, dan pemutar menampilkannya bersama.

Apakah cue TTML mempertahankan urutannya di keluaran ASS?

Ya, dan cue diurutkan berdasarkan waktu mulai saat proses — paling awal dulu, seperti yang diharapkan setiap format di sini dan cara pemutar membacanya. Jika file TTML Anda mencantumkan cue di luar urutan, keluaran ASS mengembalikannya ke urutan; itu perubahan pada struktur file, bukan isinya, dan disengaja.

Bisakah ASS dikonversi balik ke TTML?

Ya, dan arah itu punya daftarnya sendiri: mengonversi ASS ke TTML menghilangkan karaoke dan konten khusus format. Daftar itu berbeda dari daftar di atas karena kedua format menyimpan hal yang berbeda.

Apakah keluaran ASS 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 ASS UTF-8 yang sama.

Alat terkait