SRT / WEBVTT TIMELINE TOOLS
把字幕文本粘进左边,设置偏移量和帧率换算,点执行。解析、换算、输出全部在你的浏览器里完成,文本不会离开这台设备。
偏移量可以写成秒数(2.5、-1.25),也可以写完整时间码(00:00:02,500、-00:01:00.000)。处理顺序固定是先按帧率比例缩放,再加偏移;如果两样都要用,先确认缩放后的整体节奏对了,再去对第一句话的位置。
两种格式长得很像,但不是一回事。WebVTT 是在 SubRip 基础上扩展出来的,直接把 .srt 改个扩展名当 .vtt 用,多数情况下播放器会拒绝加载。
| 项目 | SubRip | WebVTT |
|---|---|---|
| 扩展名 | .srt | .vtt |
| 媒体类型 | application/x-subrip | text/vtt |
| 制定方 | 由 Brain、Zuggy 等开发者维护的字幕工具所用格式 | 万维网联盟(W3C)标准 |
| 首次发布 | SubRip 程序于 2000 年 3 月 3 日发布 | 2010 年 8 月 10 日 |
| 最新版本 | 程序 1.57.1(2018 年 11 月 14 日) | 2019 年 4 月 4 日 |
| 用途定位 | 互联网上流通的字幕多数是这个格式 | 配合 HTML5 的 track 元素显示定时文本 |
| 差异点 | 具体表现 |
|---|---|
| 文件头 | 首行以 WEBVTT 开头,可选的 UTF-8 字节序标记之后即是这一行;SubRip 没有文件头。 |
| 头部数据 | 首行与第一条字幕之间可以放可选的头部数据。 |
| 时间码小数 | 小数部分用点号分隔,SubRip 用逗号。本站工具按这个区别自动判别输入格式。 |
| 小时位 | WebVTT 的小时位可以省略,SubRip 习惯写满。 |
| 序号 | 时间码之前的编号在 WebVTT 里是可选的。 |
| 注释 | 可以用 NOTE 开头的块写注释,SubRip 没有注释语法。 |
| 元数据 | 可以加入 JSON 风格的元数据信息。 |
| 章节 | 可以选择性地标注章节信息。 |
| 编码 | 扩展字符只支持 UTF-8。 |
| 样式 | C 标签的样式写在配套 HTML 文档所声明的独立 CSS 文件里,而不是像早期 SubRip 那样用 FONT 元素。 |
| 定位 | cue settings 可以定制字幕在画面上的位置。 |
补一段来历:WebVTT 的早期草案是 WHATWG 在 2010 年围绕「HTML5 该支持哪种字幕格式」的讨论之后写的。当时的两个选项是相对成熟、基于 XML 的 TTML,和一个基于广泛使用的 SubRip、更轻量的新标准。最终选了后者,最初叫 WebSRT,沿用 .srt 扩展名,大体基于 SubRip 但并不完全兼容,后来才改名为 WebVTT。2011 年 1 月 13 日的 HTML5 草案报告引入了 track 元素,并补上了 WebVTT 的提示文本渲染规则。
症状是从头到尾都慢同样的一段,比如每句都晚 2 秒出现。原因通常是片源开头多了或少了一段,比如多了一段发行方片头。这种情况加一个常数就能解决:每条字幕的开始和结束时间同时加上同一个偏移量。
本站工具的偏移量允许为负。减出来的负时间会被钳到 0 并在统计栏里报告钳了几条,因为时间码不能是负数,直接写负值的文件多数播放器会报错。
症状是开头对得上,越往后偏得越多。这不是偏移问题,而是整条时间轴的尺度不对,典型成因是字幕是按另一个帧率的片源做的。换算关系是一个比例:
新时间 = 旧时间 × 源帧率 ÷ 目标帧率
常见的几组帧率里,23.976 与 29.97 都不是整数,它们来自 24000/1001 与 30000/1001。把 25 帧的字幕套到 23.976 帧的片源上,比例约为 1.042709,一小时的素材末尾会差出两分半左右,所以必须缩放而不能靠偏移硬凑。
先缩放,再偏移。顺序反了结果会不同,因为缩放会把已经加上去的偏移量一起放大。实际操作上,先只做帧率换算,看看最后一句话对不对得上;对上了再调偏移把第一句话顶到位置。工具里的处理顺序就是这个顺序,统计栏会把本次用的缩放比例和偏移量一起列出来,方便你核对。
00:00:01,5 这种只有一位毫秒的时间码,不同解析器的补零方式不一样,有的当 500 毫秒有的当 5 毫秒。本站工具按右侧补零处理,也就是 1,5 视为 1.500 秒,但最稳妥的做法仍然是老老实实写满三位。