将 SubRip(.srt)转换为 Advanced SubStation Alpha
把一个普通的 .srt 字幕文件变成一条带样式的 .ass 字幕轨道,拥有规范的样式定义和百分之一秒精度的时间码,可直接用于需要 ASS 格式的播放器和编辑软件。全程无需上传。
你的文件绝不会接触任何服务器。 本页面的每一次转换都使用 JavaScript 的 FileReader API 在你的浏览器本地完成。不会上传、记录或存储任何内容。可安全用于机密的 Zoom/Teams 录制内容、未发布的视频、以及法律访谈记录。
SRT 转 ASS 的转换原理
SubRip(.srt)是使用最广泛、结构最简单的字幕格式:一个字幕序号、一个 HH:MM:SS,mmm --> HH:MM:SS,mmm 格式的时间码范围,以及一两行文本。Advanced SubStation Alpha(.ass),这是 Aegisub、许多字幕组以及 MPV、VLC 等高级播放器使用的格式,其结构要复杂得多:一个 [Script Info] 头部、一个定义字体、颜色、轮廓和屏幕位置的 [V4+ Styles] 区块,以及一个 [Events] 区块,其中每一行对话都引用其中一种样式。这是完全不同的结构,不仅仅是时间码分隔符不同。
SubToolDesk 的 SRT 转 ASS 转换器会在你的浏览器本地解析 SRT 字幕块,将每一个时间码从 SRT 的毫秒格式转换为 ASS 的百分之一秒 H:MM:SS.cc 格式,并输出一个完整、有效的 .ass 文件:一个可用的 [Script Info] 区块、一个为通用观看而设置尺寸和颜色的单一Default样式,以及在 [Events] 区块中每个字幕块对应一行 Dialogue:。
如何将 SRT 转换为 ASS(分步说明)
- 将你的
.srt文件拖到上方的转换器中,或点击「上传文件」来浏览选择。 - 检查自动检测到的格式徽章显示为 SRT。
- 如果你的源文件包含说话人标签或格式标签,打开去除说话人标签或去除格式标签。
- 点击下载以保存一个有效的
.ass文件,文件名与你的原始文件一致。
为什么要把 SRT 转换成 ASS
一个普通的 .srt 文件完全无法携带任何样式信息,只有带时间码的文本。转换为 ASS 几乎总是因为目标播放器或编辑软件需要对这些文本做更多事情:
- 为字幕组制作卡拉OK式的时间效果:ASS 的逐音节覆盖标签是字幕组和动画发布组制作卡拉OK效果的标准方式,这是 SRT 完全没有机制实现的。
- 在屏幕上为对话定位:ASS 可以通过边距和对齐覆盖,把一行字幕放置在画面的任意位置,这对招牌翻译或避开原视频中已有的屏幕文字很有用。
- 为可访问性或风格添加带颜色或轮廓的文字:一个带颜色、带轮廓的 Default 样式(本转换器会自动写入)在明亮或画面繁杂的视频上也能保持清晰可读,而普通的 SRT 文本无法保证这一点。
- Aegisub、MPV 和 VLC 工作流程:Aegisub 是专门围绕 ASS 格式构建的,MPV 和 VLC 都能渲染它的样式覆盖,因此从这些软件开始的项目从一开始就需要 ASS,而不是 SRT。
- 逐行的字体和大小覆盖:ASS 允许单独的 Dialogue 行在不改动基础样式的情况下覆盖字体、大小或颜色,这是 SRT 的纯文本语法无法做到的。
- 拥有一个可以继续构建的样式化基础文件:转换会先搭建好
[Script Info]、[V4+ Styles]和[Events]的结构,这样在 Aegisub 中剩下唯一要做的工作就是添加样式本身。
转换前后对比:一个真实示例
一段简短的两行 SRT 节选,包含一个斜体标签和一个说话人前缀,在开启去除格式标签、关闭去除说话人标签(本页面的默认状态)的情况下进行转换:
1 00:00:03,500 --> 00:00:06,120 <i>谢谢大家今天加入这次通话。</i> 2 00:00:06,500 --> 00:00:09,800 Jordan:我们开始吧。
[Script Info] Title: SubToolDesk Export ScriptType: v4.00+ ... [V4+ Styles] Format: Name, Fontname, Fontsize, ... Style: Default,Arial,20,&H00FFFFFF,... [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:03.50,0:00:06.12,Default,,0,0,0,,谢谢大家今天加入这次通话。 Dialogue: 0,0:00:06.50,0:00:09.80,Default,,0,0,0,,Jordan:我们开始吧。
两个字幕序号都消失了,被 ASS 所需的 [Script Info] 和 [V4+ Styles] 区块取代。每个时间码都从 SRT 的逗号分隔毫秒格式变成了 ASS 的句点分隔百分之一秒格式(00:00:03,500 变成了 0:00:03.50)。<i> 标签消失了,因为去除格式标签已开启;Jordan:保留在了文本中,因为去除说话人标签已关闭,而且也没有单独的 Name 字段可以把它移过去。
生成的 .ass 文件包含什么内容
输出结果是一个完整、可直接用于播放器的 ASS 文件,而不仅仅是一个片段。它包括一个真正的 [Script Info] 区块、一个 [V4+ Styles] 区块,其中包含一个名为Default的样式(白色文字,带有细描边和阴影以便在视频上保持清晰可读,底部居中),以及一个 [Events] 区块,其中每个字幕块对应一行 Dialogue:,每一行都引用这个 Default 样式。之后你可以在 Aegisub 中打开结果来调整字体、颜色或位置,结构性的基础工作已经完成。
转换前后
SRT 输入: 1 00:00:09,400 --> 00:00:12,900 营收同比增长了百分之八。 ASS 输出: [Script Info] Title: SubToolDesk Export ScriptType: v4.00+ ... [V4+ Styles] Format: Name, Fontname, Fontsize, ... Style: Default,Arial,20,&H00FFFFFF,... [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:09.40,0:00:12.90,Default,,0,0,0,,营收同比增长了百分之八。
为什么 ASS 中的时间码看起来不一样
SRT 精确到毫秒(00:00:09,400);ASS 精确到百分之一秒,即一秒的百分之一,使用不同的分隔符,且小时位不补零(0:00:09.40)。转换器会自动处理这种舍入,因此源文件中从 9.4 秒开始的字幕块,在输出结果中会落在正确的百分之一秒位置,无需手动重新计算。
为什么人们会从 SRT 转向 ASS
- 字幕组和动画发布组,在这里 ASS 的样式和定位覆盖是制作卡拉OK效果、招牌翻译和按角色分配颜色的事实标准。
- 在 Aegisub 中工作的编辑人员,Aegisub 是围绕 ASS 格式构建的,它期望得到的是原生的 ASS 项目文件,而不是一个普通的 SRT 导入文件。
- 渲染样式覆盖的播放器和处理流程,例如 MPV 或某些流媒体编码器,在这些场合 SRT 的纯文本完全无法传递定位或字体指令。
- 从现有的纯文本记录开始制作带样式的字幕项目,使用这个转换器先得到一个结构有效的 ASS 文件,再手动添加样式。
架构层面的隐私保护,而非仅是政策承诺
解析 SRT 和写入 ASS 文件都是通过运行在你浏览器标签页中的 JavaScript 完成的。这项功能根本没有可供访问的上传接口,这一点无论是对于发布前的字幕组脚本,还是对于机密的企业视频都同样重要。
这个转换器会保留什么、去除什么
会保留:
- 口语对话文本中的每一个字词,保持原有的顺序和标点。
- 每个字幕块的时间信息,从 SRT 的毫秒精度重新格式化为 ASS 的百分之一秒精度,且不会产生偏差。
- 每个源字幕块对应一行
Dialogue:,顺序与它们在 SRT 文件中出现的顺序相同。 - 当去除说话人标签关闭时,保留像
Jordan:这样的说话人标签前缀。
会去除:
- SRT 的连续字幕序号。
- 开启去除格式标签后,去除
<i>、<b>、<u>之类的行内格式标签。 - 开启去除说话人标签后,去除像
Jordan:这样的说话人标签前缀。
常见问题及解决方法
- 输出中的对话文本里仍然有
<i>或<b>标签:打开去除格式标签;只有在你没有改动过它的情况下,它才会默认开启。 - 像
Jordan:这样的说话人名字仍然粘在对话文本上:打开去除说话人标签;本页面中它默认是关闭的,所以除非你主动开启,名字会原样保留。 - 在 Aegisub 中,每一行都以相同的字体、大小和颜色呈现:这是正常现象,本转换器只写入单一的 Default 样式;之后在 Aegisub 中打开文件来创建额外的样式或逐行覆盖。
- 转换后字幕看起来稍微不同步: ASS 只保存百分之一秒的精度,因此一个精确到毫秒的字幕块可能会偏移最多百分之一秒,这远低于可察觉的范围;如果偏差比这更大,请检查原始 SRT 的时间码。
- 转换器上方的格式徽章没有显示 SRT:严重截断的粘贴内容,或者实际上是 VTT 的文件,都可能破坏检测;请确认原始文本仍然带有连续的字幕序号和逗号分隔的时间码。
- 带声调符号的字母或非英文文本显示为乱码,例如
é:说明源.srt文件没有以 UTF-8 编码保存;请重新导出或以 UTF-8 重新保存后再上传。
这个工具有意不做的事情
它只写入一个 Default 样式,不会尝试猜测卡拉OK时间、按角色分配颜色或定位覆盖,这些需要在你拥有一个有效的基础文件之后,手动(或借助 Aegisub)完成。如果你朝相反方向转换,它也不会把一个已有 .ass 文件自身的样式重新解析出来;这个工具是为了把普通字幕文本转换成有效的 ASS 结构而构建的,而不是为了对一个已经带样式的文件做往返转换。
常见问题
如何把 SRT 文件转换为 ASS?
将你的 .srt 文件拖到上方的转换器中,或将其内容粘贴到左侧面板。一旦格式徽章确认为 SRT,点击下载。一个完整、有效的 .ass 文件会在你的浏览器中生成。
这个 ASS 文件能在 Aegisub、VLC 或 MPV 中正确打开吗?
可以。输出结果包含一个有效的 [Script Info] 头部、一个带有 Default 样式的 [V4+ Styles] 区块,以及一个带有格式正确的 Dialogue 行的 [Events] 区块,这正是这三者都需要的结构。
转换器会添加任何样式,还是只转换文本?
它会定义一个通用的 Default 样式(白色文字,带细描边和阴影,底部居中),让文件可以立即使用。它不会添加卡拉OK时间、按角色分配颜色,或自定义定位,这些需要在像 Aegisub 这样的编辑软件中手动完成后续步骤。
为什么 ASS 输出中的时间码看起来不一样?
ASS 使用百分之一秒精度,分隔符也与 SRT 的毫秒格式不同(0:00:09.40,而不是 00:00:09,400)。转换器会自动处理这种转换。
进行这次转换时,我的字幕文件会被上传到任何地方吗?
不会。解析 SRT 和生成 ASS 文件完全在你浏览器的 JavaScript 引擎中进行。没有任何内容会发送到服务器。
YouTube 或 Vimeo 会接受 .ass 字幕文件吗?
不会。大多数上传表单,包括 YouTube 和 Vimeo,只接受 SRT(有时也接受 VTT),不接受 ASS。为能渲染其样式的编辑软件和播放器(Aegisub、MPV、VLC)转换为 ASS,但为平台上传保留一份 SRT 版本。
ASS 比 SRT 更好吗,还是我应该直接坚持用 SRT?
这取决于你的需求。ASS 支持定位、卡拉OK时间,以及 SRT 根本无法表达的逐行字体与颜色覆盖;SRT 更小、更简单,在通用分发场景中被广泛接受得多。当你的工作流程确实需要样式时使用 ASS;其他情况使用 SRT。