要点速览
SRT 文件(SubRip Subtitle,扩展名
.srt)是一个纯文本字幕文件:由带编号的字幕块组成,每块都有以时:分:秒,毫秒写成的开始和结束时间,以及要显示的文字。它不含视频或音频,可用任何文本编辑器打开,几乎所有播放器和视频平台都接受它。你可以手动写一个,用纯文本生成,或从文字稿中导出,然后在上传前用校验工具检查。
如果你曾在视频播放器里打开字幕,很可能就是一个 SRT 文件在起作用。它是至今仍在日常使用的最古老的字幕格式之一,也是最简单的文件格式之一,这正是它无处不在的原因。
这一页把整个格式集中讲清楚:文件里有什么,每个部分的确切规则及一手来源,如何创建和修复,以及它与 WebVTT 有什么不同。
SRT 文件内部是什么样子?
SRT 文件就是一串字幕块,每个字幕块都有相同的四个部分:序号、时间行、一两行文字,以及一个空行。用记事本或 TextEdit 打开任何 .srt 文件,你都会看到这样的块:
1
00:00:01,600 --> 00:00:04,200
欢迎回到频道。
2
00:00:04,400 --> 00:00:07,900
今天我们来看看
字幕文件到底是怎么工作的。
3
00:00:08,100 --> 00:00:10,000
<i>(关门声)</i>从上往下读,第二个字幕块的意思是:从视频的第 4.4 秒到第 7.9 秒显示这两行字。没有文件头,没有样式部分,也没有二进制数据,所以文件很小,几乎任何程序打开、编辑和保存它都不会出问题。
SRT 格式有哪些规则?
最接近 SubRip 参考文档的,是档案机构和容器格式保存的描述。Library of Congress 的格式说明把时间码写成 时:分:秒,毫秒,即 00:00:00,000,开始和结束之间用箭头 -->,而 Matroska 字幕文档描述的是同样的四部分字幕块。
| 部分 | 规则 | 示例 |
|---|---|---|
| 序号 | 单独一行的整数,从 1 开始递增 | 2 |
| 时间行 | 开始和结束写成 时:分:秒,毫秒,之间用 --> 分隔,两侧各有一个空格 | 00:00:04,400 --> 00:00:07,900 |
| 毫秒分隔符 | 用逗号,不是句点;句点属于 WebVTT | ,400 |
| 文字 | 一行或多行一起显示;文件中的换行就是屏幕上的换行 | 今天我们来看看 |
| 空行 | 结束这个字幕块;下一个序号开始下一块 | (空行) |
| 格式 | 简单的标签,如 <i>、<b> 和 <u>,许多播放器支持,另一些会忽略 | <i>(关门声)</i> |
有两个细节比其他所有问题加起来破坏的文件还多。第一是逗号:用句点写的时间行,00:00:04.400,是 WebVTT 的习惯,有些工具在 SRT 中会拒绝它。第二是空行:缺了空行的字幕块会和下一块连在一起,播放器要么把它们合并,要么丢掉一块。
编码
请把 SRT 文件保存为 UTF-8。它涵盖所有文字,从带重音符号的拉丁字母到阿拉伯文、中文和表情符号,也是当今播放器所期望的。旧版 Windows 工具生成的文件有时用的是某种地区性的旧编码,这就是带重音的字母变成问号或一串怪符号的原因。在文本编辑器中重新另存为 UTF-8 就能解决。有些程序还会在 UTF-8 文件开头加一个看不见的字节顺序标记;多数播放器会忽略它,但如果某个严格的工具拒绝第一条字幕,首先要试的就是保存为不带该标记的 UTF-8。
行长是阅读规则,不是格式规则
格式本身并不限制一行可以有多长;限制来自风格规范。Library of Congress 的说明提到每行 32 个字符的限制,BBC Subtitle Guidelines 对广播规定 37 个字符,Netflix English (USA) Timed Text Style Guide 则允许每行 42 个字符、最多两行。播放器无论如何都会显示更长的行,通常是自动折行,所以这个限制关乎的是人们能否来得及读完字幕,而我们 SRT 校验工具里的阅读速度检查,正是按你选择的规范来衡量这一点。
SRT 文件有什么用途?
- 视频平台:把 SRT 和视频一起上传,观众就能得到可以开关的字幕。
- 桌面和电视播放器:VLC 和许多其他播放器会加载放在视频文件旁边、同名的 SRT。
- 翻译:翻译人员替换文字行而保持时间不变,每种语言得到一个 SRT。
- 编辑软件:常见的视频编辑软件都能把 SRT 作为字幕轨道导入。
- 无障碍:为聋人和听障观众制作的字幕,带有方括号中的声音描述和说话人姓名,都可以放进普通 SRT 的文字行里。
怎样创建 SRT 文件?
从视频自动生成
对于 YouTube 视频,把链接粘贴到 YouTube 文字稿工具中,然后在文字稿页面上点击 SRT:时间来自视频自己的字幕。对于你自己的录音和文件,SozAI 应用可以转写 99 种语言的音频并导出字幕。
从你已有的文字生成
如果你有纯文本的稿件或文字稿,免费的 TXT 转 SRT 生成器会把每个段落变成一个字幕块,并按其长度以每分钟 150 词给出时长,不短于 2 秒,也不长于 8 秒。请先拆分长段落:超过 20 个词的字幕块会触到 8 秒的上限,结果快得读不完。它在你的浏览器中运行,不会上传任何内容。
手动编写
对于一小段视频,在文本编辑器里手写 SRT 完全合理:按四部分的块来写,保存为 UTF-8 的 subtitles.srt,就完成了。超过一两分钟的视频,手动定时就变得繁琐,上面两种方式中的任何一种都更快。
为什么我的 SRT 文件不能用?
| 问题 | 通常的原因 | 解决办法 |
|---|---|---|
| 字幕完全不显示 | 扩展名错误、编码错误,或时间行格式不对 | 用 SRT 校验工具检查文件,它会指出有问题的字幕块 |
| 字幕整体提前或延后相同的时间 | 视频有片头或剪辑,而文件不知道 | 用字幕时间平移工具一次性移动所有时间码 |
| 字幕随着视频播放越来越不同步 | 文件是按另一种帧率定时的,例如 23.976 对 25 | 参见字幕为什么会不同步 |
| 带重音的字母显示成乱码 | 以旧编码保存 | 重新另存为 UTF-8 |
| 平台拒绝该文件 | 它要的是 WebVTT | 用 VTT 与 SRT 转换器转换 |
SRT 与 WebVTT 和基于帧的时码有什么不同?
WebVTT(.vtt)是 HTML5 视频播放器使用的 W3C 格式。W3C WebVTT 规范在句点之后写三位数的毫秒,并让小时可以省略,文件以一行 WEBVTT 文件头开始;它还增加了 SRT 没有的定位和样式。时间是同一个时刻的不同写法,所以两者互转只涉及标点和文件头,在 VTT 与 SRT 中有更详细的说明。
视频编辑软件是按帧而不是毫秒计时的,即 SMPTE 时码,HH:MM:SS:FF。SRT 存的是真实时间,所以当字幕是根据剪辑的时码制作时,帧率决定结果:在每秒 29.97 帧时,一小时的非丢帧时码在真实时间里比标签所说的长 3.6 秒。我们的时码转换器可以把 SMPTE 时码(包括丢帧)转换成 SRT 时间戳,也可以反向转换。
如果你只需要文字而不要任何时间,字幕转文字工具会从 SRT 或 VTT 中去掉编号和时间码,只留下可读的段落。

