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

Chuyển JSON sang LRC

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

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

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

  • Mốc thời gian

    thời điểm kết thúc của cue (định dạng đích chỉ ghi khi một cue bắt đầu)

  • Đị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)

  • Độ chính xác

    độ chính xác thời gian — đồng hồ của kết quả thô hơn, nên mọi mốc thời gian được làm tròn đến 10 ms gần nhấ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 LRC. 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 LRC. 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.

LRC chỉ ghi mốc bắt đầu của từng dòng, nên mốc kết thúc, kiểu chữ, vị trí, karaoke và độ chính xác mili giây của JSON đều bị bỏ. 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 LRC

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

[ti:Fixture: typical]
[00:00.00]Hello world.
[00:00.00]Second line.
[00:02.50]Plain line.
[00:02.50]Styled line.
[00:04.50]Roger: I am here.

Phần bị mất trong kết quả này: thời gian, kiểu chữ, vị trí, karaoke và độ chính xác. 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ả

[00:00.00]First.
[00:01.00]Second.
[00:02.00]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

Mốc kết thúc của mỗi cue JSON đi đâu khi sang LRC?

LRC chỉ ghi lúc một dòng bắt đầu; trình phát lời nhạc giữ dòng đó tới khi dòng kế tiếp xuất hiện, nên mốc kết thúc là thừa. Mọi trường `end` bị bỏ, còn trường `start` của JSON giữ nguyên.

Chữ đậm, nghiêng và màu trong JSON ra sao khi chuyển sang LRC?

LRC không lưu kiểu chữ, nên mảng `tags` của từng dòng và bảng `styles` của tài liệu đều mất; mỗi dòng LRC là văn bản thuần. Bản thân các từ không bị đổi.

Vị trí trên màn hình của JSON có sang được LRC không?

Không. Đối tượng `position` của mỗi cue bị bỏ vì LRC không nói được phụ đề vẽ ở đâu; mọi cue trở về vị trí mặc định của trình phát, thường là đáy khung hình và căn giữa.

Mốc karaoke trong JSON có giữ được khi sang LRC không?

Không. Các span karaoke cho biết từng âm tiết sáng lên lúc nào đều bị bỏ, vì LRC chỉ có một mốc cho mỗi dòng chứ không có mốc bên trong dòng. Âm tiết vẫn còn dưới dạng chữ.

Vì sao mốc thời gian đổi khi chuyển JSON sang LRC?

LRC ghi `[00:04.12]` — một phần trăm giây — còn JSON ghi `4126` mili giây, nên mốc được làm tròn tới 10 ms gần nhất. Không dòng nào bị đổi thứ tự, lệch tối đa là 5 ms.

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

Mỗi dòng mở đầu bằng mốc thời gian trong ngoặc vuông, không có số thứ tự cue. Một cue JSON thành một cue LRC, cùng thứ tự và cùng nội dung chữ.

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

Hai phần tử `lines` thành hai dòng LRC cùng mốc thời gian, nên trình phát lời nhạc hiện chúng cùng lúc.

Các cue JSON có giữ thứ tự trong kết quả LRC 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 LRC đúng thứ tự; chỉ cấu trúc tệp thay đổi, chữ không đổi.

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

Được, nhưng chiều LRC sang JSON bỏ timing: LRC không có mốc kết thúc nên JSON nhận về chỉ có `start`. Danh sách mất mát của chiều ngược khác danh sách phía trên.

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

Không. LRC 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