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

Chuyển JSON sang SMI

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

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

2 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ị trừ đậm và nghiêng (màu, viền, bóng, lề)

  • 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 chuyển đổi JSON sang SMI. 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 SMI. 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.

SMI nhận một phần nhấn mạnh viết trong dòng chữ nhưng không có bảng kiểu, còn karaoke của JSON thì không có chỗ đứng. 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, nên nó giống nhau trước khi bạn mở tệp.

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 JSON thông thường, chuyển sang SMI

Đầ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ả

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P>Hello world.<br>Second line.
<SYNC Start=2000>
<P>&nbsp;
<SYNC Start=2500>
<P>Plain line.<br><i>Styled</i> line.
<SYNC Start=4000>
<P>&nbsp;
<SYNC Start=4500>
<P>Roger: I am here.
<SYNC Start=6000>
<P>&nbsp;
</BODY>
</SAMI>

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

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P>First.
<SYNC Start=1000>
<P>&nbsp;
<SYNC Start=1000>
<P>Second.
<SYNC Start=2000>
<P>&nbsp;
<SYNC Start=2000>
<P>Third.
<SYNC Start=3000>
<P>&nbsp;
</BODY>
</SAMI>

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

Kiểu chữ nào của JSON sống sót sang SMI?

Phần nhấn mạnh viết trong câu, dưới dạng thẻ `<b>`, `<i>`, `<u>` và `<font color="…">`. Bảng `styles` của JSON thì mất vì SMI không có bảng kiểu; trang nhúng phụ đề tự tạo kiểu bằng CSS.

Mốc karaoke trong JSON có vào được SMI không?

Không. Các span karaoke cho biết từng âm tiết sáng lên lúc nào bị bỏ, vì mỗi khối `<SYNC>` của SMI chỉ có một mốc cho cả cue. Chữ của âm tiết vẫn được giữ.

Kết quả JSON sang SMI trông như thế nào?

Mỗi cue là một thẻ `<SYNC Start=…>` với chữ trong `<P>` bên dưới, không có số thứ tự hay dòng timecode. Sau mỗi cue có khối `<P>&nbsp;` để xóa màn hình trước cue kế tiếp.

Mốc thời gian của JSON có chính xác trong SMI không?

Có, tới mili giây. JSON ghi `4126` và SMI ghi `Start=4126`; không có làm tròn hay dịch chuyển, nên độ dài cue không đổi.

Một cue JSON hai dòng ra sao trong SMI?

Hai dòng nối bằng `<br>`, cách SAMI ghi ngắt dòng cứng. Hai dòng vẫn thuộc một cue và hiển thị cùng lúc.

Các cue JSON có giữ thứ tự trong kết quả SMI không?

Có, và được sắp theo trường `start` trước khi ghi. Tài liệu JSON lộn thứ tự sẽ cho SMI đúng thứ tự; chỉ cấu trúc tệp thay đổi, chữ không đổi.

Tôi có chuyển ngược SMI về JSON được không?

Được, nhưng chiều SMI sang JSON bỏ nội dung riêng của định dạng: cấu trúc HTML, các khối SYNC và phần trình bày của SMI không có tương đương trong mô hình cue của JSON. Danh sách mất mát của chiều ngược khác phía trên.

Kết quả SMI có giữ encoding của tệp JSON không?

Không. SMI xuất ra là UTF-8, kết thúc dòng kiểu Unix và không có BOM, bất kể JSON đầ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.

Công cụ liên quan