toolfree

字幕格式转换

SRT、WebVTT、ASS/SSA 三种字幕格式互转,并可整体平移时间轴修正不同步。全部在浏览器里完成,并直说每种格式带不过去什么。

在你的浏览器中运行

负值表示字幕提早出现。会被推到零之前的字幕会停在零,不会被丢掉。

检测到
0
字幕条数
最后一条结束于

解析与输出都在你的浏览器里完成,文件不会上传。

三种格式,同样三件事

常见的字幕格式记的都是同样的东西——起始时间、结束时间、一段文字。它们在「怎么写下来」这件事上 几乎每个细节都不一样:

SRTWebVTTASS/SSA
文件头没有必须是 WEBVTT[Script Info]
时间戳00:01:02,50000:01:02.5000:01:02.50
精度毫秒毫秒百分秒
编号每条都有没有没有
换行直接换行直接换行\N
样式<i><b><i>、CSS自成一套样式引擎

把文件贴到上面,格式会自动辨识。没有东西被上传——解析和输出都在这个分页里完成。

修正字幕不同步

这才是大多数人打开字幕转换器的真正理由,而它只是一个数字。输入差多少秒,全部字幕就一起移动。

会被推到零之前的字幕会停在零,而不是被丢掉。会推到负数的平移量通常本来就填错了,而悄悄少掉前 三句话只会让你更晚发现。

固定平移只能修固定的偏差。 如果字幕是「愈到后面差愈多」,那是帧率不合——通常是 23.976 对 25——再怎么平移都对不上。那需要改变速率,这个工具不做。

每一种转换会失去什么

页面会针对你实际贴上的文件列出来,而不是让你事后才发现。

ASS 转 SRT 或 WebVTT,会失去 ASS 之所以是 ASS 的一切。 字体、颜色、位置、卡拉 OK 逐字、 跟着镜头移动的招牌特效——全部都在样式引擎里,没有任何对应。{\an8}{\pos(…)} 这类覆写标签 会被移除而不是留成文字,\N 会变成真正的换行。

WebVTT 转任何东西会失去 cue 设定。 align:start position:10% 是 WebVTT 定位一行字的方式, 而 SRT 根本没有「位置」这个概念。NOTESTYLEREGION 区块也一样。

SRT 和 WebVTT 互转不会失去任何东西,除了 cue 识别码,而那个东西没有别的格式会读。<i><b> 在两边写法完全相同。

任何格式转成 ASS 都会把时间四舍五入到百分秒,因为 ASS 的时间戳就只有这个精度。十毫秒在任何 帧率下都不到一格,肉眼看不出来——但它是真的,绕一圈回来不会比特完全相同。

WebVTT 真的需要那个文件头

一个 .vtt 档如果开头不是 WEBVTT 这个字,它就不是 WebVTT 档,浏览器会拒绝它——而且通常是无声 无息地拒绝,<track> 就是什么都不显示。把 .srt 改名成 .vtt 不会有用,原因就在这里。

另一半是那个逗号:SRT 写 00:00:01,000,WebVTT 写 00:00:01.000。这两种错误做出来的文件在 文字编辑器里看起来都很正常,在播放器里什么都不会发生。

相关

要把字幕挂到 HTML <video> 上,见 SRT 转 WebVTT;要让字幕组的文件在 没听过 ASS 的硬件上播得出来,见 ASS 转 SRT