跳至主要內容
SubtitleMatrix

CSV 轉 ASS

或者貼上字幕文字

這次轉換會改變什麼

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

  • 精確度

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

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

這一頁把 CSV 表格轉成 ASS。表格用表頭認出開始時間、結束時間與正文;沒有表頭時就按 start、end、text 的順序讀。轉換全程在瀏覽器裡完成,不上傳、不需要帳號。

兩個格式能存的東西不同,差別不是外觀問題:比 10 毫秒更細的時間精度在 ASS 裡沒有落點。上方清單來自兩個格式各自能表達什麼,不是讀了你的檔案才算出來的,所以檔案還沒載入就已經是這個答案。

時間碼寫到毫秒;正文裡的逗號會強制整個欄位加上雙引號,換行也留在同一格裡,讀回時才不會被拆成兩條。單檔可以,整季也可以:佇列依序處理,結果打包成一個 ZIP。

範例

一份典型的 CSV 檔轉成 ASS

輸入

start,end,text
00:00:01.000,00:00:03.500,The quick brown fox.
00:00:04.000,00:00:06.250,"Jumps over, the lazy dog."
00:00:07.000,00:00:09.000,"Two lines here.
And a second one."

輸出

[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.50,Default,,0,0,0,,The quick brown fox.
Dialogue: 0,0:00:04.00,0:00:06.25,Default,,0,0,0,,Jumps over, the lazy dog.
Dialogue: 0,0:00:07.00,0:00:09.00,Default,,0,0,0,,Two lines here.\NAnd a second one.

這份產物丟掉了:時間精度(僅到 10 毫秒)。其餘內容逐行對得上。

同一轉換遇到結構鬆散的 CSV 輸入

輸入

id,start,end,note,text
1,00:00:01,000,00:00:04,000,cue one,"Hello there, friend."
2,00:00:05.000,00:00:07.000,cue two,Second line.
bad,notatime,00:00:09.000,cue three,Unreadable start.
4,00:00:10.000,00:00:09.000,cue four,End before start.
5,00:00:12.000,00:00:14.000,cue five,Unquoted comma in text, right here.

輸出

[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:04.00,Default,,0,0,0,,Hello there, friend.
Dialogue: 0,0:00:05.00,0:00:07.00,Default,,0,0,0,,Second line.
Dialogue: 0,0:00:10.00,0:00:10.01,Default,,0,0,0,,End before start.
Dialogue: 0,0:00:12.00,0:00:14.00,Default,,0,0,0,,Unquoted comma in text, right here.

真實檔案常有混合換行、多餘空白與空欄位,這份輸入就是那個樣子;可以對照上面那份乾淨範例,看看解析器容忍到哪裡。

常見問題

CSV 轉 ASS 時,毫秒為什麼會變成百分之一秒?

ASS 的時間寫成 0:00:04.13,只到百分之一秒;CSV 是毫秒,所以每個時間碼四捨五入到 10 毫秒,4,126 毫秒會變成 4.13 秒。任何一條 cue 的位移都不超過 5 毫秒,也不會重排。

CSV 轉成 ASS 的產物長什麼樣子?

ASS 沒有 cue 編號:每一條字幕都是 [Events] 段裡的一行 Dialogue:,原本放編號的位置換成 Layer 欄位。CSV 的每一條 cue 依序變成一行,文字不變。

CSV 裡同一條字幕的兩行,轉成 ASS 後還綁在一起嗎?

CSV 轉 ASS:還是一條。兩行之間用 \N 接起來,這是 ASS 的硬換行寫法;播放器會把它們當同一條字幕一起顯示。

CSV 的 cue 順序在 ASS 檔裡會重排嗎?

會按開始時間排序,最早的在前。CSV 的每一條字幕進到 ASS 都照這個順序寫;若原檔本來是亂的,產物會把它們排回正確順序——改的是結構,不是內容,這也是本站每個格式共用的讀檔順序。

把 ASS 轉回 CSV,剛才丟掉的東西補得回來嗎?

精度補不回來:ASS 只存到百分之一秒,轉回 CSV 時拿到的是四捨五入後的時間,原本的毫秒值已經不在檔案裡。

CSV 轉 ASS 的產物用什麼編碼與換行?

一律是 UTF-8、Unix 換行(LF)、不帶 BOM,不管 CSV 原檔用什麼。若輸入是 UTF-16 或 Windows 單一位元編碼,讀入時會先解碼,結果面板會說明;ASS 產物永遠是同一種 UTF-8。

相關工具