跳至主要內容
SubtitleMatrix

MicroDVD 轉 JSON

格式轉換MicroDVD(SUB)
或者貼上字幕文字

選項

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

這次轉換會改變什麼

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

  • 影格率

    來源檔案以影格編號儲存時間——每個時間戳記都取決於你提供的影格率

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

這一頁把 MicroDVD 寫成 JSON:頂層是 `version` 與 `cues`,每條 cue 有 `start`、`end`(整數毫秒)與 `lines` 陣列。影格編號除以影格率得到毫秒,`|` 拆成 `lines` 裡的兩筆字串——一條字幕的兩行仍在同一條 cue 裡。

影格率依頁面欄位、檔案宣告、預設 25 的順序取用,產物裡還會寫一個 `"fps": 25` 記錄這次換算用的是哪個值。要分清兩件事:那個數字是本次換算的紀錄,JSON 的時間軸本身仍是毫秒,讀回來時不需要再除一次。所以能力層面仍把影格率記為遺失——JSON 沒有影格編號這一維。

樣式、定位、卡拉 OK 本來就不在 MicroDVD 裡,這一頁也不會憑空生出來。真正失去的只有影格率;時間精確到毫秒,`|` 的分組也保住了。產物依開始時間升序,UTF-8、LF、無 BOM;一次拖入多個檔案會依序處理,中途可以取消。

範例

一份典型的 MicroDVD 檔轉成 JSON

輸入

{1}{1}25
{100}{150}The quick brown fox jumps over the lazy dog.
{200}{260}Faster than|the last one.

輸出

{
  "version": 1,
  "fps": 25,
  "cues": [
    {
      "start": 4000,
      "end": 6000,
      "lines": [
        "The quick brown fox jumps over the lazy dog."
      ]
    },
    {
      "start": 8000,
      "end": 10400,
      "lines": [
        "Faster than",
        "the last one."
      ]
    }
  ]
}

這個方向丟掉的是影格率;其餘逐行對應。

同一轉換遇到一份格式凌亂的檔案

輸入

{1}{1}23.976
{0100}{0150}Leading zeros in the frame numbers.
[INFORMATION]
{300}{340}An unrecognized line above was kept in place.
{400}{450}Trailing spaces are kept.   

輸出

{
  "version": 1,
  "fps": 25,
  "cues": [
    {
      "start": 4000,
      "end": 6000,
      "lines": [
        "Leading zeros in the frame numbers."
      ]
    },
    {
      "start": 12000,
      "end": 13600,
      "lines": [
        "An unrecognized line above was kept in place."
      ]
    },
    {
      "start": 16000,
      "end": 18000,
      "lines": [
        "Trailing spaces are kept.   "
      ]
    }
  ]
}

真實檔案常見的狀況:混合換行、BOM、散落的空白、帶前導零的影格編號、認不出的行。可以對照上面那份乾淨範例,看解析器能容忍到什麼程度。

常見問題

MicroDVD 轉 JSON 後,`start` 與 `end` 是什麼單位?

整數毫秒。第 100 個影格在 25 fps 下是 4000,第 150 個是 6000;不會出現 `4.0` 這種秒數,也不會帶單位字串。

MicroDVD 轉 JSON 的產物為什麼有 `"fps": 25`?

它記錄這次換算用的是哪個影格率,方便回查。JSON 的 cue 時間是毫秒,讀檔案時不需要再拿它做除法;影格編號本身沒有被保留,所以能力層面仍把影格率列為遺失。

MicroDVD 的 `|` 在 JSON 裡怎麼表示?

變成 `lines` 陣列裡的兩筆字串,順序不變;它們仍屬同一條 cue,播放器會把兩行一起顯示。

MicroDVD 轉 JSON 時影格率欄位留空會怎樣?

檔案第一行有宣告就用宣告,沒有就用預設 25,並在有損說明裡寫明。預設值被用上時整條時間軸都是按 25 猜的,對 23.976 或 24 的素材都會偏。

MicroDVD 裡帶前導零的 `{0100}` 轉成 JSON 會變成什麼?

換算成同一個時刻,即 4000 毫秒。前導零只是原文拼法,不改變影格編號的值,也不會被寫進 JSON。

JSON 再轉回 MicroDVD 會丟掉什麼?

樣式、定位、卡拉 OK 與影格率。JSON 本身能帶行內標籤,但 MicroDVD 的樣式能力是 none,寫回去只剩文字與影格編號。

相關工具