SSubToolDesk
zh
SRT → ASS

将 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 节选,包含一个斜体标签和一个说话人前缀,在开启去除格式标签、关闭去除说话人标签(本页面的默认状态)的情况下进行转换:

Before
1
00:00:03,500 --> 00:00:06,120
<i>谢谢大家今天加入这次通话。</i>

2
00:00:06,500 --> 00:00:09,800
Jordan:我们开始吧。
After
[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。