Chuyển đến nội dung chính
SubtitleMatrix

Định dạng phụ đề JSON

Định dạng này có thể biểu đạt gì

Định dạng hiển thị văn bản
Phông chữ, màu, viền, bóng
Vị trí trên màn hình
Có
Thời gian karaoke
Có
Xuống dòng trong một cue
Có
Dòng thời gian
Thời điểm bắt đầu và kết thúc cho mọi cue
Độ phân giải thời gian
1 ms
Thời gian lưu dưới dạng số khung hình
Không
Văn bản phải sang trái
Có

Ví dụ

Tệp JSON thông thường và những gì đọc ra từ nó

Tệp

{
  "version": 1,
  "title": "Fixture: typical",
  "fps": 25,
  "styles": {
    "Default": {
      "name": "Default",
      "fontFamily": "Arial",
      "fontSize": 20,
      "primaryColor": "#FFFFFF",
      "bold": false,
      "italic": false
    }
  },
  "generator": "subtitlematrix fixtures",
  "cues": [
    {
      "id": "1",
      "start": 0,
      "end": 2000,
      "lines": [
        "Hello world.",
        "Second line."
      ],
      "style": "Default",
      "position": {
        "x": 100,
        "y": 200,
        "align": "center"
      }
    },
    {
      "id": "2",
      "start": 2500,
      "end": 4000,
      "lines": [
        "Plain line.",
        {
          "text": "Styled line.",
          "tags": [
            {
              "kind": "italic",
              "start": 0,
              "end": 6
            }
          ]
        }
      ]
    },
    {
      "id": "3",
      "start": 4500,
      "end": 6000,
      "lines": [
        "Roger: I am here."
      ],
      "speaker": "Roger"
    }
  ]
}

Tệp chứa gì

3 cues, 5 lines of text

  0 ms → 2000 ms
    Hello world.
    Second line.
    [Default; position 100,200 (center)]
  2500 ms → 4000 ms
    Plain line.
    Styled line.   [italic ×1]
  4500 ms → 6000 ms
    Roger: I am here.
    [speaker Roger]

Outside the cues:
  styles     Default
  other keys version, title, fps, generator — carried through untouched

Cột phải không phải tệp đã chuyển đổi — đó là những gì trang này đọc ra từ tệp bên trái, và là điểm xuất phát của mọi phép chuyển đổi.

Tệp JSON lộn xộn và những gì vẫn đọc ra được

Tệp

{
    "cues": [
        { "start": "0:00:01,5", "end": "0:00:03,0", "text": "Unpadded timecode." },
        { "start": 4000.5, "end": 5000, "lines": ["Fractional start.", { "text": "Second.", "tags": [] }] },
        { "start": 9000, "end": 8000, "lines": ["End before start."] },
        { "start": "nope", "end": 12000, "lines": ["No readable start."] },
        { "start": 13000, "lines": ["No end at all."] }
    ],
    "generator": "subtitlematrix boundary",
    "styles": {},
    "title": "Fixture: boundary"
}

Tệp chứa gì

3 cues, 4 lines of text

  1500 ms → 3000 ms
    Unpadded timecode.
  4001 ms → 5000 ms
    Fractional start.
    Second.
  9000 ms → 9001 ms
    End before start.

Outside the cues:
  other keys generator, title — carried through untouched

Reported while reading — repaired or skipped, never silently:
  2 × entries with no readable start and end time (they are not cues, so they were skipped)
  1 × cue times that were not whole milliseconds (they were rounded to the nearest millisecond)
  1 × cues whose end time was not after their start time (they were given a 1ms duration)

Tệp thật thường có BOM, kết thúc dòng kiểu Windows, một dòng thừa trước timecode hoặc một timecode không đọc được. Không có gì ném lỗi: phần không hiểu được sẽ được báo chứ không bị bỏ im lặng.

Chuyển SubtitleMatrix JSON sang định dạng khác

Mỗi công cụ trong số này chạy hoàn toàn trong trình duyệt của bạn. Nhãn cho biết hướng đó tốn kém gì trước khi bạn mở nó.

Chuyển đổi sang định dạng này

JSON của SubtitleMatrix là một trong những định dạng phụ đề trang này xử lý; đây là trang tham chiếu của nó: nó lưu được gì, không lưu được gì, và trang chuyển đổi cho từng định dạng đích.

Bảng phía trên là toàn bộ: không có danh sách tính năng ẩn. Khi một dòng ghi không, đó chính xác là phần sẽ mất khi chuyển sang JSON, và mỗi trang chuyển đổi bên dưới nói rõ trước khi bạn mở tệp.

Mọi chuyển đổi đều chạy trong trình duyệt, không tải tệp lên máy chủ và không cần tài khoản — điều này quan trọng với tài liệu thuộc NDA, hồ sơ bệnh án hay bản tin bị cấm phát. Cả bộ tệp cũng đi qua hàng đợi trong một lượt và trả về một ZIP.

Câu hỏi thường gặp

Tệp JSON ở đây là gì?

`.json` ở đây là cấu trúc phụ đề của chính trang này: trường `version`, bảng `styles` tùy chọn và mảng `cues` với thời gian tính bằng mili giây. Nó cố ý không mất gì so với những gì các định dạng khác diễn đạt được, và dành cho script hay pipeline hơn là cho trình phát.

JSON có lưu kiểu chữ không?

Có, và nhiều hơn các định dạng khác: bảng `styles` gồm font, cỡ, màu, viền và lề, cộng với `tags` trên từng dòng để một câu có thể đậm, có màu và đặt vị trí mà không cần kiểu có tên. Karaoke cũng được lưu. Vì kiểu đi trong mảng `tags` chứ không phải mã chèn trong chữ, không có gì phải thoát khi đọc hay ghi.

Mỗi cue JSON có lưu cả mốc bắt đầu và kết thúc không?

Có, và một mốc trong tệp JSON đọc là `4126`. Đó là độ chi tiết tối đa của JSON — tới mili giây — và con số chính xác, nên cue có thể ngắn, dài hoặc chồng lên cue kế tiếp.

Nên chuyển JSON sang định dạng nào?

Không định dạng nào trên trang này nhận trọn mọi thứ JSON lưu, nên không có chiều nào miễn phí — mỗi trang chuyển đổi có danh sách mất mát riêng. Hãy chọn đích theo danh sách bạn chấp nhận được.

Tôi có mở tệp JSON bằng trình soạn thảo không?

Có, miễn là giữ đúng dấu phẩy và dấu ngoặc kép. Thời gian là số nguyên mili giây, nên cue ở 1,25 giây là `"start": 1250`; sửa tay như vậy nhanh hơn nhiều so với sửa timecode trong tệp phụ đề.