Lompat ke konten utama
SubtitleMatrix

Konversi ASS ke TTML

Konversi formatAdvanced SubStation Alpha (ASS)
Atau tempel teks subtitle

Apa yang berubah dalam konversi ini

2 hal dihapus atau memerlukan keputusan

  • Karaoke

    timing karaoke (penyorotan per suku kata)

  • 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 halaman ini skrip ASS diubah menjadi TTML, format subtitle berbasis XML untuk penyiaran dan platform streaming. Setiap event Dialogue menjadi elemen <p> dengan atribut begin dan end, dan waktu ditulis 00:00:04.120 — nilai yang sama sampai milidetik, hanya notasi ASS yang diperluas menjadi jam, menit, detik, dan milidetik.

Dua hal hilang: karaoke dan isi khas format. Karaoke karena TTML tidak punya cara menyatakan waktu per suku kata di dalam satu baris; teksnya tetap utuh, tetapi sorotan bertiming tidak bisa dibawa. Isi khas format karena [Script Info], Comment:, [Fonts], dan [Graphics] berada di luar cue dan tidak punya padanan. Styling dan positioning tidak masuk daftar itu: keduanya punya kendaraan di TTML.

Cue dua baris menjadi dua baris dengan <br/>, dan urutan cue mengikuti waktu mulai. Satu file atau satu musim, antrean bisa dihentikan, hasil dalam satu ZIP, dan tidak ada yang keluar dari perangkat Anda.

Contoh

File ASS biasa, dikonversi ke TTML

Masukan

[Script Info]
Title: Example
ScriptType: v4.00+
WrapStyle: 0

[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
Style: Title,Arial,36,&H0000FFFF,&H000000FF,&H00000000,&H00000000,-1,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:04.00,Default,,0,0,0,,Hello there.
Dialogue: 0,0:00:05.00,0:00:08.50,Default,,0,0,0,,{\i1}Italic{\i0} and {\b1}bold{\b0} text.
Dialogue: 0,0:00:09.00,0:00:12.00,Title,,0,0,0,,{\pos(320,240)}Positioned
Dialogue: 0,0:00:13.00,0:00:16.00,Default,,0,0,0,,{\k50}ka{\k30}ra{\k20}o{\k10}ke
Dialogue: 0,0:00:17.00,0:00:20.00,Default,,0,0,0,,Line one\NLine two
Dialogue: 1,0:00:21.00,0:00:24.00,Default,,0,0,0,,{\an7}Top left

Keluaran

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <body>
<p begin="00:00:01.000" end="00:00:04.000">Hello there.</p>
<p begin="00:00:05.000" end="00:00:08.500"><span tts:fontStyle="italic">Italic</span> and <span tts:fontWeight="bold">bold</span> text.</p>
<p begin="00:00:09.000" end="00:00:12.000">Positioned</p>
<p begin="00:00:13.000" end="00:00:16.000">karaoke</p>
<p begin="00:00:17.000" end="00:00:20.000">Line one<br/>Line two</p>
<p begin="00:00:21.000" end="00:00:24.000">Top left</p>  </body>
</tt>

Yang hilang pada hasil ini: karaoke dan isi khas format. Sisanya sama baris demi baris.

Konversi yang sama pada input yang berantakan

Masukan

[Script Info]
; 一份真实的脏文件:BOM + CRLF + 认不出的覆写码 + Comment + 坏时间码
Title: Dirty sample
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,1,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1

[Fonts]
fontname: Arial
!!!!!!!!!!!!!!!!!!!!!!!!!!!!

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Comment: 0,0:00:00.00,0:00:01.00,Default,,0,0,0,,这是一条注释,不该变成字幕
Dialogue: 0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello, world
Dialogue: 0,0:00:05.00,0:00:08.00,Default,,0,0,0,,{\fad(300,300)}Unmodelled override
Dialogue: 0,0:00:09.00,0:00:12.00,Default,,0,0,0,,{\an7\pos(320,240)}Both, wrong order
Dialogue: 0,0:00:13.00,0:00:16.5,Default,,0,0,0,,One decimal centisecond
Dialogue: 0,0:00:17.00,0:00:20.00,Default,,0,0,0,,Soft\nbreak
Dialogue: 0,0:00:xx.00,0:00:24.00,Default,,0,0,0,,Broken timecode

Keluaran

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <body>
<p begin="00:00:01.000" end="00:00:04.000">Hello, world</p>
<p begin="00:00:05.000" end="00:00:08.000">{\fad(300,300)}Unmodelled override</p>
<p begin="00:00:09.000" end="00:00:12.000">Both, wrong order</p>
<p begin="00:00:13.000" end="00:00:16.500">One decimal centisecond</p>
<p begin="00:00:17.000" end="00:00:20.000">Soft<br/>break</p>  </body>
</tt>

Ini jenis kerusakan yang nyata pada file asli — akhir baris campuran, spasi berlebih, kolom kosong. Bandingkan dengan contoh rapi di atas untuk melihat apa yang dimaafkan parser.

Pertanyaan yang sering diajukan

Apa yang terjadi pada timing karaoke dari ASS ke TTML?

Hilang sebagai timing. TTML mengatur tampil lewat atribut begin dan end per elemen, dan konversi ini tidak mengarang elemen per suku kata. Suku kata tetap ada sebagai teks, tetapi sorotan yang mengikuti nyanyian tidak bisa dinyatakan.

Apa yang terjadi pada [Script Info] dan bagian lain skrip ASS di TTML?

Semuanya dibuang. [Script Info] adalah konfigurasi skrip, baris Comment: adalah catatan penulis, dan [Fonts] serta [Graphics] adalah lampiran untuk renderer. TTML punya model dokumen XML sendiri yang tidak menampungnya.

Seperti apa keluaran saat ASS menjadi TTML?

Seperti TTML: tanpa header skrip, setiap subtitle adalah elemen <p> dengan atribut begin dan end, di dalam <body> dan biasanya <div>, dengan deklarasi XML di atasnya. Setiap event Dialogue menjadi satu cue TTML.

Apakah waktu ASS tetap persis di file TTML?

Ya, sampai milidetik. ASS menulis 0:00:04.12 — 4120 milidetik — dan TTML menulis 00:00:04.120. Tidak ada pembulatan atau pergeseran yang ditambahkan.

Bagaimana cue ASS dua baris keluar di TTML?

Sebagai dua baris dengan <br/> di antaranya, cara TTML menulis baris baru keras. Kode pemisah baris ASS diterjemahkan menjadi elemen itu, dan pasangannya bertahan dalam satu subtitle.

Apakah cue ASS tetap berurutan di keluaran TTML?

Ya, dan cue diurutkan menurut waktu mulai. Urutan event di skrip bisa tidak kronologis; TTML mengembalikannya ke urutan waktu, dan itu perubahan struktur, bukan isi.

Bisakah TTML hasil konversi ASS ini diubah kembali menjadi ASS?

Bisa lewat halaman TTML ke ASS, dan arah balik punya daftar sendiri: karaoke dan isi khas format tidak bisa dipulihkan. Yang kembali adalah event dengan waktu, teks, dan gaya yang dikenali pembaca TTML.

Apakah keluaran TTML mempertahankan encoding file ASS saya?

Tidak. Dokumen TTML selalu UTF-8 tanpa byte-order mark, dengan akhir baris Unix. Encoding ASS yang berbeda didekode saat file dibaca.

Alat terkait