ASS를 TTML로 변환
또는 자막 텍스트를 붙여넣으세요
이 변환에서 달라지는 것
2가지가 버려지거나 결정이 필요합니다
- 가라오케
가라오케 타이밍(음절 단위 강조)
- 형식 고유 내용
원본 형식이 자막 블록 밖에 두는 내용(자막 블록이 아닌 구획, 머리말 텍스트, 자막 블록별 설정, 주석 처리된 이벤트) — 대상 형식에는 들어갈 자리가 없습니다
이 목록은 불러온 특정 파일이 아니라 두 형식의 기능 행렬에서 나옵니다. 어떤 파일은 형식이 허용하지만 행렬이 모델링하지 않는 기능을 쓰고 있다면 더 많이 잃을 수 있습니다.
이 페이지는 ASS 스크립트를 TTML로 바꿉니다. TTML은 XML로 자막을 적는 방송·스트리밍 표준 형식으로, 배치와 스타일을 표현할 수 있습니다. 그래서 ASS의 스타일과 위치가 이 방향에서는 살아남습니다.
ASS의 0:00:08.50은 begin="00:00:08.500" end="..."이 됩니다. 굵게·기울임은 span의 tts:fontWeight·tts:fontStyle로, 두 줄은 <br/>로 적히고, 각 큐는 begin·end를 가진 <p>가 됩니다.
사라지는 것은 카라오케의 음절별 타이밍과 cue 모델 밖의 구성([Script Info], [Fonts]·[Graphics], Comment: 줄)입니다. 스타일과 위치는 TTML이 표현할 수 있어 손실 목록에 없습니다.
한 파일도 시즌 전체도 됩니다. 순서대로 처리되고 중간에 취소할 수 있으며 ZIP 하나로 내려옵니다. 브라우저 안에서 변환되어 업로드가 없습니다.
TTML은 방송·스트리밍 파이프라인에서 자막 교환 형식으로 쓰입니다. 스타일과 위치를 속성으로 옮기므로, 대상 플레이어가 그 속성을 실제로 읽는지 확인하세요.
예시
전형적인 ASS 파일을 TTML로 변환
입력
[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
결과물
<?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>
이 출력에서 빠진 것: 카라오케, 형식 고유 구성. 나머지는 줄 단위로 일치합니다.
같은 변환을 지저분한 입력으로
입력
[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결과물
<?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>
실제 파일에 흔한 손상입니다. 줄 바꿈이 섞이고, 공백이 남고, 필드가 비어 있습니다. 위의 깔끔한 예와 비교해 해석기가 무엇을 용서하는지 보세요.
자주 묻는 질문
ASS를 TTML로 바꾸면 무엇이 사라지나요?
카라오케와 cue 모델 밖의 구성입니다. \k 계열의 음절별 타이밍, [Script Info]·[Fonts]·[Graphics]·Comment: 줄이 TTML에 자리가 없습니다. 스타일(굵게·기울임·색)과 화면 위치는 TTML이 표현할 수 있어 손실 목록에 없습니다.
ASS의 시간은 TTML에서 어떻게 적히나요?
ASS의 0:00:08.50(1/100초)을 TTML의 begin="00:00:08.500" end="..."(1/1000초)로 바꿉니다. 100분의 1초에 10을 곱하므로 밀리초까지 정확하고, 큐의 표시 시간도 그대로입니다.
ASS에서 만든 TTML 파일은 어떤 모양인가요?
XML 선언 아래 <tt><body>가 오고, 큐마다 begin·end 속성을 가진 <p> 요소가 들어갑니다. 굵게·기울임은 span의 tts:fontWeight·tts:fontStyle으로, 두 줄은 <br/>로 적힙니다.
ASS를 TTML로 바꾸면 카라오케 음절은 어떻게 되나요?
음절 글자는 남고 타이밍만 사라집니다. \k50 같은 값이 각 음절의 점등 시점을 정했지만 TTML에는 줄 안의 시점을 기록할 자리가 없어, 음절은 일반 텍스트로 들어갑니다.
ASS의 스타일 표는 TTML에 어떻게 반영되나요?
큐에 적용된 굵게·기울임·색 같은 표현은 span이나 스타일 속성으로 옮겨집니다. 모든 스타일 행을 TTML의 스타일 시트로 그대로 복제하지는 않으며, 이름 붙은 스타일 자체는 큐 밖 구성으로 정리됩니다.
화면 위치도 TTML에 남나요?
남습니다. TTML은 배치를 표현할 수 있어 이 방향의 손실 목록에 위치가 없습니다. 다만 \pos·\an 코드가 TTML에 문자 그대로 남지는 않으므로, 대상 플레이어에서 배치를 확인하세요.
TTML을 다시 ASS로 바꿀 수 있나요?
가능하지만 TTML→ASS는 정밀도와 cue 모델 밖 구성을 보고합니다. TTML의 밀리초를 ASS의 1/100초로 반올림하며 최대 5ms 어긋나고, 이 페이지에서 버린 카라오케는 되살아나지 않습니다.
ASS 큐의 순서는 TTML에서 유지되나요?
네. 시작 시간이 빠른 순으로 정렬되고, 원본이 순서를 벗어나 있었다면 출력에서 바로잡힙니다. 내용이 아니라 구조의 변경이며 의도된 동작입니다.