返回洞察
使用案例•2022-01-10•约 8 分钟 阅读

如何制作 SRT 文件并为视频添加字幕

如何制作 SRT 文件并为视频添加字幕
TL
Team Laxis
Laxis 团队 @ Laxis

什么是 SRT 文件

SRT 文件是一种纯文本字幕文件,它告诉视频播放器要显示哪些文字,以及确切在什么时候显示。SRT 是 SubRip Subtitle 的缩写,得名于最早生成这类文件的程序 SubRip。文件内部只有一个个编号的块,每个块把一对开始和结束时间码与一两行文字配在一起。

它不包含视频、音频或样式,也不会读取你的视频或从中提取任何东西。这个文件放在视频旁边,由播放器按时钟时间把两者对齐。大多数 SRT 问题都由此而来:时间码错了,字幕就错了。

SRT 文件里面长什么样

用纯文本编辑器打开任何一个 .srt,你都会看到同样的四段式结构在重复:

1
00:00:01,000 --> 00:00:03,400
欢迎观看产品演示。

2
00:00:03,600 --> 00:00:07,200
我们先从仪表板开始,
然后再看报表。

3
00:00:07,400 --> 00:00:10,100
这个界面上的所有数据都是实时的。

这就是一个完整、有效的 SRT 文件。每一部分都必须是这个样子:

部分上例中的写法格式要求
序号2单独占一行的整数。从 1 开始递增,不能跳号。
时间码行00:00:03,600 --> 00:00:07,200HH:MM:SS,mmm --> HH:MM:SS,mmm。时、分、秒各两位,毫秒三位,毫秒前用逗号,两个时间码之间是“空格、箭头、空格”。
字幕文字我们先从仪表板开始,一到两行纯文本。这里换行,屏幕上就换行。
空行(每个块后面的那一空行)一个空行结束一个块。文件末尾要以换行结束。

毫秒前的逗号,是手写字幕文件里最常见的错误。写成 00:00:03.600、用句点分隔的时间码,是 WebVTT 语法,不是 SRT。有的播放器会跳过这个块,有的会拒绝整个文件,还有的会从这里开始不再显示字幕。

所以下面这个是坏的,尽管看起来几乎一模一样:

2
00:00:03.600 --> 00:00:07.200
这个块用了句点,所以不是有效的 SRT。

决定字幕是否易读的规则

语法本身并不阻止你把 300 个字符的一段话在屏幕上只显示五分之一秒。使用最广泛的公开字幕规范来自 Netflix,可以免费查阅。

  • 行长:约 42 个字符。 Netflix 英文定时文本样式指南(English Timed Text Style Guide)把每行上限硬性规定为 42 个字符。
  • 最多两行。 Netflix 的通用定时文本要求把字幕限制在两行以内,除非超过行长上限,否则只用一行。
  • 时长:大约一到七秒。 同一套要求规定每条字幕最短六分之五秒、最长七秒。
  • 阅读速度。 Netflix 对成人节目允许每秒最多 20 个字符,儿童节目最多 17 个。如果你不清楚观众是谁,17 是更稳妥的目标。
  • 在词组断开处换行。 Netflix 的建议是:在标点之后、连词之前和介词之前换行,永远不要把冠词和它修饰的名词拆开,也不要把名和姓拆开。

一句口语通常需要两三个块,所以字幕文字最后会比同一段音频的转写稿更短、删减得更多。

如何制作 SRT 文件

有三种实在的途径,区别主要在于你要打多少字。

在纯文本编辑器里手动输入

对于短片段,这是最快的办法。按上面展示的格式输入各个块,然后保存。会出错的有四个地方:

  • 扩展名。 Windows 会隐藏已知的扩展名,所以记事本会给你存成 captions.srt.txt。把“保存类型”设为“所有文件”,并完整输入 captions.srt。在 macOS 上,文本编辑需要先选择“格式 > 制作纯文本”。
  • 编码。 保存为 UTF-8,不要用 ANSI 或 UTF-16。YouTube 的文档说明 SRT 文件必须是纯 UTF-8。
  • 逗号。 不是句点。
  • 空行。 块与块之间一个空行,块内不能有空行。

先转写,再把文字切成块

音频超过几分钟后,通常的做法是先拿到一份带时间戳的转写稿,再把它切成字幕大小的块。Laxis 支持上传音频和视频文件,并返回带时间戳的转写稿供你加工;上传步骤见我们的如何把音频转写成文字指南,如果源文件是视频,还有一篇单独的教程教你把视频转写成文字。

这两者不是同一种文档:转写稿是带说话人标签的连续段落,而字幕文件被切成有字符上限的定时块。如果这对你来说是新概念,可以看看转写稿到底包含什么。发布之前一定要通读自动生成的结果;专有名词、数字和抢话是错误最集中的地方。

让平台自动生成字幕,再下载文件

如果视频已经在 YouTube 上,YouTube 的自动字幕会生成一条字幕轨,你可以从 YouTube Studio 下载,再用文本编辑器修改。时间通常差不多准,措辞通常需要修改。把它当作起点,而不是成品。

如何把 SRT 文件加到视频上

YouTube

在 YouTube Studio 里打开视频,进入“字幕”,添加语言,选择“上传文件”,勾选带时间信息的选项,再选中你的 .srt。YouTube 把 SubRip(.srt)列为支持的字幕格式之一,并会忽略文件里的任何样式标记。

桌面视频播放器

让字幕文件和视频使用相同的主文件名,并放在同一个文件夹里:

product-walkthrough.mp4
product-walkthrough.srt

VLC 和大多数其他桌面播放器会自动加载它。如果没有加载,把 .srt 拖到正在播放的窗口上,或从播放器的字幕菜单里添加。如果有多种语言,在扩展名前加上语言代码:product-walkthrough.en.srt。

社交平台

在上传界面找找字幕相关的栏位,把 .srt 上传到那里。如果没有这样的栏位,你就需要把文字直接烧录进画面,很多短视频都是这种情况;我们关于如何给 TikTok 视频添加文字的教程介绍了这条路。

网页

HTML5 的 <track> 元素不接受 SRT,它要的是 WebVTT,所以要先转换文件。转换几乎毫不费力,这也是两种格式都能长期并存的原因之一。

外挂字幕与烧录字幕

这个区别决定了上面哪条途径适用于你,而大多数人都是碰巧才遇到它的。

外挂字幕是一个随视频一起提供的独立 .srt 文件。观众可以打开或关闭字幕、切换语言,平台和搜索引擎可以读取其中的文字,改一个错字只需要编辑文本文件再重新上传。视频永远不需要重新编码。问题在于:播放器或平台必须支持字幕轨,而很多并不支持。

烧录字幕,也叫硬字幕或开放字幕,是在导出时直接画进画面里的像素。它们在任何地方都能显示,包括那些静音自动播放、会去掉字幕轨的信息流,但无法关闭或翻译,机器也读不了,而且一个错字就意味着要重新渲染视频。

只要目的地接受,就用外挂 SRT;只有在不接受的地方才把文字烧录进去。

故障排查

字幕不同步

在视频开头检查一次同步,在结尾再检查一次。如果两处的偏差相同,那是固定偏移:给每个时间码加上或减去同样的时长,大多数字幕编辑器一步就能完成。如果偏差越来越大,那是漂移,几乎总是帧率不匹配造成的。平移解决不了漂移;时间必须按两种帧率之间的比例重新缩放。

带重音的字符显示成乱码

带重音符号的名字显示成问号、方框或成对的奇怪拉丁字母,这是编码问题,不是字幕问题。把文件重新保存为 UTF-8;大多数编辑器都会在保存对话框里提供编码选项。

文件完全加载不了

按可能性排序:文件实际上叫 .srt.txt;某个时间码用了句点而不是逗号;块之间缺少空行;序号顺序错乱或重复;或者文件被存成了 RTF 或 DOCX。把它和上面的有效示例逐块对照。

字幕在社交平台上不显示

如果上传界面没有字幕栏位,平台根本就没有收到你的字幕文件。改为把文字烧录进视频。

SRT、VTT 与 ASS 对比

SRTWebVTTASS
全称SubRip SubtitleWeb Video Text TracksAdvanced SubStation Alpha
扩展名.srt.vtt.ass
毫秒分隔符逗号句点百分之一秒,写在句点之后
样式与定位无支持定位,并可通过 CSS 设置样式完整排版:字体、颜色、位置、卡拉 OK 式逐字计时
文件头无文件以 WEBVTT 开头一个脚本信息段
最适合在播放器、编辑器和上传表单之间几乎通用通过 HTML5 <track> 元素在浏览器中播放需要真正掌控文字外观的重度排版工作

当你希望文件在任何地方都能用、又不需要它有什么特别外观时,就用普通的 SRT。

拿到可以直接加工的带时间戳文字

上面的格式整理很快;手动转写一小时的音频可不快。如果这正是挡在你和字幕文件之间的那一步,Laxis AI 会议助手可以用 100 多种语言转写上传的音频和视频,并返回带时间戳的文字,供你切成字幕块。免费版每月包含 300 分钟转写,每次录音上限 45 分钟;付费方案从每用户每月 $15.99 起。

常见问题

SRT 文件和转写稿是一回事吗?

不是。转写稿是带说话人标签、没有长度限制的连续文字,供人单独阅读。SRT 文件则是把同样的文字切成定时的块,每块短到能在视频播放时看完。从一种变成另一种需要编辑:拆句、删减到上限以内、分配时间。

不用专门软件,能打开和编辑 SRT 文件吗?

能。SRT 文件是纯文本,所以记事本、文本编辑、Vim 和 VS Code 都可以。避免使用 Microsoft Word 和 Google 文档这类文字处理软件,它们会存成自己的格式,把文件弄坏。如果你要调整的是几百个时间码而不是改一个词,专门的字幕编辑器能真正省下时间。

添加 SRT 文件会改变视频文件本身吗?

不会。外挂 SRT 不会动视频:播放器同时读取两个文件,在播放时把文字叠加在画面上,所以只编辑 SRT 就能修正错字。烧录字幕则不同,它们在导出时就被固定进画面,修改需要重新渲染。

为什么我的字幕一开始是同步的,后来却越来越偏?

误差越来越大,说明是帧率不匹配,而不是起始时间错了。按 23.976 fps 母版定时的字幕,放在 25 fps 的副本上播放,就会稳定地越落越后。把每个时间码平移固定的时长解决不了这个问题;时间必须按两种帧率之间的比例重新缩放。

一行字幕应该容纳多少个字符?

Netflix 英文定时文本样式指南把每行上限定为 42 个字符,每条字幕最多两行。Netflix 还规定了字幕在屏幕上的最短时长为六分之五秒、最长为七秒,成人节目的阅读速度上限为每秒 20 个字符。这些数字几乎适用于任何视频,是一个合理的默认值。

SRT 字幕能帮助视频被人找到吗?

外挂字幕文件为平台提供了视频的机器可读文字,而烧录字幕做不到这一点。这会不会影响排名取决于平台,没有哪个诚实的回答能保证结果。更明确的好处是覆盖面:字幕让视频在静音时也能看,也方便聋人和听障观众观看。