ASS 字幕文件格式入门与解析

2025-11-13 09:04:30

目录

ASS 字幕文件格式入门与解析前言1. ASS 是什么?与 SRT 有什么不同?2. ASS 文件结构详解2.1 [Script Info] 脚本信息段2.3 [Aegisub Project Garbage] 编辑器状态保存段2.2 [V4+ Styles] 样式定义段2.3 [Events] 字幕内容段

3. 特效标签(Override Tags)常用标签示例

4. Python 操作 ASS 字幕推荐库:pysubs2手动解析 ASS 结构(Demo版)

5. 字幕编辑与制作工具推荐编辑器:Aegisub快速流程

6. 常见问题 FAQ7. 高级玩法卡拉OK 效果绘制图形

8. 延伸阅读 & 资源

ASS 字幕文件格式入门与解析

前言

最近在处理动态网感字幕,所以研究一下字幕老大哥 ASS 如何去用。

在视频创作、字幕组制作、AI 自动生成字幕等领域,ASS(Advanced SubStation Alpha) 字幕格式以其强大的样式控制、动画特效和图形能力,被广泛用于动漫、MV、短片和教学视频中。

相比传统的 SRT 字幕,ASS 不再局限于“显示文字”,而是能通过精美排版、动态定位、卡拉OK 动画等方式,为视频增添艺术性与视觉冲击力。

本文将从零开始,系统讲解 ASS 文件的结构、语法、样式定义、特效标签,并提供 Python 和工具使用实战,帮助你快速入门并灵活运用 ASS 字幕。

1. ASS 是什么?与 SRT 有什么不同?

特性SRT(SubRip)ASS(Advanced SSA)样式支持❌ 仅支持粗体/斜体✅ 支持字体、字号、颜色、描边、阴影等样式定位能力❌ 仅上下固定位置✅ 像素级坐标定位和移动路径动画与特效❌ 无动画✅ 卡拉OK、淡入淡出、缩放旋转、模糊图形绘制❌ 无支持✅ 矢量图形指令绘制多轨道支持❌ 无层级控制✅ 多层字幕控制(Layer)文件复杂度简单较复杂(分节结构)兼容性极好良好(需播放器支持)

2. ASS 文件结构详解

ASS 文件是 纯文本文件,通常分为以下几个节(Section):

[Script Info]

[V4+ Styles] # 较早版本中为 [V4 Styles]

[Events]

有时还会包含:

[Aegisub Project Garbage]

用于记录 Aegisub 编辑器状态,不影响播放,可以删除。

2.1 [Script Info] 脚本信息段

[Script Info]

Title: Example Subtitle

ScriptType: v4.00+

PlayResX: 1920

PlayResY: 1080

WrapStyle: 0

ScaledBorderAndShadow: yes

字段说明PlayResX/Y虚拟画布分辨率,影响坐标和字号WrapStyle自动换行方式(推荐用 0)ScaledBorderAndShadow是否缩放阴影和边框

2.3 [Aegisub Project Garbage] 编辑器状态保存段

[Aegisub Project Garbage] 是 .ass 字幕文件中 由 Aegisub 编辑器生成的一个特殊部分,通常位于文件的末尾。它并不是 ASS 格式标准的一部分,而是 Aegisub 编辑器(软件)自己为了保存某些编辑器状态、缓存信息而加进去的“垃圾”段(Garbage Section)。

[Aegisub Project Garbage]

Scroll Position: 0

Active Line: 3

Video Position: 12345

...

字段作用Scroll Position编辑器滚动位置Active Line当前光标所在行Video Position视频播放位置其他如 Audio Active Line, Video Zoom, Frame 等都是 UI 编辑状态

⚠️ [Aegisub Project Garbage] 是 Aegisub 的临时缓存段,可以安全删除,不影响字幕播放或显示效果。

2.2 [V4+ Styles] 样式定义段

较早版本中为: [V4 Styles],对比 V4+ 会缺失一些参数;现在默认都是 V4+ 版本。

定义样式模板供字幕使用:

[V4+ Styles]

Format: Name, Fontname, Fontsize, PrimaryColour, OutlineColour, Shadow, Alignment, MarginL, MarginR, MarginV

Style: Default,Arial,48,&H00FFFFFF,&H00000000,1,2,10,10,10

字段说明Fontname / Fontsize字体及大小PrimaryColour文字颜色(ABGR格式)OutlineColour描边颜色Shadow阴影像素值Alignment1-9,对应数字键盘布局MarginL/R/V左右下边距(像素)

v4+ 的最大变化体现在样式定义的部分,新增了许多控制字幕外观的字段,使得字幕的样式更加灵活和强大。

样式字段v4v4+Name有有Fontname有有Fontsize有有PrimaryColour有有(格式从 RGB 改为 BGR,支持 Alpha 通道)。SecondaryColour有有(格式从 RGB 改为 BGR,支持 Alpha 通道)。OutlineColour无新增,用于定义字幕边框颜色。BackColour无新增,用于定义字幕背景颜色。Bold有有Italic有有Underline无新增,用于定义是否加下划线。StrikeOut无新增,用于定义是否加删除线。ScaleX / ScaleY无新增,水平和垂直缩放比例,允许拉伸或压缩字幕。Spacing无新增,用于定义字符间距。Angle无新增,用于定义字幕旋转角度。BorderStyle有有(1 表示边框和阴影,3 表示背景框)。Outline有有(支持更高精度)。Shadow有有(支持更高精度)。Alignment有(固定 1-9 对齐方式)有(与 v4 相同,1-9 表示不同的屏幕位置)。MarginL / MarginR / MarginV有有Encoding有(定义字体编码)有(与 v4 相同)。Alpha无新增,支持透明度控制,通过 &HAA 的形式(例如 &H80 表示 50% 透明)。

v4+ 增加了更多样式字段,例如 Underline、StrikeOut、ScaleX / ScaleY、Spacing、Angle 等,极大地增强了字幕样式的可控性。颜色支持 Alpha 通道(透明度),使得字幕效果更加丰富。

2.3 [Events] 字幕内容段

字幕文本通过 Dialogue: 行定义:

[Events]

Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text

Dialogue: 0,0:00:05.00,0:00:10.00,Default,John,10,10,20,,{\pos(540,240)}Hello, world!

Comment: 0,0:00:05.00,0:00:10.00,Default,John,10,10,20,,我仅仅是一个注释,不会显示的,深藏功与名

Format 字段说明

字段名称含义用途示例Layer字幕的图层决定多个字幕同时出现时的显示优先级,数值越小越优先0(最上层)Start字幕开始时间指定字幕的开始显示时间0:01:23.45(1分23秒450毫秒)End字幕结束时间指定字幕的结束显示时间0:01:30.00(1分30秒)Style字幕样式关联 [Styles] 部分的样式名称,定义字体、颜色等外观属性DefaultName发言者的名字(角色名)标注台词的发言人,如果不需要区分发言人可以留空John(发言人为 John)MarginL字幕与屏幕左边缘的距离(像素)调整字幕在屏幕中的水平位置,优先级低于样式中的对齐规则10(距离左边缘 10 像素)MarginR字幕与屏幕右边缘的距离(像素)与 MarginL 类似,用于调整字幕的水平位置20(距离右边缘 20 像素)MarginV字幕与屏幕垂直边缘的距离(像素)调整字幕在垂直方向的位置,通常表示字幕距离屏幕底部的距离30(距离底部 30 像素)Effect字幕的特殊效果定义字幕的预设效果,例如滚动、卡拉 OK 等karaoke(卡拉 OK 效果)Text字幕的实际文本内容显示在屏幕上的字幕内容,可以包含 ASS 特殊控制符Hello, world!

{\pos(540,240)} 是特效标签

3. 特效标签(Override Tags)

ASS 最强大的功能在于它支持嵌入标签来实时修改样式,格式为 {\tag}。

常用标签

标签功能\b1 / \i1 / \u1粗体 / 斜体 / 下划线\fs50设置字号\c&HFF0000&设置文字颜色(红)\pos(x,y)字幕位置\move(x1,y1,x2,y2)移动动画\fad(500,500)淡入淡出\t(0,500,\fs60)动态变化

示例

Dialogue: 0,0:00:05.00,0:00:10.00,Default,John,10,10,20,,{\pos(540,240)}Hello, world!

4. Python 操作 ASS 字幕

推荐库:pysubs2

安装:

pip install pysubs2

读取和修改 ASS:

import pysubs2

subs = pysubs2.load("example.ass")

for line in subs:

print(f"{line.start} - {line.end}: {line.text}")

# 给每句添加特效标签

for line in subs:

line.text = "{\\fs60\\c&H00FFFF&}" + line.text

subs.save("modified.ass")

手动解析 ASS 结构(Demo版)

推荐直接使用现成的 pysubs2 库,手撸的话挺麻烦的。

def parse_ass(file_path):

with open(file_path, 'r', encoding='utf_8_sig') as f:

content = f.read()

sections = {}

current = None

for line in content.splitlines():

if line.startswith('['):

current = line.strip('[]')

sections[current] = []

elif current:

sections[current].append(line)

return sections

5. 字幕编辑与制作工具

推荐编辑器:Aegisub

功能最强大的 ASS 字幕编辑器,支持:

可视化时间轴样式管理器实时预览卡拉OK 特效生成

快速流程

导入视频/音频编写时间轴 + 字幕内容设置样式或插入特效标签保存为 .ass

6. 常见问题 FAQ

问题解决方案字幕不显示检查播放器是否支持 ASS / 字体是否存在样式无效检查标签语法、颜色格式、样式名称一致性特效不生效部分特效播放器不支持(推荐 PotPlayer / MPC-HC)如何清理 [Aegisub Project Garbage]?删除该段内容即可,完全不影响播放

7. 高级玩法

卡拉OK 效果

Dialogue: 0,0:00:01.00,0:00:04.00,Karaoke,,0,0,0,,{\k20}你 {\k30}好 {\k40}世 {\k50}界!

绘制图形

Dialogue: 0,0:00:25.00,0:00:27.00,Default,,0,0,0,,{\p1}m 0 0 l 100 0 100 100 0 100{\p0}

8. 延伸阅读 & 资源

ASS 字幕标签官方文档pysubs2 GitHubAegisub 官网

天下足球世界杯