SMI 字幕格式
這種格式能表達什麼
- 文字樣式
- 粗體與斜體
- 畫面定位
- 是
- 卡拉 OK 計時
- 否
- 字幕段落內換行
- 是
- 時間軸
- 每條字幕都有開始與結束時間
- 時間精確度
- 1 毫秒
- 時間以影格編號儲存
- 否
- 由右至左的文字
- 是
範例
一份典型的 SAMI 檔案,以及從中讀出的內容
檔案
<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>
<SYNC Start=3500>
<P Class=ENCC>How are you?<br>Fine, thanks.
<SYNC Start=6000>
<P Class=ENCC>
</BODY>
</SAMI>
從中讀出了什麼
2 cues, 3 lines of text
Start=1000 = 00:00:01.000 → 00:00:03.000
Hello there.
[Class=ENCC]
Start=3500 = 00:00:03.500 → 00:00:06.000
How are you?
Fine, thanks.
[Class=ENCC]
Outside the cues:
head a <STYLE> block with CSS for the paragraphs, kept as it came in
cue ends the next <SYNC> tag — a SAMI file writes no end time of its own
clearing a <P> block blanks the screen; the two here are kept as clearing blocks, not turned into cues右欄不是轉換後的檔案,而是本站從左欄檔案讀出的內容,也是每一次轉換的起點。
一份格式紊亂的 SAMI 檔案,以及仍能讀出的內容
檔案
<SAMI>
<BODY>
<SYNC Start=abc>
<P Class=ENCC>this block's start cannot be read
<SYNC Start=2000>
<SYNC Start=4000>
<P>no attributes here<br>second line
<SYNC Start="6000">
some loose text before any P
</BODY>
</SAMI>從中讀出了什麼
3 cues, 3 lines of text
Start=2000 = 00:00:02.000 → 00:00:04.000
(no text)
Start=4000 = 00:00:04.000 → 00:00:06.000
no attributes here
second line
Start=6000 = 00:00:06.000 → 00:00:08.000
some loose text before any P
Outside the cues:
head no <STYLE> block and no <TITLE> — just the <SAMI> and <BODY> tags
cue ends the next <SYNC> tag; the last cue has none after it, so its end time was given a default
loose text text between two <SYNC> tags that belongs to no <P> is kept and attached to the cue open at that point
Reported while reading — repaired or skipped, never silently:
1 × SYNC blocks whose start time could not be read (they were skipped)
1 × the last cue has no following timestamp, so its end time was generated真實檔案常帶 BOM、Windows 換行、壞掉的 SYNC 區塊或讀不出的段落。這些都不會拋出例外:讀不懂的部分會回報出來,而不是默默丟掉。
把 SAMI (SMI) 轉成其他格式
每一個都完全在你的瀏覽器裡執行。標籤標明了那個方向要付出什麼代價,打開之前就能看到。
轉換為此格式
- SubRip (SRT) → SAMI (SMI)
- WebVTT (VTT) → SAMI (SMI)
- Advanced SubStation Alpha (ASS) → SAMI (SMI)
- SubStation Alpha (SSA) → SAMI (SMI)
- YouTube SBV → SAMI (SMI)
- LRC Lyrics → SAMI (SMI)
- MicroDVD → SAMI (SMI)
- TTML (Timed Text) → SAMI (SMI)
- SubtitleMatrix JSON → SAMI (SMI)
- Plain Text (TXT) → SAMI (SMI)
- CSV Spreadsheet → SAMI (SMI)
SAMI(SMI)是 Microsoft 的同步字幕格式,把字幕寫成一段 HTML:每個 `<SYNC Start=1000>` 標籤代表一個時刻,後面的 `<P Class=ENCC>` 區塊就是從那一刻起顯示在螢幕上的文字。時間以毫秒為單位,`Start=4126` 就是 4.126 秒。這一頁是它的格式說明:能存什麼、存不了什麼,以及每一種可以轉去的格式各有一頁。
上方那張能力表就是全部,沒有藏起來的功能。哪一列寫「否」,就是轉成 SMI 時真的會遺失的東西;每一個轉換頁都會在你開啟檔案之前先講清楚。SMI 的結束時間不是顯式欄位——一段字幕的終點就是下一個 `<SYNC>` 的開始;`<P> ` 這類空段落常用來清屏。
這些轉換全部在你的瀏覽器裡執行,檔案不會上傳,也不需要註冊帳號。受保密協議約束的素材、病歷資料或尚未解禁的播出內容,都用得上這一點。
常見問題
SMI(SAMI)檔案是什麼格式?
`.smi` 是 Microsoft 的 SAMI:字幕寫成 HTML 片段,每個 `<SYNC Start=…>` 標籤說明從那一刻起螢幕上是什麼。Windows Media Player 與當時的 DVD、廣播工具鏈都讀它,檔案至今仍會出現在典藏素材裡。
SMI 會保存哪些樣式?
少量樣式,而且放在文字裡而不是文字旁邊:強調與顏色屬於字幕本身(`<b>`、`<i>`、`<u>`、`<font color>`)。字級、描邊與邊距沒有宣告,由顯示字幕的頁面決定;`<STYLE>` 區塊則可以放段落的 CSS。
SMI 的每個字幕段落都有開始與結束時間嗎?
開始時間有,結束時間不是欄位。時間寫成 `Start=4126`,精確到毫秒;一段字幕的終點就是下一個 `<SYNC>` 的開始,最後一段則由讀取時補上預設值。
SMI 可以無損轉成哪些格式?
沒有完全無損的方向。SMI 在字幕段落之外還有 `<STYLE>`、`<TITLE>` 與 Class 等私有結構,本站的格式都裝不下,所以每一頁都列出自己的遺失清單。
SMI 檔案在字幕段落之外還保存什麼?
`<STYLE>` 區塊裡的 CSS(字型、大小、顏色與位置)、`<TITLE>`,以及每個段落上的 `Class=ENCC` 這類屬性——它把段落指向某一條 CSS 規則。這些都不屬於字幕段落模型,所以沒有對應寫法的格式只能列為遺失。