SRT 轉 JSON
或者貼上字幕文字
這次轉換會改變什麼
這個方向不會遺失內容 —— 來源格式的每一項特性在目標格式裡都有地方可去。
這份清單來自這兩種格式的能力矩陣,而不是你載入的這份具體檔案。如果具體檔案用到了格式允許、但矩陣沒有建模的特性,可能會遺失更多。
這一頁把字幕變成結構化資料:一份 JSON 檔案,逐條列出每條字幕的起止時間與文字。schema 是本站自有的,刻意做得精簡——一個版本號加一個 cues 陣列,時間用整數毫秒而不是時間碼,不依賴任何特定函式庫,也沒有需要猜測的欄位。
用毫秒是因為它不需要先解析就能使用:本站支援的字幕格式最細只到一毫秒,而整數不會因為逗號或小數點的書寫慣例被讀錯。沒有格式的列是普通字串;帶斜體、粗體或顏色的列會變成物件,裡面有文字與套用到它的標籤,每個標籤記錄自己的類型與涵蓋的字元範圍。
產物是一份可以載入腳本、做 diff 或提交進版本控制的檔案,轉回去就能拿回字幕。和其他頁面一樣,所有工作都在你的瀏覽器裡完成;一次拖入多個檔案時,佇列依序處理、可中途停止,結果打包成一個 ZIP。
範例
一份典型的 SRT 檔案轉成 JSON
輸入
1
00:00:01,000 --> 00:00:03,500
Hello there.
2
00:00:03,500 --> 00:00:06,000
<i>Whispering</i> now.
And a second line.
3
00:00:06,000 --> 00:00:09,250
<b>Bold</b> statement.
輸出
{
"version": 1,
"cues": [
{
"id": "1",
"start": 1000,
"end": 3500,
"lines": [
"Hello there."
]
},
{
"id": "2",
"start": 3500,
"end": 6000,
"lines": [
{
"text": "Whispering now.",
"tags": [
{
"kind": "italic",
"start": 0,
"end": 10
}
]
},
"And a second line."
]
},
{
"id": "3",
"start": 6000,
"end": 9250,
"lines": [
{
"text": "Bold statement.",
"tags": [
{
"kind": "bold",
"start": 0,
"end": 4
}
]
}
]
}
]
}
這個方向沒有遺失東西:時間、文字與行內標籤都能從 JSON 還原。
同一轉換遇到一份格式不規則的輸入
輸入
1
0:00:01,00 --> 0:00:03,500
<B>Bold</B> and <I>italic</I>.
2
00:00:03,500 --> 00:00:06,000
3
00:00:08,000 --> 00:00:09,000
Last one.
輸出
{
"version": 1,
"cues": [
{
"id": "1",
"start": 1000,
"end": 3500,
"lines": [
{
"text": "Bold and italic.",
"tags": [
{
"kind": "bold",
"start": 0,
"end": 4
},
{
"kind": "italic",
"start": 9,
"end": 15
}
]
}
]
},
{
"id": "2",
"start": 3500,
"end": 6000,
"lines": []
},
{
"id": "3",
"start": 8000,
"end": 9000,
"lines": [
"Last one."
]
}
]
}
空行、混合換行與多餘空白不會改變 schema;可疑條目會被修好或記進有損說明,產物仍是合法 JSON。
常見問題
SRT 轉 JSON 用的是哪一套 schema?
本站自有的 schema,範例就在上方面板:一個版本號,接著一個 cues 陣列。每條字幕有 id、以毫秒為單位的 start 與 end,以及一個 lines 清單;沒有隱藏的中繼資料,也不依賴第三方格式。
SRT 轉 JSON 為什麼用毫秒而不是時間碼?
這樣檔案不必先解析就能使用。把兩個時間相加、比較或排序,都只是整數運算;像 00:00:01,000 這樣的字串則必須先解碼,而且可能解錯。
SRT 轉 JSON 後斜體要怎麼表示?
純文字列仍是字串;帶格式的列會變成物件,裡面有 text 與 tags 陣列,每個標籤說明自己的類型以及在文字中開始、結束的位置。把 JSON 轉回去,格式就會被重新寫出。
SRT 轉 JSON 的產物可以手動編輯嗎?
可以,而轉回去就是檢查方式:只要檔案解析得動,轉換就會依你給的時間重現字幕,所以來回轉一次是找出錯字最快的方法。
SRT 轉 JSON 的檔案能直接交給腳本讀嗎?
可以,這正是它的用途:讀 cues 陣列,把 start 與 end 當數字,再把 lines 串起來——每一列不是字串,就是 text 欄位裝著文字的物件。