跳到主要内容
SubtitleMatrix

SRT 字幕格式

格式转换SubRip(SRT)

这种格式能表达什么

文本样式
仅纯文本
屏幕定位
否
卡拉 OK 计时
否
字幕条内换行
是
时间轴
每条字幕都有开始与结束时间
时间精度
1 毫秒
时间以帧号存储
否
从右到左的文字
是

示例

一份典型的 SRT 文件,以及本站读出了什么

文件

1
00:00:01,000 --> 00:00:03,500
Hello there.

2
00:00:03,500 --> 00:00:06,000
<i>Whispering</i> now.
And a second line.

3
00:00:06,000 --> 00:00:09,250
<b>Bold</b> statement.

从中读出了什么

3 cues, 4 lines of text

  00:00:01,000 → 00:00:03,500
    Hello there.
  00:00:03,500 → 00:00:06,000
    Whispering now.   [italic ×1]
    And a second line.
  00:00:06,000 → 00:00:09,250
    Bold statement.   [bold ×1]

Outside the cues:
  nothing — SRT stores cues and nothing else

右侧不是一份转换产物:它是本站从左栏读出的内容,也是这份文件后续每次转换的起点。

一份带脏数据的 SRT 文件,以及仍然读出了什么

文件

# exported by some tool

5
00:00:10,000 --> 00:00:12,000
Second in the file, first in time.

2
00:00:02,000 --> 00:00:05,000
First in time, second in the file.

00:00:06,000 --> 00:00:09,500
No index line at all.

# keep this comment
3
00:00:12,000 --> 00:00:14,500 X1:100 X2:200 Y1:300 Y2:400
Positioned cue.

4
00:00:20,000 --> 00:00:19,000
Ends before it starts.

6
00:00:28,000 --> 00:00:33,000
Long one.

7
00:00:31,000 --> 00:00:32,000
Inside the long one.

从中读出了什么

7 cues, 7 lines of text

  00:00:02,000 → 00:00:05,000
    First in time, second in the file.
  00:00:06,000 → 00:00:09,500
    No index line at all.
  00:00:10,000 → 00:00:12,000
    Second in the file, first in time.
  00:00:12,000 → 00:00:14,500
    Positioned cue.
  00:00:20,000 → 00:00:20,001
    Ends before it starts.
  00:00:28,000 → 00:00:33,000
    Long one.
  00:00:31,000 → 00:00:32,000
    Inside the long one.

Outside the cues:
  nothing — SRT stores cues and nothing else
  except 1 cue that had a comment line above it — that line stays attached to its cue

Reported while reading — repaired or skipped, never silently:
  1 × blocks with no readable timecode (they were skipped)
  1 × cues using SRT's non-standard X1/Y1 screen coordinate extensions
  1 × cues whose end time was not after their start time (they were given a 1ms duration)

真实文件常带 BOM、Windows 换行、时间码前的杂行,或根本读不出的时间码;解析器不抛异常,读不懂的部分会如实报告。

把 SubRip (SRT) 转成其他格式

每一个都完全在你的浏览器里运行。标签标明了那个方向要付出什么代价,打开之前就能看到。

SRT 转 CSV:文本与时间轴完整保留,这一方向没有损失;文件在浏览器里处理,不上传,可批量转换。

这个方向不会丢失内容 —— 源格式的每一项特性在目标格式里都有地方可去。

SRT 转 JSON:这一方向无损,文字、时间轴与换行原样保留;全程在本机完成,不上传,也能批量处理。

这个方向不会丢失内容 —— 源格式的每一项特性在目标格式里都有地方可去。

SRT 转 SBV:这一方向无损,文字、时间轴与换行原样保留;全程在本机完成,不上传,也能批量处理。

这个方向不会丢失内容 —— 源格式的每一项特性在目标格式里都有地方可去。

SRT 转 SMI:文字和时间轴都不会丢,可以直接下载结果;文件不上传,支持一次拖入多个。

这个方向不会丢失内容 —— 源格式的每一项特性在目标格式里都有地方可去。

SRT 转 TTML:这一方向无损,文字、时间轴与换行原样保留;全程在本机完成,不上传,也能批量处理。

这个方向不会丢失内容 —— 源格式的每一项特性在目标格式里都有地方可去。

SRT 转 VTT:文本与时间轴完整保留,这一方向没有损失;文件在浏览器里处理,不上传,可批量转换。

这个方向不会丢失内容 —— 源格式的每一项特性在目标格式里都有地方可去。

转换为此格式

SRT(SubRip)是这个站处理的字幕格式之一,这一页是它的说明:能存什么、不能存什么,以及能把它转成哪些格式。

一条 SRT 字幕由三部分组成:一个编号、一行时间码(00:00:04,126 --> 00:00:08,500)、一到两行正文,字幕之间用空行分隔。时间是毫秒精度,两端都写出来;本站读入时会按起始时间排序,把乱序的条目摆回顺序,并把读不出来的时间码记进有损说明,而不是抛错。

SRT 不声明样式:文件里没有字体、字号、颜色或屏幕位置。现实中的 SRT 常在正文里带 <b>、<i> 标签,多数播放器会照做,但那是约定而不是格式能力,所以把别的格式转成 SRT 时,样式与定位必然丢失。

上方的能力表就是全部清单:某一行写“不支持”,就是转进这个格式时会丢的那一项。所有处理都在浏览器里完成,文件不上传、不需要账号——对受保密协议、病历或播出限制约束的素材,这一点是硬要求。

常见问题

SRT 文件里一条字幕由哪几部分组成?

编号、一行时间码(00:00:04,126 --> 00:00:08,500)和一到两行正文,字幕之间空一行。没有头部,也没有样式段。

SRT 格式能存字体、颜色和屏幕位置吗?

不能。文件不声明字体、字号、颜色或位置;现实中的 <b>、<i> 是播放器的约定,不是格式能力。

SRT 的时间码为什么必须用逗号?

00:00:01,250 是 SRT 的写法,WebVTT 才用点。手工编辑时把逗号写成点,是最常见的“文件打不开”原因。

SRT 文件的时间精度能到多少?

毫秒。00:00:04,126 就是 4.126 秒;这是格式的最细刻度,显示时长再短也按这个精度记录。

SRT 字幕条目乱序时这里会怎么读?

按起始时间重排。这是对文件结构的规范化,不丢文字;原始的行序不再是产物的一部分。

正文为空的 SRT 条目会被当成字幕吗?

会保留为一条空字幕并如实报告,而不是悄悄吞掉;读不懂的时间码也一样,会记进有损说明。

哪些格式能完整接收 SRT 的全部能力?

VTT、SBV、SMI、TTML、JSON 与 CSV。能力表里两侧都为“是”的行,就是转换后仍成立的那一项。