LRC 轉 JSON
或者貼上字幕文字
選項
當來源檔案沒有結束時間時使用(純文字、LRC)。輸出裡的時間軸是在這裡產生的,不是轉換來的,所以填多少就是多少。
這次轉換會改變什麼
有 1 項會被捨棄或需要你決定
- 時間
字幕的結束時間——來源檔案不記錄這些時間,因此輸出中的結束時間是產生出來的,而非轉換而來
這份清單來自這兩種格式的能力矩陣,而不是你載入的這份具體檔案。如果具體檔案用到了格式允許、但矩陣沒有建模的特性,可能會遺失更多。
LRC 轉 JSON 輸出的是結構化資料:`version`、可有可無的 `title`,以及 `cues` 陣列;每一條 cue 有自己的 `start`、`end`(整數毫秒)與 `lines`。適合再交給腳本或做後續批次處理。
`end` 由下一行的開始推得,最後一行用頁面設定的時長補足,報告會標明這個值是生成的。同一個時間戳的多行歌詞會進入同一條 cue 的 `lines`,因此雙語歌詞不會被拆成兩條。
`[ti:]` 寫進 JSON 的 `title`,`[ar:]` 與 `[al:]` 沒有對應欄位,`[offset:]` 讀取但不套用。輸出依 `start` 升序排列,空歌詞行會保留成 `lines` 裡的一個空字串;轉換在瀏覽器內完成,檔案不上傳、不需要註冊。
範例
一份典型的 LRC 檔轉成 JSON
輸入
[ti:Sample Song]
[ar:Some Artist]
[length:00:41.00]
[offset:+250]
[00:12.00]First line of the song.
[00:15.30]Second line.
[00:15.30]Second line, translated.
[00:18.00]
[00:21.50]Final line.輸出
{
"version": 1,
"title": "Sample Song",
"cues": [
{
"start": 12000,
"end": 15300,
"lines": [
"First line of the song."
]
},
{
"start": 15300,
"end": 18000,
"lines": [
"Second line.",
"Second line, translated."
]
},
{
"start": 18000,
"end": 21500,
"lines": [
""
]
},
{
"start": 21500,
"end": 23500,
"lines": [
"Final line."
]
}
]
}
這個方向丟掉的是結束時間;開始時間由百分秒換成整數毫秒,文字逐行對應。
同一轉換遇到一份格式凌亂的檔案
輸入
[ar:Some Artist]
[0:05.5]Leading zero omitted, one decimal.
[00:07]Second with no centiseconds.
[00:03.00]Out of order.
[00:07.00][00:09.00]Repeated chorus line.
[00:12.00]輸出
{
"version": 1,
"cues": [
{
"start": 3000,
"end": 5500,
"lines": [
"Out of order."
]
},
{
"start": 5500,
"end": 7000,
"lines": [
"Leading zero omitted, one decimal."
]
},
{
"start": 7000,
"end": 9000,
"lines": [
"Second with no centiseconds.",
"Repeated chorus line."
]
},
{
"start": 9000,
"end": 12000,
"lines": [
"Repeated chorus line."
]
},
{
"start": 12000,
"end": 14000,
"lines": [
""
]
}
]
}
真實檔案常見的狀況:BOM、混合換行、缺前導零的時間戳、重複的副歌行。解析器不會中斷,讀不出的部分會進有損說明。
常見問題
LRC 轉 JSON 後,`[ti:]` 標題會寫在哪裡?
寫進頂層的 `title` 欄位;檔案沒有 `[ti:]` 時這個鍵不會出現,而不是留下一個空字串。
LRC 轉 JSON 的 `end` 數值是怎麼算出來的?
取下一行的開始;最後一行沒有後繼,用頁面設定的時長補,報告會標明這個值是生成的,因為檔案裡沒有任何值可以借。
LRC 的 `[ar:]` 藝人在 JSON 裡留得住嗎?
留不住。cue 模型沒有藝人欄位,`[ar:]` 與 `[al:]` 都不會進到產物;`[offset:]` 會被讀取,但不會加進任何 `start` 或 `end`。
LRC 轉 JSON 時,同一時間戳的兩行歌詞會合併嗎?
會。它們進入同一條 cue 的 `lines` 陣列,因此雙語歌詞仍然是同一條字幕,不會變成兩條時間相同的紀錄。
LRC 轉 JSON 後,時間的單位是什麼?
整數毫秒。`[00:12.00]` 寫成 `12000`,`[00:15.30]` 寫成 `15300`,小數點在產物裡不存在。
LRC 轉 JSON 會把亂序的歌詞排好嗎?
會。`cues` 依 `start` 升序輸出,原檔案的先後若顛倒會被糾正;陣列順序就是播放器讀到的順序。