跳至主要內容
SubtitleMatrix

SMI 轉 LRC

格式轉換SAMI(SMI)
或者貼上字幕文字

這次轉換會改變什麼

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

  • 時間

    字幕的結束時間(輸出格式只記錄字幕何時開始)

  • 樣式

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

  • 定位

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

  • 精確度

    時間精確度——輸出的時間刻度較粗,因此每個時間戳記都會四捨五入到最接近的 10 毫秒

  • 格式專屬內容

    來源格式保留在字幕之外的內容(非字幕區塊、檔案標頭文字、單條字幕的設定、被註解掉的事件)——目標格式沒有地方存放它們

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

這一頁把 SMI 轉成 LRC:拖曳檔案進來,或直接貼上文字,就會拿回給歌詞播放器讀的版本。轉換完全在瀏覽器裡執行,不會上傳。

這是損失最多的一個方向,最好在轉換前就知道:LRC 只記一行何時開始,不記何時結束,所以每段字幕的終點全部消失;它也只寫到百分之一秒,`Start=4126` 會取整成 `[00:04.13]`,最多偏 5 毫秒。樣式與定位同樣沒有落點。上方清單是從兩種格式各自能表達什麼算出來的。

單一檔案可以,整季影集也可以:佇列會依序處理,結果一起打包成一個 ZIP 下載。

範例

一份典型的 SMI 檔案轉成 LRC

輸入

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial; }
.ENCC { Name: English; lang: en-US; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P Class=ENCC>Hello there.
<SYNC Start=3000>
<P Class=ENCC>&nbsp;
<SYNC Start=3500>
<P Class=ENCC>How are you?<br>Fine, thanks.
<SYNC Start=6000>
<P Class=ENCC>&nbsp;
</BODY>
</SAMI>

輸出

[00:01.00]Hello there.
[00:03.50]How are you?
[00:03.50]Fine, thanks.

這份產物丟掉了結束時間、樣式與定位;只留時間戳與純文字歌詞。

同一轉換遇到格式紊亂的輸入

輸入

<SAMI>
<HEAD>
<TITLE>Episode 1</TITLE>
<STYLE TYPE="text/css">
<!--
.ENCC { Name: English; }
-->
</STYLE>
</HEAD>
<BODY>
<sync start="00:00:02,500">
<P Class=ENCC>Line one<br>Line two
<sync start=9000>
<P Class=ENCC>Tom &amp; Jerry
<SYNC Start=12000>
<P Class=ENCC>&nbsp;
</BODY>
</SAMI>

輸出

[00:02.50]Line one
[00:02.50]Line two
[00:09.00]Tom &amp; Jerry

真實檔案常見的損壞就是這樣——混合換行、散落的空白、壞掉的 SYNC 區塊。拿它和上面那份乾淨樣本對照,就能看出解析器容忍到什麼程度。

常見問題

SMI 轉 LRC 後,每條字幕的結束時間去哪了?

被丟棄了。LRC 不記結束時間,播放器會讓一行留到下一個時間戳出現,所以 SMI 的終點全部消失。

SMI 轉 LRC 後,粗體、斜體與顏色會怎樣?

全部消失。LRC 不存任何樣式,段落文字裡的 `<i>`、`<font color>` 與 `<STYLE>` 區塊的 CSS 都沒有落點,每行都寫成純文字。

SMI 轉 LRC 後,螢幕定位會保留嗎?

不會。LRC 無法指定字幕畫在哪裡,段落屬性與它們指向的 CSS 會一併丟棄,每段字幕回到播放器的預設位置。

SMI 轉 LRC 時,毫秒時間為什麼會取整?

LRC 只寫到百分秒,`Start=4126` 變成 `[00:04.13]`,四捨五入到 10 毫秒,單段最多偏 5 毫秒。

SMI 的 <STYLE> 區塊與 Class 屬性在 LRC 裡怎麼處理?

都會被丟棄。LRC 存的是歌詞行而不是 HTML 文件,`<STYLE>` 的 CSS、`<TITLE>` 與 `Class=ENCC` 都沒有地方放。

SMI 轉 LRC 後,兩行的字幕會變成幾行?

兩行,而且共用同一個時間戳;時間戳相同表示它們屬於同一組,這是 LRC 表達多行的方式。

SMI 轉 LRC 時,清屏區塊會變成空白歌詞嗎?

不會。`<P>&nbsp;` 沒有文字,只拿來清屏,不會寫成歌詞行,否則播放器裡會多出一段空白。

SMI 轉 LRC 時,字幕順序會改變嗎?

LRC 會依開始時間升序輸出;原始檔案若亂序,產物會替你排好,原本有序則保持不變。

SMI 轉 LRC 之後可以再轉回 SMI 嗎?

可以,但回程有它自己的遺失清單:LRC 轉 SMI 會丟掉時間長度,因為 LRC 檔裡沒有結束時間可以讀回。

SMI 轉 LRC 的產物使用什麼編碼?

固定 UTF-8、Unix 換行、無 BOM;輸入若是 UTF-16 或 Windows 單一位元組編碼,讀入時會先解碼。

相關工具