Timed Text Markup Language
XML của W3C dành cho phụ đề và chú thích, là định dạng mà đài truyền hình và các dịch vụ phát trực tuyến yêu cầu. DFXP là tên của profile đầu tiên, và nhiều tệp vẫn mang tên đó. IMSC, EBU-TT-D và iTT của Apple cũng là TTML, mỗi loại có thói quen riêng.
Tổng quan
| Phần mở rộng | .ttml |
|---|---|
| Loại phương tiện | application/ttml+xml |
| Đặc tả | W3C, Timed Text Markup Language 1 (TTML1), một Recommendation. TTML2 mở rộng nó; IMSC và EBU-TT-D là các tập con để phân phối. |
| Độ chính xác thời gian | Tùy ý: phần của giây, khung hình hoặc tick |
| Mã hóa văn bản | Được khai báo trong XML. Hầu như luôn là UTF-8. |
| Kiểu chữ | Kiểu được đặt tên và các thuộc tính tts:: phông, cỡ, màu, nền, nghiêng, đậm, gạch chân, gạch ngang, viền |
| Vị trí | Vùng: các hộp được đặt và định kích thước ở bất kỳ đâu trên khung hình |
| Người nói | Agent (ttm:agent), được đặt tên trong phần head |
| Trong container | MP4 dạng stpp (ISO/IEC 14496-30), trong luồng DASH, CMAF và HLS |
Cấu trúc của một tệp
Một tài liệu XML: một head đặt tên cho các kiểu và vùng của màn hình, và một body gồm các đoạn, mỗi đoạn cho một phụ đề.
<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 · Gốc
<tt>, với các namespace của TTML, ngôn ngữ, và đồng hồ mà thời gian được đếm theo:ttp:frameRate,ttp:tickRate. - 2 · Head
Các kiểu được đặt tên, các vùng của màn hình, và ai đang nói.
- 3 · Thời gian
begincủa mỗi đoạn, vàendhoặcdurcủa nó. - 4 · Văn bản
Phụ đề. Thẻ span tạo kiểu cho một phần của nó, và
<br/>ngắt dòng.
Thời gian
TTML viết thời gian theo nhiều cách hơn bất kỳ định dạng phụ đề nào khác:
| Ghi như | Ý nghĩa |
|---|---|
00:00:23.500 |
Giờ, phút, giây và phần lẻ |
00:00:23:12 |
Khung hình sau giây: mười hai khung theo ttp:frameRate của tệp |
23.5s, 23500ms, 1h |
Một khoảng bù theo giờ, phút, giây hoặc mili giây |
564f |
Khung hình |
235000000t |
Tick, có ttp:tickRate tick mỗi giây |
Thời gian được đếm từ phần chứa nó. begin của một đoạn được đếm từ đầu <div> và <body> chứa nó, và một đoạn không có end riêng sẽ kết thúc cùng chúng.
Kiểu
Một kiểu là một tập các thuộc tính tts:. Văn bản nhận chúng theo thứ tự: từ vùng của nó, rồi từ body, div, đoạn và span bao quanh. Mỗi phần tử nhận các kiểu mà nó nêu tên (style="s1 s2", và các kiểu mà chúng nêu tên), rồi đến thuộc tính riêng của nó.
| Thuộc tính | Tác dụng | Trong Subtitld |
|---|---|---|
tts:fontStyle="italic" |
Nghiêng | Được giữ |
tts:fontWeight="bold" |
Đậm | Được giữ |
tts:textDecoration="underline", "lineThrough" |
Gạch chân, gạch ngang | Được giữ |
tts:color |
Màu chữ: một tên, #rrggbb, #rrggbbaa hoặc rgb() |
Được giữ, không kèm độ trong suốt |
tts:displayAlign, tts:textAlign |
Vị trí của văn bản trong vùng | Được giữ, như một trong chín vị trí |
tts:fontFamily, tts:fontSize |
Phông và cỡ chữ | Không được giữ |
tts:backgroundColor, tts:textOutline |
Một hộp sau chữ, một viền | Không được giữ |
<set> |
Một kiểu thay đổi theo thời gian | Không được giữ |
Vùng
Một vùng là một hộp trên khung hình, được đặt bởi tts:origin và định kích thước bởi tts:extent. Bên trong, tts:displayAlign đặt văn bản ở trên, giữa hoặc dưới (before, center, after), và tts:textAlign đặt nó sang một bên hoặc ở giữa.
<region xml:id="top"
tts:origin="10% 10%"
tts:extent="80% 80%"
tts:displayAlign="before"/>
Subtitld tính ra văn bản nằm ở đâu, dù vùng được đo bằng phần trăm, điểm ảnh hay ô, và chọn một trong chín vị trí gần nhất mà {\an1} đến {\an9} của SubRip nêu tên. Khi ghi một tệp, mỗi vị trí nó dùng là một vùng mang tên tương ứng: bottom, top, top-left…
Khi tệp không nói rõ. Các giá trị mặc định của TTML đặt văn bản ở góc trên bên trái của vùng, nhưng trình phát hiển thị ở phía dưới và căn giữa, và Subtitld cũng làm vậy. Nó còn đọc textAlign="start" trong một vùng không có kích thước hay vị trí là căn giữa: các tệp viết bằng pycaption, kể cả bản Subtitld cũ hơn, đặt giá trị này trên mọi vùng.
Profile
Phần lớn TTML được viết theo một profile: một tập con của ngôn ngữ, với các quy tắc riêng. Subtitld đọc từng loại như TTML.
| Profile | Nơi được dùng | Thói quen của nó |
|---|---|---|
| DFXP | Profile đầu tiên của TTML, và phần mở rộng .dfxp |
Tệp cũ dùng namespace http://www.w3.org/2006/10/ttaf1 |
| IMSC 1 | Phát trực tuyến qua DASH, CMAF và HLS | Profile của W3C cho phụ đề và chú thích trực tuyến |
| EBU‑TT‑D | Trình phát trực tuyến của các đài truyền hình châu Âu | Phần tử thường được viết với tiền tố: <tt:p> |
| SMPTE‑TT | Chú thích trực tuyến của truyền hình Mỹ | Phần bổ sung của SMPTE, cho chú thích chuyển từ phát sóng |
iTT (.itt) |
Giao nộp cho iTunes Store và Apple TV của Apple | Thời gian theo khung hình (ttp:timeBase="smpte") |
TTML trong Subtitld
- Văn bản và các ngắt dòng của mọi phụ đề
- Nghiêng, đậm, gạch chân, gạch ngang và màu
- Vị trí trên màn hình
- Người nói, dưới dạng agent
- Thời điểm bắt đầu và kết thúc, đến mili giây, theo thứ tự
- Phông, cỡ chữ, nền và viền theo từng dòng
- Kích thước và vị trí chính xác của một vùng
- Kiểu thay đổi theo thời gian, ruby, phụ đề dạng hình ảnh
- Bản dịch đặt cạnh bản gốc, lồng tiếng, khuôn mặt người nói
Hãy lưu một dự án .usfx để giữ lại những gì thuộc về Subtitld.
Mở một tệp TTML
Subtitld mở .ttml, .dfxp, .itt và .xml, và:
- đọc TTML dù được viết theo cách nào: trong namespace của nó, trong namespace DFXP cũ, hoặc với
tt:đứng trước mọi phần tử; - đọc mọi dạng thời gian, mỗi dạng được đếm từ div và body chứa nó;
- theo dõi kiểu như TTML áp dụng, giữ nghiêng, đậm, gạch chân, gạch ngang và mọi màu khác trắng;
- đặt mỗi phụ đề ở vị trí mà vùng của nó hiển thị;
- lấy agent làm người nói, sẵn sàng cho lồng tiếng, và
xml:langcủa tệp làm ngôn ngữ của dự án; - đọc bảng mã mà tệp khai báo, và các thực thể HTML như
.
Một tệp không phải XML đúng cấu trúc sẽ mở với thông báo nêu dòng và cột. Một tệp hoàn toàn không phải TTML sẽ được báo như vậy.
Xuất TTML
Xuất, rồi Phụ đề và chọn TTML hoặc DFXP, sẽ có các tùy chọn:
- Văn bảnBản gốc, một bản dịch, hoặc cả hai, với bản dịch nằm bên dưới.
- Tên người nóiBỏ đi, đặt trước văn bản (Thom: …), hoặc dưới dạng agent (
ttm:agent), cách riêng của TTML. - Định dạngGiữ lại, hoặc bỏ đi.
- Dịch thời gianMọi phụ đề sớm hơn hoặc muộn hơn cùng một khoảng.
- Diện mạoChữ trắng với viền đen, hoặc theo cách bản xem trước của Subtitld vẽ: phông, màu và hộp mờ của nó.
Tệp là TTML 1 dạng UTF-8. Thời gian được ghi như 00:00:23.000, mỗi vị trí phụ đề là một vùng, định dạng là các span, và ngắt dòng là <br/>. xml:lang là ngôn ngữ của văn bản mà nó chứa. TTML và DFXP cho ra cùng một tệp; chỉ khác phần mở rộng.
TTML hay WebVTT?
WebVTT cho một <track> trên trang web: trình duyệt tự đọc được. TTML cho đài truyền hình, cho các dịch vụ phát trực tuyến yêu cầu nó, và cho các trình phát đọc được nó, như dash.js và Shaka Player. Trang WebVTT có phần còn lại.
Điều thú vị
TTML 1.0 trở thành Recommendation của W3C vào tháng 11 năm 2010, sau các bản nháp mang tên theo profile đầu tiên của nó: Distribution Format Exchange Profile, DFXP.
Namespace cũ, http://www.w3.org/2006/10/ttaf1, có từ các bản nháp năm 2006, khi TTML là Timed Text Authoring Format. Nhiều tệp vẫn mang nó.
Năm 2016, W3C nhận giải Technology & Engineering Emmy cho TTML, cùng với HBO, Netflix, Telestream và SMPTE.
Định dạng liên quan
Mở tệp trong Subtitld cùng video và canh lại thời gian trên dạng sóng.