跳至主要內容
SubtitleMatrix

SMI 字幕格式

格式轉換SAMI(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>&nbsp;
<SYNC Start=3500>
<P Class=ENCC>How are you?<br>Fine, thanks.
<SYNC Start=6000>
<P Class=ENCC>&nbsp;
</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>&nbsp; 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) 轉成其他格式

每一個都完全在你的瀏覽器裡執行。標籤標明了那個方向要付出什麼代價,打開之前就能看到。

轉換為此格式

SAMI(SMI)是 Microsoft 的同步字幕格式,把字幕寫成一段 HTML:每個 `<SYNC Start=1000>` 標籤代表一個時刻,後面的 `<P Class=ENCC>` 區塊就是從那一刻起顯示在螢幕上的文字。時間以毫秒為單位,`Start=4126` 就是 4.126 秒。這一頁是它的格式說明:能存什麼、存不了什麼,以及每一種可以轉去的格式各有一頁。

上方那張能力表就是全部,沒有藏起來的功能。哪一列寫「否」,就是轉成 SMI 時真的會遺失的東西;每一個轉換頁都會在你開啟檔案之前先講清楚。SMI 的結束時間不是顯式欄位——一段字幕的終點就是下一個 `<SYNC>` 的開始;`<P>&nbsp;` 這類空段落常用來清屏。

這些轉換全部在你的瀏覽器裡執行,檔案不會上傳,也不需要註冊帳號。受保密協議約束的素材、病歷資料或尚未解禁的播出內容,都用得上這一點。

常見問題

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 規則。這些都不屬於字幕段落模型,所以沒有對應寫法的格式只能列為遺失。