Phụ đề và bản chép lời dạng JSON
Không phải một định dạng mà là nhiều: JSON là cách các engine chuyển giọng nói thành văn bản, các trang video và các trang phụ đề trao đổi phụ đề và bản chép lời, mỗi nơi theo một cấu trúc riêng. Subtitld lưu theo cấu trúc của chính nó, theo cấu trúc mà Whisper ghi, với mọi thứ một phụ đề giữ lại, và mở được hàng chục công cụ khác ghi.
Tổng quan
| Phần mở rộng | .json |
|---|---|
| Loại phương tiện | application/json |
| Đặc tả | Bản thân JSON: RFC 8259 và ECMA-404. Cấu trúc của mỗi công cụ là riêng của nó. |
| Độ chính xác thời gian | Của Subtitld: giây, đến mili giây. Của các công cụ khác: mili giây, giây, tick 100 nano giây, hoặc văn bản như "1.400s". |
| Mã hóa văn bản | UTF-8 |
| Định kiểu | Của Subtitld: các thẻ mà văn bản giữ lại. Của YouTube: đậm, nghiêng, gạch chân và màu. Còn lại: không có. |
| Vị trí | Của Subtitld: trong văn bản, dạng {\an8}. Của YouTube: cửa sổ. Của Bilibili: một vị trí. |
| Người nói | speaker của Subtitld; các dịch vụ chuyển giọng nói thành văn bản gắn nhãn cho người nói của họ |
| Trong vùng chứa | Không có |
Cấu trúc JSON của Subtitld
Những gì Subtitld lưu, cho một phụ đề:
{
"language": "en-us",
"segments": [
{
"id": 0,
"start": 23.0,
"end": 24.5,
"text": "You're a jerk, Thom.",
"speaker": "Celia"
}
],
"text": "You're a jerk, Thom."
}
| Thành phần | Ý nghĩa |
|---|---|
"language" |
Ngôn ngữ của dự án, theo cách Subtitld gọi tên (en-us) |
"segments" |
Các phụ đề, theo thứ tự |
"id" |
Số thứ tự của nó, từ 0, như Whisper đánh số |
"start", "end" |
Giây |
"text" |
Văn bản của nó, với thẻ (<i>, {\an8}) và ngắt dòng (\n) |
"speaker", "translations" … |
Mọi thứ khác phụ đề giữ: người nói, bản dịch theo ngôn ngữ, lồng tiếng |
"text", ở cuối |
Toàn bộ văn bản trên một dòng, cho các công cụ chỉ cần vậy. Không được đọc lại. |
Cấu trúc của Whisper, có chủ đích. Đó là cấu trúc mà Whisper của OpenAI ghi, nên các công cụ đọc segment của Whisper cũng đọc được tệp của Subtitld, và Subtitld mở được tệp của Whisper, bỏ qua thống kê giải mã và thời gian của từng từ.
Subtitld mở những gì
Mỗi JSON của công cụ cho biết nó là loại nào qua các khóa. Subtitld mở các loại sau:
| Công cụ | Subtitld lấy gì từ nó |
|---|---|
| Subtitld, Whisper của OpenAI | Mọi trường (của Subtitld); văn bản và ngôn ngữ (của Whisper) |
| whisper.cpp | Các segment của nó, và người nói khi nó phân biệt được hai kênh |
| WhisperX | Các segment và người nói của nó |
YouTube (.json3, như yt-dlp lưu) |
Văn bản, đậm, nghiêng, gạch chân, màu và vị trí |
Bilibili (.bcc) |
Văn bản và vị trí |
| AssemblyAI, Deepgram, AWS Transcribe, Rev.ai, Google Speech-to-Text, Azure Speech, Speechmatics | Từ, người nói và ngôn ngữ, được chuyển thành phụ đề |
| Amara | Văn bản, đậm, nghiêng, gạch chân, và phụ đề ở đầu màn hình |
Một tệp JSON không thuộc loại nào trong số này sẽ báo như vậy. Một tệp không phải JSON hợp lệ sẽ chỉ rõ lỗi ở dòng và cột nào.
Từ bản chép lời thành phụ đề
Các dịch vụ chuyển giọng nói thành văn bản cho ra các từ kèm thời gian, hoặc những đoạn lời nói dài. Subtitld biến chúng thành phụ đề, theo giới hạn trong bảng Kiểm tra chất lượng: số ký tự mỗi dòng, số dòng, và số giây. Một phụ đề kết thúc:
- khi người nói đổi, hoặc lời nói ngừng hơn một giây;
- ở cuối một câu, khi câu tiếp theo sẽ làm nó vượt quá một dòng;
- khi nó đầy: ở dấu câu cuối cùng khiến nó vẫn khá đầy, nếu không thì giữa hai từ.
Một lượt lời không có thời gian từng từ cũng được chia theo cách đó, thời gian chia theo độ dài của các phần.
Đặt giới hạn trước. Phụ đề được tạo khi tệp được mở: hãy đổi giới hạn trong Kiểm tra chất lượng trước khi mở một bản chép lời để có phụ đề dài hơn hoặc ngắn hơn.
Người nói và ngôn ngữ
Các dịch vụ đánh số người nói: 0, spk_1, SPEAKER_02, S3. Subtitld gọi họ là A, B, C … theo thứ tự họ nói lần đầu, như cách nó tự đặt tên người nói; người nói mà tệp đặt tên, như Rev.ai có thể làm, sẽ giữ tên đó.
Ngôn ngữ của dự án lấy từ tệp, dưới dạng mã (en_us, pt) hoặc tên (English, như Whisper giữ khi được yêu cầu), hoặc từ tên tệp: video.en.json3. Một tệp cùng ngôn ngữ với dự án sẽ giữ quốc gia của dự án: pt trong dự án pt-br vẫn là pt-br.
json3 của YouTube
Đây là những gì trình phát của YouTube đọc, và yt-dlp lưu dưới dạng .json3: các sự kiện văn bản tính bằng mili giây, với bút cho đậm, nghiêng, gạch chân và màu, và cửa sổ cho vị trí hiển thị. Phụ đề tự động cuộn, dòng này nối dòng kia, mỗi dòng hiện cho đến khi dòng sau xuất hiện; Subtitld biến mỗi dòng thành một phụ đề cho đến khi dòng sau bắt đầu.
BCC của Bilibili
Đây là những gì trình phát của Bilibili đọc, và là JSON duy nhất khác mà Subtitld lưu.
{
"font_size": 0.4,
"font_color": "#FFFFFF",
"background_alpha": 0.5,
"background_color": "#9C27B0",
"Stroke": "none",
"body": [
{
"from": 23.0,
"to": 24.5,
"location": 2,
"content": "You're a jerk, Thom."
}
]
}
Thời gian tính bằng giây; content là văn bản thuần, các dòng ngắt bằng \n. Kiểu hiển thị ở trên là kiểu mà tệp của Bilibili tự mang, và Subtitle Edit cũng ghi như vậy.
Mỗi lần một phụ đề. Các phụ đề hiển thị cùng lúc sẽ thành một mục, văn bản mỗi dòng một hàng, nên dòng thời gian không có chỗ chồng lấn. location luôn là 2, giữa đáy: không ai biết trình phát Bilibili có dùng giá trị nào khác để đặt phụ đề ở chỗ khác hay không.
JSON trong Subtitld
- Văn bản, định kiểu và vị trí của mọi phụ đề
- Người nói, bản dịch và lồng tiếng
- Thời điểm bắt đầu và kết thúc, đến mili giây
- Ngôn ngữ của dự án
- Thời gian của từng từ, và mức độ chắc chắn của dịch vụ với mỗi từ
- Thống kê giải mã của Whisper
- Phông, cỡ, viền và nền của YouTube
- Trong BCC: định kiểu, vị trí, và bản dịch đặt cạnh bản gốc
Lưu một dự án .usfx để giữ lại phần thuộc về Subtitld.
Xuất
Xuất, rồi Phụ đề, cung cấp cả hai:
- JSONCủa Subtitld: dự án như hiện có, mọi phụ đề và mọi trường.
- BCCCủa Bilibili: bản gốc, bản dịch, hoặc cả hai, bản dịch nằm bên dưới; tên người nói bỏ đi hoặc đặt trước văn bản; thời gian được dịch nếu bạn chọn.
Điều thú vị
Tiêu chuẩn của JSON, RFC 8259 năm 2017, yêu cầu JSON gửi giữa các hệ thống phải là UTF-8.
Số tick mỗi giây trong bản chép lời của Azure: nó đếm thời gian theo trăm nano giây.
Số giây mà trình phát của YouTube hiển thị một phụ đề json3 không ghi rõ nó kéo dài bao lâu.
Đị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.