Chuyển TTML sang JSON
Hoặc dán văn bản phụ đề
Chuyển đổi này thay đổi điều gì
1 thứ bị bỏ hoặc cần một quyết định
- Nội dung riêng của định dạng
nội dung mà định dạng nguồn giữ bên ngoài các cue (khối không phải cue, văn bản đầu tệp, thiết lập riêng từng cue, sự kiện bị chú thích) — định dạng đích không có chỗ cho nó
Danh sách này đến từ ma trận năng lực của hai định dạng này, không phải từ tệp cụ thể bạn đã tải lên. Một tệp cụ thể có thể mất nhiều hơn nếu nó dùng các tính năng mà định dạng cho phép nhưng ma trận không mô hình hóa.
Trang này chuyển đổi TTML sang JSON. Bạn kéo tệp vào hoặc dán văn bản, rồi nhận lại phiên bản JSON. Toàn bộ quá trình chạy ngay trong trình duyệt: không tải tệp lên máy chủ, không cần tài khoản.
JSON ở đây là biểu diễn có cấu trúc của chính trang này: mảng cue với thời gian tính bằng mili giây. Phần đầu TTML như prolog XML, bảng `<styling>` và `<layout>` vẫn bị bỏ, dù mỗi dòng có thể mang `tags`; danh sách mất mát phía trên lấy từ khả năng của hai định dạng chứ không phải từ tệp của bạn.
Một tệp hay cả mùa đều được: hàng đợi xử lý lần lượt và trả kết quả về cùng một tệp ZIP.
Ví dụ
Tệp TTML thông thường, chuyển sang JSON
Đầu vào
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" xml:lang="en">
<head>
<styling>
<style xml:id="s1" tts:color="#FFFF00" tts:fontWeight="bold"/>
</styling>
<layout>
<region xml:id="bottom" tts:origin="10% 80%" tts:extent="80% 20%"/>
</layout>
</head>
<body>
<div>
<p begin="00:00:01.000" end="00:00:03.500" region="bottom" style="s1">Hello <span tts:fontStyle="italic">there</span>.</p>
<p begin="00:00:03.500" end="00:00:06.000" region="bottom">How are you?<br/>Fine, thanks.</p>
</div>
</body>
</tt>
Kết quả
{
"version": 1,
"cues": [
{
"start": 1000,
"end": 3500,
"lines": [
{
"text": "Hello there.",
"tags": [
{
"kind": "italic",
"start": 6,
"end": 11
}
]
}
]
},
{
"start": 3500,
"end": 6000,
"lines": [
"How are you?",
"Fine, thanks."
]
}
]
}
Phần bị mất trong kết quả này: nội dung riêng của định dạng. Phần còn lại khớp từng dòng.
Cùng phép chuyển trên một tệp lộn xộn
Đầu vào
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
ttp:frameRate="25" xml:lang="en">
<body>
<div>
<p begin="1.5s" dur="2s">Loaded from an offset and a duration.</p>
<p begin="4s" end="00:00:06.50">A coarser clock spelling.</p>
<p begin="00:00:07:00" end="00:00:08:12">Frames, at 25fps.</p>
<p begin="9s"><span tts:color="#FF0000">Half-open</span> and Tom & Jerry.</p>
</div>
</body>
</tt>
Kết quả
{
"version": 1,
"cues": [
{
"start": 1500,
"end": 3500,
"lines": [
"Loaded from an offset and a duration."
]
},
{
"start": 4000,
"end": 6500,
"lines": [
"A coarser clock spelling."
]
},
{
"start": 7000,
"end": 8480,
"lines": [
"Frames, at 25fps."
]
},
{
"start": 9000,
"end": 11000,
"lines": [
{
"text": "Half-open and Tom & Jerry.",
"tags": [
{
"kind": "color",
"start": 0,
"end": 9,
"value": "#FF0000"
}
]
}
]
}
]
}
Đây là kiểu hỏng tệp thật thường có — kết thúc dòng lẫn lộn, khoảng trắng thừa, trường bỏ trống. So sánh với ví dụ gọn phía trên để thấy bộ đọc bỏ qua được gì.
Câu hỏi thường gặp
Prolog, bảng `<styling>` và `<layout>` của TTML có vào được JSON không?
Không, trừ một chỗ rõ ràng: nhấn mạnh viết trong câu như `<span tts:fontStyle="italic">` là một phần của dòng nên đi vào mảng `tags`. Toàn bộ phần đầu — khai báo XML, namespace, bảng `<styling>`, bảng `<layout>` và `<metadata>` — bị bỏ, và đối tượng `styles` của JSON vì thế để trống.
Kết quả TTML sang JSON trông như thế nào?
Là một mảng cue, mỗi cue có `id`, `start`, `end` tính bằng mili giây và mảng `lines`. Một cue TTML thành một cue JSON, cùng thứ tự và cùng nội dung chữ.
Mốc thời gian của TTML có chính xác trong JSON không?
Có, tới mili giây. TTML ghi `00:00:04.126` và JSON ghi `4126`; không có làm tròn hay dịch chuyển, nên một cue dài 2,9 giây vẫn dài 2,9 giây.
Một cue TTML hai dòng ra sao trong JSON?
Hai dòng thành hai phần tử trong mảng `lines` của cùng một cue. Cấu trúc cặp dòng được giữ, khác với TXT nơi hai dòng sẽ rời nhau.
Các cue TTML có giữ thứ tự trong kết quả JSON không?
Có, và chúng được sắp theo mốc bắt đầu khi ghi. Tệp TTML lộn thứ tự sẽ cho JSON đúng thứ tự; chỉ cấu trúc tệp thay đổi, nội dung chữ không đổi.
Tôi có chuyển ngược JSON về TTML được không?
Được, nhưng chiều JSON sang TTML bỏ karaoke vì `<p>` của TTML không ghi được mốc bên trong một dòng. Đó là danh sách mất mát riêng của chiều ngược, khác với danh sách phía trên.
Kết quả JSON có giữ encoding của tệp TTML không?
Không. JSON xuất ra luôn là UTF-8, kết thúc dòng kiểu Unix và không có BOM, bất kể TTML đầu vào dùng gì. Tệp UTF-16 được giải mã khi đọc và bảng kết quả sẽ báo.