跳至主要內容
SubtitleMatrix

JSON 轉 MicroDVD

或者貼上字幕文字

選項

時間以哪個影格率計算。在格式頁面上,這是 MicroDVD 需要的值,因為它把時間存成影格編號。在影格率頁面上,它是檔案當初對應的速率 —— 字幕是照這個版本製作的 —— 而頁面的第二個欄位填你要搭配的影片速率。常見的有 23.976、24、25、29.97、30、50、59.94 和 60。填錯會讓整條時間軸位移;在影格率頁面上,位移是按比例發生,而不是固定的量。

這次轉換會改變什麼

有 4 項會被捨棄或需要你決定

  • 樣式

    全部樣式(粗體、斜體、顏色、外框、陰影)

  • 定位

    螢幕定位(每條字幕都會回到預設位置)

  • 卡拉 OK

    卡拉 OK 計時(逐音節高亮)

  • 影格率

    此格式以影格編號儲存時間——時間取決於你提供的影格率

這份清單來自這兩種格式的能力矩陣,而不是你載入的這份具體檔案。如果具體檔案用到了格式允許、但矩陣沒有建模的特性,可能會遺失更多。

這一頁把 JSON 字幕檔轉成 MICRODVD。拖入檔案或直接貼上文字,就會拿回 MICRODVD 版本;轉換全程在瀏覽器裡跑,不上傳、也不需要帳號。

兩個格式能存的東西不同,差別不是外觀問題:樣式、定位、卡拉OK與影格率在 MICRODVD 裡沒有落點。上方清單來自兩個格式各自能表達什麼,不是讀了你的檔案才算出來的,所以檔案還沒載入就已經是這個答案。

本站的 JSON 完整形狀是版本號加一個 cues 陣列,也可以直接是一串 cue;它保留樣式、定位與卡拉OK,這些正是播放器格式常丟掉的。單檔可以,整季也可以:佇列依序處理,結果打包成一個 ZIP。

範例

一份典型的 JSON 檔轉成 MICRODVD

輸入

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

輸出

{1}{1}25
{0}{50}Hello world.|Second line.
{63}{100}Plain line.|Styled line.
{113}{150}Roger: I am here.

這份產物丟掉了:樣式、定位、卡拉OK與影格率。其餘內容逐行對得上。

同一轉換遇到結構鬆散的 JSON 輸入

輸入

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

輸出

{1}{1}25
{0}{25}First.
{25}{50}Second.
{50}{75}Third.

真實檔案常有混合換行、多餘空白與空欄位,這份輸入就是那個樣子;可以對照上面那份乾淨範例,看看解析器容忍到哪裡。

常見問題

JSON 轉 MICRODVD 時,粗體、斜體與顏色到哪裡去了?

MICRODVD 完全不存樣式,所以全部丟掉:cue 行裡的 tags 或檔案裡的 styles 物件都沒有落點,每一行都寫成純文字。文字本身不受影響。

JSON 轉 MICRODVD 時,螢幕上的位置會被保留嗎?

MICRODVD 不能指定字幕畫在哪裡,所以每條 cue 儲存的位置在轉出時丟掉,播放器會回到它自己的預設位置——大多數播放器是畫面底部置中。

JSON 轉 MICRODVD 時,卡拉OK計時會留下嗎?

時間會丟,字會留。卡拉OK記在 JSON cue 的區間標記裡,標出每個音節何時亮起;MICRODVD 沒有辦法記錄一行之內的時間點,所以標記拿掉,音節變成普通文字。

JSON 轉 MICRODVD 時,影格率要填多少?

填這批字幕要對應的影片影格率。MICRODVD 把字幕存成影格編號而不是時鐘時間,例如 {103}{175}:25 fps 時,第 4 秒是第 100 格。JSON 的毫秒數會據此換算,填錯的話片頭幾乎看不出來,影片越長偏移越大。

JSON 轉成 MICRODVD 的產物長什麼樣子?

MICRODVD 沒有編號:每一行以大括號包住的兩個影格編號開頭,例如 {103}{175},後面才是文字。JSON 的每一條 cue 依序變成一行。

JSON 裡同一條字幕的兩行,轉成 MICRODVD 後還綁在一起嗎?

JSON 轉 MICRODVD:還是一條。兩行之間用 | 接起來,這是 MicroDVD 的換行寫法;播放器仍把它們當同一條字幕。

JSON 的 cue 順序在 MICRODVD 檔裡會重排嗎?

會按開始時間排序,最早的在前。JSON 的每一條字幕進到 MICRODVD 都照這個順序寫;若原檔本來是亂的,產物會把它們排回正確順序——改的是結構,不是內容,這也是本站每個格式共用的讀檔順序。

把 MICRODVD 轉回 JSON,剛才丟掉的東西補得回來嗎?

影格率換算不回精確毫秒:MICRODVD 只存影格編號,轉回 JSON 時得到的是由影格率換算的時間,原本的毫秒值已經不在檔案裡。樣式、定位與卡拉OK也沒有紀錄可還原。

JSON 轉 MICRODVD 的產物用什麼編碼與換行?

一律是 UTF-8、Unix 換行(LF)、不帶 BOM,不管 JSON 原檔用什麼。若輸入是 UTF-16 或 Windows 單一位元編碼,讀入時會先解碼,結果面板會說明;MICRODVD 產物永遠是同一種 UTF-8。

相關工具