LRC 轉 TTML
或者貼上字幕文字
選項
當來源檔案沒有結束時間時使用(純文字、LRC)。輸出裡的時間軸是在這裡產生的,不是轉換來的,所以填多少就是多少。
這次轉換會改變什麼
有 1 項會被捨棄或需要你決定
- 時間
字幕的結束時間——來源檔案不記錄這些時間,因此輸出中的結束時間是產生出來的,而非轉換而來
這份清單來自這兩種格式的能力矩陣,而不是你載入的這份具體檔案。如果具體檔案用到了格式允許、但矩陣沒有建模的特性,可能會遺失更多。
LRC 轉 TTML 會把每一行歌詞寫成 XML 的 `<p begin="…" end="…">`,時間形如 `00:00:12.000`,同一時間戳的多行用 `<br/>` 分隔,整份文件帶 XML 宣告。TTML 常用在廣播與串流平台的字幕流程裡。
結束時間取下一行的開始,最後一行用頁面設定的時長補,報告會說明哪一條的終點是生成的。TTML 能寫到毫秒而 LRC 只到百分秒,但這裡沒有捨入問題,真正失去的是「終點原本不存在」這件事,因此記為 timing。
`[ti:]`、`[ar:]`、`[al:]`、`[offset:]` 在 TTML 產物裡都沒有對應結構,偏移只讀取不套用。同一個時刻的多行會進到同一個 `<p>`,中間用 `<br/>` 分開;空歌詞行則會產生一個沒有文字的 `<p>`。輸出是 UTF-8 XML,依開始時間排序。
範例
一份典型的 LRC 檔轉成 TTML
輸入
[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.輸出
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
<body>
<p begin="00:00:12.000" end="00:00:15.300">First line of the song.</p>
<p begin="00:00:15.300" end="00:00:18.000">Second line.<br/>Second line, translated.</p>
<p begin="00:00:18.000" end="00:00:21.500"></p>
<p begin="00:00:21.500" end="00:00:23.500">Final line.</p> </body>
</tt>
這個方向丟掉的是結束時間;開始時間與文字逐行對應,空歌詞行也保留。
同一轉換遇到一份格式凌亂的檔案
輸入
[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]輸出
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
<body>
<p begin="00:00:03.000" end="00:00:05.500">Out of order.</p>
<p begin="00:00:05.500" end="00:00:07.000">Leading zero omitted, one decimal.</p>
<p begin="00:00:07.000" end="00:00:09.000">Second with no centiseconds.<br/>Repeated chorus line.</p>
<p begin="00:00:09.000" end="00:00:12.000">Repeated chorus line.</p>
<p begin="00:00:12.000" end="00:00:14.000"></p> </body>
</tt>
真實檔案常見的狀況:BOM、混合換行、缺前導零的時間戳、重複的副歌行。解析器不會中斷,讀不出的部分會進有損說明。
常見問題
LRC 轉 TTML 後,每一行歌詞寫成什麼元素?
寫成一個 `<p begin="…" end="…">`,放在 `<body>` 裡;同一時間戳的多行用 `<br/>` 分隔,文件最上方還有一行 XML 宣告。
LRC 轉 TTML 的 `end` 屬性是檔案裡原本就有的嗎?
不是。它由下一行的開始推得,最後一行用頁面設定的時長補,報告會指出哪一條的終點是生成的。
LRC 的 `[offset:]` 在 TTML 裡會被套用嗎?
不會。偏移讀取後原樣保留,產物的時間與檔案字面一致;要抵消偏移得另外做一次時間軸平移。
LRC 轉 TTML 後,雙語歌詞會變成兩個 `<p>` 嗎?
不會。同一個時間戳的多行放在同一個 `<p>` 裡,中間用 `<br/>` 分開,仍然是一條字幕。
LRC 的百分秒在 TTML 裡精度夠用嗎?
夠。TTML 的時間可以寫到毫秒,`[00:12.00]` 寫成 `00:00:12.000`,沒有任何位數被丟掉。
TTML 轉回 LRC 會失去什麼?
會失去時間軸、樣式、定位、精度與格式私有內容;LRC 只留開始時間與純文字,兩邊的清單並不對稱。