SMI 轉 ASS
或者貼上字幕文字
這次轉換會改變什麼
有 2 項會被捨棄或需要你決定
- 精確度
時間精確度——輸出的時間刻度較粗,因此每個時間戳記都會四捨五入到最接近的 10 毫秒
- 格式專屬內容
來源格式保留在字幕之外的內容(非字幕區塊、檔案標頭文字、單條字幕的設定、被註解掉的事件)——目標格式沒有地方存放它們
這份清單來自這兩種格式的能力矩陣,而不是你載入的這份具體檔案。如果具體檔案用到了格式允許、但矩陣沒有建模的特性,可能會遺失更多。
這一頁把 SMI 轉成 ASS:拖曳檔案進來,或直接貼上文字,就會拿回 ASS 版本。轉換完全在瀏覽器裡執行,不會上傳。
這兩種格式存的東西不同,而且差別不是外觀問題:精度與格式私有內容在 ASS 裡沒有落點。ASS 只寫到百分之一秒,SMI 的 `Start=4126` 會取整成 `0:00:04.13`,每段最多移動 5 毫秒;時間軸不會被拉伸,順序也不會重排。上方清單是從兩種格式各自能表達什麼算出來的。
單一檔案可以,整季影集也可以:佇列會依序處理,結果一起打包成一個 ZIP 下載。
範例
一份典型的 SMI 檔案轉成 ASS
輸入
<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>
輸出
[Script Info]
ScriptType: v4.00+
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:03.00,Default,,0,0,0,,Hello there.
Dialogue: 0,0:00:03.50,0:00:06.00,Default,,0,0,0,,How are you?\NFine, thanks.
這份產物丟掉了精度、STYLE 與 TITLE;行內強調與多行分組都保留。
同一轉換遇到格式紊亂的輸入
輸入
<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 & Jerry
<SYNC Start=12000>
<P Class=ENCC>
</BODY>
</SAMI>
輸出
[Script Info]
ScriptType: v4.00+
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:02.50,0:00:09.00,Default,,0,0,0,,Line one\NLine two
Dialogue: 0,0:00:09.00,0:00:12.00,Default,,0,0,0,,Tom & Jerry
真實檔案常見的損壞就是這樣——混合換行、散落的空白、壞掉的 SYNC 區塊。拿它和上面那份乾淨樣本對照,就能看出解析器容忍到什麼程度。
常見問題
SMI 轉 ASS 時,毫秒時間碼為什麼會改變?
ASS 的時間只寫到百分秒,SMI 寫到毫秒,所以每個時間碼取整到最近的 10 毫秒:`Start=4126` 變成 `0:00:04.13`,單段最多移動 5 毫秒。
SMI 的 <STYLE> 區塊與 Class 屬性在 ASS 裡會怎樣?
都會被丟棄。ASS 存的是字幕段落而不是 HTML 文件,`<STYLE>` 的 CSS、`<TITLE>` 與 `Class=ENCC` 都沒有地方放;寫在段落文字裡的強調則不受影響。
SMI 轉 ASS 後,行內粗體與顏色還保得住嗎?
保得住。寫在 `<P>` 正文裡的 `<b>`、`<i>`、`<u>`、`<font color>` 會映射成 ASS 的覆蓋碼;丟的是檔案層級的樣式表,不是行內強調。
SMI 轉 ASS 後,兩行的字幕用什麼方式合併?
同一段字幕的兩行用 `\N` 連接,寫成一行 Dialogue 事件,播放器會一起顯示。
SMI 轉 ASS 時,字幕順序會被重排嗎?
ASS 會依開始時間排序,最早的在前;原本有序的檔案順序不變。
SMI 轉 ASS 後,Dialogue 行裡的樣式名稱從哪來?
來自轉換時補上的 Default 樣式(Arial、字級 20、白字黑描邊)。SAMI 的 CSS 不會被翻譯成 ASS 樣式,所以每條 Dialogue 都指向同一條補出來的樣式。
SMI 轉 ASS 的產物使用什麼編碼?
固定 UTF-8、Unix 換行、無 BOM;輸入若是 UTF-16 或 Windows 單一位元組編碼,讀入時會先解碼。