CSV 转 ASS
或者粘贴字幕文本
这次转换会改变什么
有 1 项会被丢弃或需要你决定
- 精度
时间精度——输出的时间刻度更粗,因此每个时间戳都会四舍五入到最接近的 10 毫秒
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
这一页把 CSV 表格转成 ASS 脚本。输入是一张带表头的表,输出是播放器与剪辑软件都能读的 ASS;转换在浏览器里完成,文件不上传。
唯一真丢的是精度。CSV 把时间写到毫秒(00:00:04.126),ASS 只写到百分秒(0:00:04.13),所以每个时间码都会四舍五入到最近的 10 毫秒:4.126 秒输出成 4.13 秒。没有任何一条被拉长或重排,单条移动不超过 5 毫秒;但如果你要把这份字幕和另一份文件对齐,这里是这一趟唯一不再精确的地方。
其余都原样过去:每条字幕变成 Events 段里的一行 Dialogue,层的字段占着 SRT 里编号的位置;行内换行写成 \N;输出按起始时间升序。产物固定带一份默认的 V4+ 样式表,CSV 里没有样式可继承,所以所有字幕都用它。
产物一律 UTF-8、Unix 换行、无 BOM;输入是 UTF-16 或 Windows 单字节编码时会先解码,结果面板会说明。整季拖进来会按顺序处理,随时可以取消,最后打包成一个 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.
这份产物丢掉了毫秒精度;其余部分逐行一致。
同一转换遇到一份脏文件
输入
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 的时间写到百分秒,CSV 写到毫秒。00:00:04.126 会四舍五入到 0:00:04.13,单条移动不超过 5 毫秒;顺序不变,也没有一条被拉长。要和另一份文件严格对齐时,这里就是唯一不再精确的地方。
CSV 转 ASS 的产物长什么样?
像 ASS:没有编号,每条字幕是 Events 段里的一行 Dialogue,首字段是层而不是序号,时间写成 0:00:01.00 这种形状,产物还带一份默认样式表。
CSV 转 ASS 后,一条两行的字幕还是一条吗?
是。两行之间用 \N 连接,这是 ASS 写硬换行的方法;两行仍然属于同一条字幕,播放器会一起显示。
CSV 转 ASS 会按起始时间重新排序吗?
会,最早的在前。播放器和后续工具都按这个顺序读;如果你的 CSV 本来乱序,产物会变整齐。这是对文件结构的整理,不是内容的改动,而且是有意为之。
CSV 转 ASS 之后,再转回 CSV 会丢什么?
会丢样式、屏幕定位、卡拉OK 计时与格式私有内容。那份清单和上面这一份不同,因为两个方向各自保留了不一样的东西。
CSV 转 ASS 后,文件编码会跟着 CSV 走吗?
不会。无论输入是 UTF-16 还是 Windows 单字节编码,产物都是 UTF-8、Unix 换行、不带 BOM;输入编码不一致时会先解码,结果面板会提示。