跳至主要內容
SubtitleMatrix

SRT 轉 SMI

格式轉換SubRip(SRT)
或者貼上字幕文字

這次轉換會改變什麼

這個方向不會遺失內容 —— 來源格式的每一項特性在目標格式裡都有地方可去。

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

這一頁把 SRT 轉成 SMI(SAMI)。這是給網頁與部分舊播放器用的格式:每條字幕是一個帶毫秒位移的 <SYNC> 標籤,後面接一個 <P> 元素。時間原樣搬成整數毫秒,00:00:04,126 寫成 Start=4126,不四捨五入也不平移。

因為 SYNC 會直接替換螢幕上的內容,轉換器會在每條字幕後面補一個 <P>&nbsp; 空區塊清空畫面;一條兩行的字幕在同一個 <P> 裡用 <br> 分成兩行。這個方向不丟東西:時間軸、換行與文字全部保留,並且依起始時間排好;真正有損的是反方向,SMI 轉 SRT 才會丟掉樣式、定位與格式私有內容。

多個檔案可以一次拖入,佇列依序處理、可中途停止,結果打包成一個 ZIP;轉換在瀏覽器裡完成,檔案不離開本機。輸出固定為 UTF-8、Unix 換行、無 BOM,來源若為 UTF-16 或 Windows 單字元編碼會先解碼。

範例

一份典型的 SRT 檔案轉成 SMI

輸入

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.

輸出

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P>Hello there.
<SYNC Start=3500>
<P>&nbsp;
<SYNC Start=3500>
<P><i>Whispering</i> now.<br>And a second line.
<SYNC Start=6000>
<P>&nbsp;
<SYNC Start=6000>
<P><b>Bold</b> statement.
<SYNC Start=9250>
<P>&nbsp;
</BODY>
</SAMI>

這個方向沒有遺失東西:時間、換行與文字都在 SYNC 與 P 結構裡。

同一轉換遇到一份格式不規則的輸入

輸入

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.

輸出

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P><b>Bold</b> and <i>italic</i>.
<SYNC Start=3500>
<P>&nbsp;
<SYNC Start=3500>

<SYNC Start=6000>
<P>&nbsp;
<SYNC Start=8000>
<P>Last one.
<SYNC Start=9000>
<P>&nbsp;
</BODY>
</SAMI>

空條目與壞掉的時間碼不會讓整份檔案失敗;讀得懂的條目照常輸出,讀不了的記進有損說明。

常見問題

SRT 轉 SMI 後產物長什麼樣子?

像 SMI:沒有字幕編號,也沒有時間碼列——每條字幕是一個 <SYNC Start=…> 標籤,底下用 <P> 放文字;又因為 SYNC 會替換螢幕內容,後面緊接一個 <P>&nbsp; 區塊把畫面清空。每條 SRT 字幕會變成一條 SMI 字幕,順序與文字都相同。

SRT 轉 SMI 後時間還精確到毫秒嗎?

是,精確到毫秒,這也是兩種格式共同的極限。SRT 寫成 00:00:04,126,SMI 寫成 Start=4126;兩者之間沒有捨入或位移,原本在螢幕上待 2.9 秒的字幕仍然是 2.9 秒。

SRT 轉 SMI 時一條兩行字幕會怎麼輸出?

變成兩行,中間用 <br> 連接,這是 SAMI 表示硬換行的方式;兩行的配對關係保留,仍屬於同一條字幕。

SRT 轉 SMI 後字幕順序會保留嗎?

會,而且過程中會依開始時間排序,最早的在前。若原始 SRT 是亂序的,SMI 產物會把它排回順序;這改的是檔案結構而不是內容。

SMI 轉回 SRT 會有什麼代價?

反方向才是有損的:樣式、定位與格式私有內容在 SRT 裡沒有落點。SRT 轉 SMI 這個方向不丟東西,所以那份代價只在你轉回去時才會出現。

SRT 轉 SMI 後會保留來源檔案的編碼嗎?

不會,產物固定是 UTF-8、Unix 換行、無 BOM。UTF-16 或 Windows 單字元編碼的來源會在讀入時解碼(結果面板會說明),輸出永遠是同一種 UTF-8 SMI。

相關工具