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

Chuyển JSON sang SRT

Hoặc dán văn bản phụ đề

Chuyển đổi này thay đổi điều gì

3 thứ bị bỏ hoặc cần một quyết định

  • Định dạng hiển thị

    mọi định dạng hiển thị (đậm, nghiêng, màu, viền, bóng)

  • Vị trí

    vị trí trên màn hình (mọi cue trở về vị trí mặc định)

  • Karaoke

    thời gian karaoke (tô sáng từng âm tiết)

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 đọc một tài liệu JSON mô tả phụ đề và ghi ra tệp SRT. Nó nhận hai dạng: cấu trúc trang này tự ghi (có số phiên bản rồi mảng cues) và dạng rút gọn chỉ là danh sách cue. Mỗi cue cần mốc bắt đầu, mốc kết thúc và chữ; thời gian tính bằng mili giây nên đi thẳng vào timecode SRT mà không làm tròn.

Những gì SRT không giữ được sẽ được báo chứ không bị bỏ im lặng: tiêu đề, frame rate và bảng kiểu không có chỗ trong tệp chỉ gồm cue đánh số. Phần nhấn mạnh trong câu được ghi thành thẻ tương ứng, còn phần thẻ không diễn đạt được thì nằm trong danh sách phía trên.

Tệp hỏng không chặn chuyển đổi: bộ đọc sửa cue có mốc kết thúc không sau mốc bắt đầu, vì một tệp mở được và sửa được có giá trị hơn một thông báo lỗi. Cả bộ tệp JSON chuyển trong một lượt, ngay trong trình duyệt, không tải tệp lên máy chủ, và trả về một ZIP.

Ví dụ

Tệp JSON thông thường, chuyển sang SRT

Đầu vào

{
  "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"
    }
  ]
}

Kết quả

1
00:00:00,000 --> 00:00:02,000
Hello world.
Second line.

2
00:00:02,500 --> 00:00:04,000
Plain line.
<i>Styled</i> line.

3
00:00:04,500 --> 00:00:06,000
Roger: I am here.

Phần bị mất trong kết quả này: kiểu chữ, vị trí và karaoke. 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

[
    { "start": 0, "end": 1000, "lines": ["First."] },
    { "start": 1000, "end": 2000, "text": "Second." },
    "not an object",
    { "start": 2000, "end": 3000, "lines": ["Third."], "class": "top" }
]

Kết quả

1
00:00:00,000 --> 00:00:01,000
First.

2
00:00:01,000 --> 00:00:02,000
Second.

3
00:00:02,000 --> 00:00:03,000
Third.

Đâ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

Trang này nhận những dạng JSON nào?

Cấu trúc trang này tự ghi — có số `version` và mảng `cues` — và dạng mảng rút gọn, nơi cả tệp chỉ là danh sách cue. Điều quan trọng là mỗi cue có `start`, `end` và chữ ở một trong các dạng được nhận.

Tiêu đề, styles và frame rate trong JSON đi đâu khi sang SRT?

Chúng được đọc rồi báo là bị bỏ, vì SRT không có trường cho chúng. Frame rate đặc biệt không có chỗ: SRT lưu thời gian đồng hồ chứ không lưu khung hình, nên nó nằm trong danh sách phía trên thay vì bị dùng lén.

Mili giây có bị làm tròn khi ghi ra SRT không?

Không. SRT lưu mili giây và JSON cũng ghi bằng mili giây, nên mọi `start` và `end` được chuyển nguyên vẹn; timeline không bị trôi.

Nếu một cue có mốc bắt đầu sau mốc kết thúc thì sao?

Trang sửa cue đó thay vì từ chối tệp, để một tài liệu bị sửa tay vẫn cho ra tệp phụ đề mở được. Hãy kiểm tra lại mốc của cue ấy với video, vì tệp đang báo có điều gì đó sai.

Tôi có chuyển qua lại mà không mất gì không?

Chuyển sang JSON rồi quay lại tái tạo đúng timeline, và tái tạo phần định dạng JSON mô tả được: nghiêng, đậm và màu thành thẻ rồi trở lại thành thẻ. Thứ không sống sót vòng quay là những gì SRT vốn không lưu, đúng như danh sách phía trên.

Công cụ liên quan