Timed Text Markup Language
W3C의 자막 및 캡션용 XML이며, 방송사와 스트리밍 서비스가 요구하는 형식입니다. DFXP는 첫 번째 프로필의 이름이었고, 지금도 많은 파일이 그 이름을 씁니다. IMSC, EBU-TT-D, Apple의 iTT도 모두 TTML이며, 각각 고유한 관습이 있습니다.
한눈에 보기
| 확장자 | .ttml |
|---|---|
| 미디어 타입 | application/ttml+xml |
| 사양 | W3C, Timed Text Markup Language 1 (TTML1), 권고안. TTML2가 이를 확장하며, IMSC와 EBU-TT-D는 배포용 부분 집합입니다. |
| 시간 정밀도 | 제한 없음: 초의 소수점, 프레임 또는 틱 |
| 텍스트 인코딩 | XML에 선언됨. 거의 항상 UTF-8. |
| 스타일 | 이름 있는 스타일과 tts: 속성: 글꼴, 크기, 색상, 배경, 기울임꼴, 굵게, 밑줄, 취소선, 외곽선 |
| 위치 | 영역: 화면 어디에든 놓고 크기를 정할 수 있는 상자 |
| 화자 | 에이전트(ttm:agent), 헤드에 이름이 지정됨 |
| 컨테이너 | MP4에서는 stpp(ISO/IEC 14496-30), DASH, CMAF, HLS 스트림 안에 |
파일의 구조
XML 문서입니다. 스타일과 영역을 이름으로 정하는 head와, 자막마다 하나씩 있는 단락으로 이루어진 body가 있습니다.
<tt xml:lang="en" …> <head>styles, regions</head> <body><div> <p begin="00:00:23.000" end="00:00:24.500"> You're a jerk,<br/>Thom.</p> </div></body> </tt>
- 1 · 루트
<tt>로, TTML의 네임스페이스, 언어, 그리고 시간을 세는 기준인 클록을 담습니다:ttp:frameRate,ttp:tickRate. - 2 · 헤드
이름 있는 스타일, 화면의 영역, 그리고 누가 말하는지.
- 3 · 시간
각 단락의
begin과end또는dur. - 4 · 텍스트
자막입니다. 스타일이 적용되는 부분은 span으로 감싸며,
<br/>는 줄을 나눕니다.
시간
TTML은 다른 어떤 자막 형식보다 많은 방식으로 시간을 씁니다:
| 표기 | 의미 |
|---|---|
00:00:23.500 |
시, 분, 초와 소수 |
00:00:23:12 |
초 뒤의 프레임 수: 파일의 ttp:frameRate에서 12 프레임 |
23.5s, 23500ms, 1h |
시, 분, 초 또는 밀리초 단위의 오프셋 |
564f |
프레임 |
235000000t |
틱, 초당 ttp:tickRate개 |
시간은 그것을 담는 요소에서부터 셉니다. 단락의 begin은 그것이 들어 있는 <div>와 <body>에서부터 세며, 자체 끝 시간이 없는 단락은 그 요소들과 함께 끝납니다.
스타일
스타일은 tts: 속성의 집합입니다. 텍스트는 영역에서부터, 그다음 주변의 body, div, 단락, span 순서로 속성을 받습니다. 각 요소는 자신이 이름으로 지정한 스타일(style="s1 s2"와 그 스타일이 가리키는 것들)을 받은 뒤, 자신의 속성을 적용합니다.
| 속성 | 효과 | Subtitld에서 |
|---|---|---|
tts:fontStyle="italic" |
기울임꼴 | 유지 |
tts:fontWeight="bold" |
굵게 | 유지 |
tts:textDecoration="underline", "lineThrough" |
밑줄, 취소선 | 유지 |
tts:color |
텍스트 색상: 이름, #rrggbb, #rrggbbaa 또는 rgb() |
유지, 투명도는 제외 |
tts:displayAlign, tts:textAlign |
영역 안에서 텍스트가 놓이는 위치 | 아홉 위치 중 하나로 유지 |
tts:fontFamily, tts:fontSize |
글꼴과 크기 | 유지되지 않음 |
tts:backgroundColor, tts:textOutline |
텍스트 뒤의 상자, 외곽선 | 유지되지 않음 |
<set> |
시간에 따라 바뀌는 스타일 | 유지되지 않음 |
영역
영역은 화면 위의 상자이며, tts:origin으로 놓이고 tts:extent로 크기가 정해집니다. 그 안에서 tts:displayAlign은 텍스트를 위, 가운데, 아래(before, center, after)에 두고, tts:textAlign은 한쪽 또는 가운데로 정렬합니다.
<region xml:id="top"
tts:origin="10% 10%"
tts:extent="80% 80%"
tts:displayAlign="before"/>
Subtitld는 텍스트가 어디에 놓이는지 계산하고, 영역이 퍼센트, 픽셀, 셀 중 무엇으로 측정되는지 파악하며, SubRip의 {\an1}부터 {\an9}가 가리키는 아홉 위치 중 가장 가까운 곳을 택합니다. 파일을 쓸 때 사용하는 각 위치는 그 이름의 영역이 됩니다: bottom, top, top-left…
파일이 말하지 않을 때. TTML 자체의 기본값은 텍스트를 영역의 왼쪽 위에 두지만, 플레이어는 아래 가운데에 보여주며 Subtitld도 그렇게 합니다. 또한 크기나 위치가 없는 영역에 있는 textAlign="start"는 가운데 정렬로 읽습니다. pycaption으로 쓰인 파일(구버전 Subtitld가 쓴 것 포함)은 모든 영역에 이를 넣었습니다.
프로필
대부분의 TTML은 프로필에 맞춰 쓰입니다. 프로필은 언어의 부분 집합이며 고유한 규칙이 있습니다. Subtitld는 이들 모두를 TTML로 읽습니다.
| 프로필 | 사용처 | 특징 |
|---|---|---|
| DFXP | TTML의 첫 번째 프로필이며 확장자 .dfxp |
네임스페이스 http://www.w3.org/2006/10/ttaf1을 쓰는 구형 파일 |
| IMSC 1 | DASH, CMAF, HLS를 통한 스트리밍 | 온라인 자막과 캡션을 위한 W3C 프로필 |
| EBU‑TT‑D | 유럽 방송사의 온라인 플레이어 | 요소에 접두사를 붙여 쓰는 경우가 많음: <tt:p> |
| SMPTE‑TT | 미국 TV의 온라인 캡션 | 방송에서 가져온 캡션을 위한 SMPTE의 추가 규격 |
iTT (.itt) |
Apple의 iTunes Store와 Apple TV 납품용 | 프레임 단위 시간(ttp:timeBase="smpte") |
Subtitld의 TTML
- 모든 자막의 텍스트와 줄바꿈
- 기울임꼴, 굵게, 밑줄, 취소선, 색상
- 화면에서의 위치
- 에이전트로 된 화자
- 시작과 끝 시간, 밀리초 단위, 순서대로
- 줄마다의 글꼴, 크기, 배경, 외곽선
- 영역의 정확한 크기와 위치
- 시간에 따라 바뀌는 스타일, 루비, 이미지 자막
- 원문 옆의 번역, 더빙, 화자의 얼굴
.usfx 프로젝트로 저장하면 Subtitld의 고유 요소를 보관할 수 있습니다.
TTML 파일 열기
Subtitld는 .ttml, .dfxp, .itt, .xml을 열며 다음을 수행합니다:
- 어떤 방식으로 쓰였든 TTML을 읽습니다: TTML 네임스페이스, 구형 DFXP 네임스페이스, 또는 모든 요소 앞에
tt:가 붙은 형태; - 시간의 모든 형식을 읽고, 각 시간은 그것이 들어 있는 div와 body에서부터 셉니다;
- TTML이 적용하는 대로 스타일을 따르며, 기울임꼴, 굵게, 밑줄, 취소선, 흰색이 아닌 색상을 유지합니다;
- 각 자막을 영역이 보여주는 위치에 둡니다;
- 에이전트를 더빙에 바로 쓸 수 있는 화자로 취하고, 파일의
xml:lang을 프로젝트의 언어로 삼습니다; - 파일이 선언한 인코딩과
같은 HTML 엔티티를 읽습니다.
올바른 형식의 XML이 아닌 파일은 줄과 열을 알려 주는 메시지와 함께 열립니다. TTML이 전혀 아닌 파일은 그렇다고 알려 줍니다.
TTML 내보내기
Export 다음 Subtitles와 TTML 또는 DFXP를 선택하면 다음 옵션을 제공합니다:
- Text원문, 번역, 또는 둘 다(번역은 아래에 놓입니다).
- Speaker names제외하거나, 텍스트 앞에(Thom: …) 쓰거나, TTML 방식인 에이전트(
ttm:agent)로 씁니다. - Formatting유지하거나 제거합니다.
- Shift times모든 자막을 같은 값만큼 앞이나 뒤로 옮깁니다.
- Look검은 외곽선이 있는 흰색, 또는 Subtitld 미리보기처럼: 글꼴, 색상, 반투명 상자.
파일은 UTF-8의 TTML 1입니다. 시간은 00:00:23.000으로 쓰고, 자막이 놓이는 각 위치는 영역으로, 서식은 span으로, 줄바꿈은 <br/>로 씁니다. xml:lang은 담긴 텍스트의 언어입니다. TTML과 DFXP는 같은 파일이며, 확장자만 다릅니다.
TTML인가 WebVTT인가?
웹 페이지의 <track>에는 WebVTT를 쓰세요. 브라우저가 직접 읽습니다. 방송사, 이를 요구하는 스트리밍 서비스, 그리고 dash.js나 Shaka Player처럼 이를 읽는 플레이어에는 TTML을 쓰세요. 나머지 내용은 WebVTT 페이지에 있습니다.
상식
TTML 1.0은 2010년 11월 W3C 권고안이 되었습니다. 그 전에는 첫 번째 프로필의 이름을 딴 초안들이 있었습니다: Distribution Format Exchange Profile, DFXP.
구형 네임스페이스 http://www.w3.org/2006/10/ttaf1는 TTML이 Timed Text Authoring Format이던 2006년 초안에서 왔습니다. 지금도 많은 파일이 이를 담고 있습니다.
2016년 W3C는 TTML로 Technology & Engineering Emmy를 받았습니다. HBO, Netflix, Telestream, SMPTE와 나란히 받은 상입니다.
관련 형식
Subtitld에서 동영상과 함께 열고, 파형에서 시간을 다시 맞춰 보세요.