Andare al contenuto principale
SubtitleMatrix

Convertire ASS in TTML

Conversione dei formatiAdvanced SubStation Alpha (ASS)
Oppure incollare il testo dei sottotitoli

Cosa cambia questa conversione

2 elementi vengono scartati o richiedono una decisione

  • Karaoke

    la temporizzazione karaoke (evidenziazione per sillaba)

  • Contenuto specifico del formato

    il contenuto che il formato di partenza tiene fuori dai suoi blocchi (blocchi non-cue, testo di intestazione, impostazioni per blocco, eventi commentati) — il formato di destinazione non ha un posto per esso

Questo elenco deriva dalla matrice delle capacità di questi due formati, non dal particolare file caricato. Un file specifico può perdere di più se usa caratteristiche che il formato consente ma la matrice non modella.

Questa pagina converte un copione ASS in TTML, il formato XML usato dalle piattaforme di streaming e dalle norme di accessibilità. Ogni riga Dialogue diventa un elemento <p> con gli attributi begin ed end, annidato in un <body>, con una dichiarazione XML sopra il documento.

I tempi restano al millisecondo: 0:00:04.13 diventa 00:00:04.126, cioè lo stesso istante con un’altra precisione di scrittura, e le due righe di un blocco restano due, separate da <br/>. Il karaoke perde i tempi e conserva le sillabe come parole. Le sezioni fuori dagli eventi — [Script Info] con il titolo, la tabella di stile, le righe Comment:, i caratteri in [Fonts] e i disegni in [Graphics] — vengono scartate, perché TTML descrive sottotitoli e non un copione con risorse incorporate.

Un file o un’intera stagione, con l’ordine dei blocchi ripristinato per tempo di inizio; la conversione gira nel browser e l’output è sempre UTF-8 senza BOM.

Esempi

Un file ASS tipico, convertito in TTML

Ingresso

[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

Uscita

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

In questo output si perdono: il karaoke e i contenuti specifici del formato. Il resto corrisponde riga per riga.

La stessa conversione su un input irregolare

Ingresso

[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

Uscita

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

Il secondo esempio contiene un BOM, commenti e un evento con un tempo malformato: il parser li segnala e produce comunque un documento TTML ordinato.

Domande frequenti

Che fine fa il karaoke da ASS a TTML?

Il tempo sparisce, le parole restano: `\k`, `\kf` e `\ko` non hanno corrispondente in TTML, e le sillabe arrivano come testo normale, senza accensione progressiva.

Che fine fanno [Script Info] e il resto del copione nel TTML?

Solo le righe `Dialogue:` diventano sottotitoli. `[Script Info]` (titolo compreso), la tabella di stile, le righe `Comment:` e ciò che è incorporato in `[Fonts]` o `[Graphics]` vengono scartati.

Che aspetto ha l’output quando ASS diventa TTML?

Il documento esce come XML: ogni riga Dialogue diventa un `<p>` con `begin` ed `end` dentro un `<body>`, e sopra il documento compare la dichiarazione XML.

I tempi ASS sono esatti nel file TTML?

Sì, al millisecondo: ASS scrive `0:00:04.13` e TTML scrive `00:00:04.126`, cioè lo stesso istante con un’altra precisione di scrittura. Nulla viene arrotondato e un blocco visibile per 2,9 secondi resta tale.

Come esce un blocco ASS di due righe in TTML?

Come due righe dentro lo stesso `<p>`, separate da `<br/>`: l’accoppiamento resta e il lettore le mostra insieme.

Gli eventi ASS restano in ordine nel TTML?

Sì: il documento TTML viene emesso in ordine di tempo, anche se gli eventi Dialogue non lo erano. Il testo non viene toccato, cambia solo la sequenza.

Posso riconvertire il TTML in ASS?

Sì, e quella direzione perde precisione e contenuti specifici del formato: TTML non ha tabella di stile né codici di override da riportare.

L’output TTML mantiene la codifica del file ASS?

No: il TTML esce in UTF-8, con fine riga Unix e senza BOM. Una codifica diversa in ingresso viene decodificata e la cosa viene annotata nel pannello.

Strumenti correlati