音视频开发09:SRT、ASS、SAA、VTT字幕介绍

Last updated on December 9, 2024 pm

image-20241209171329186

1. 定义

音视频的字幕是指以文本形式显示在屏幕上的内容,这些内容通常代表了音频中的对话、叙述以及其他重要的声音元素。字幕不仅有助于提高视频内容的理解度,而且对于那些有听力障碍或是在静音环境中观看视频的人来说尤为重要。此外,字幕还可以用于翻译不同语言的内容,从而扩大视频的受众范围

2. 字幕的种类

根据其功能和使用场景,字幕可以分为几种不同类型:

  • 开放式字幕(硬编码字幕):这类字幕直接嵌入到视频帧中,成为视频的一部分,无法关闭。它们适用于需要永久性地将字幕信息与视频结合的情况。
  • 隐藏式字幕(软字幕/外挂字幕):用户可以选择是否开启这类字幕,并且可以根据需要调整样式。它们通常作为独立文件存在,如SRT、ASS等格式,便于管理和更新。
  • 实时字幕:这种字幕是在直播或其他即时活动中生成的,能够快速响应现场发生的口语交流,为观众提供即时的文字反馈

3. 字幕格式

常见的字幕格式包括:

  1. **SRT (SubRip Text)**:最常见的字幕格式之一,文本文件,每行包含时间码和字幕内容。
  2. **ASS (Advanced SubStation Alpha)**:功能强大的字幕格式,支持复杂的字幕样式和特效。
  3. **SSA (SubStation Alpha)**:早期的字幕格式,功能不如ASS强大,较少使用。
  4. **VTT (WebVTT)**:用于网页视频的字幕格式,类似于SRT5

3.1 SRT字幕

SRT(SubRip Text)字幕格式以其简洁性和广泛的兼容性著称,它由纯文本构成,每个字幕段落包括四个主要部分:序号、时间码、字幕文本以及一个空白行来分隔不同的字幕片段。下面我们将通过具体的例子详细介绍SRT字幕文件的结构和使用方法。

image-20241209172234191

SRT 字幕的基本结构

序号

每个字幕段都有一个唯一的序号,这个数字从1开始递增,表示字幕出现的顺序。虽然序号本身并不直接影响播放时的显示效果,但在实际应用中,它有助于保持字幕的逻辑顺序正确无误。

时间码

紧跟在序号之后的是时间码,它定义了字幕何时出现及消失。时间码遵循hh:mm:ss,mmm --> hh:mm:ss,mmm的格式,其中hh代表小时,mm代表分钟,ss代表秒,而mmm则表示毫秒。例如:

1
2
3
1
00:00:29,740 --> 00:00:31,280
福姬套餐~

在这个例子中,字幕“福姬套餐~”将在视频播放到第29秒740毫秒时出现,并持续到第31秒280毫秒后消失。

字幕文本

接下来是具体的字幕文本,它可以是一行或多行。对于多语言字幕,不同语言的内容可以通过换行分隔开来。例如,在同一时间段内可以先显示英文再显示中文翻译:

1
2
3
2
00:00:31,400 --> 00:00:32,240
炒炸酱面

这里,“炒炸酱面”会在指定的时间范围内显示在屏幕上。

空白行

每一组字幕之间必须有一个空行来分隔不同的字幕片段,这标志着上一段字幕的结束和新一段字幕的开始。空白行的存在确保了字幕文件的可读性和结构清晰度。

样式与格式化示例

尽管SRT本质上是一个简单的文本文件,但它也支持一些基本的HTML标签来进行格式化,如粗体(<b>)、斜体(<i>)、下划线(<u>)以及字体颜色(<font color="...">)。需要注意的是,并非所有的播放器都支持这些样式标记,因此在实际使用时应该考虑目标平台的支持情况。例如:

1
2
3
3
00:00:32,360 --> 00:00:33,300
<b>炒拉面</b>

这段代码会让“炒拉面”以粗体形式显示。

实际应用中的SRT文件示例

以下是一个完整的SRT字幕文件示例,摘自电影《阿凡达》的中英双语字幕:

1
2
3
4
3
00:00:39,770 --> 00:00:41,880
在经历了一场人生巨变之后
When I was lying there in the VA hospital ...
1
2
3
4
4
00:00:42,550 --> 00:00:44,690
我被送进了退伍军人管理局医院 ...
with a big hole blown through the middle of my life,
1
2
3
4
5
00:00:45,590 --> 00:00:48,120
那段时间我经常会梦到自己在飞翔 ...
I started having these dreams of flying.
1
2
3
4
6
00:00:49,740 --> 00:00:51,520
终获自由
I was free.

在这个例子中,我们可以看到每一段字幕都有其对应的序号、时间码和文本内容,并且通过空白行分隔开各个字幕段。

编码方式

SRT文件默认采用Windows-1252编码,但也可以保存为其他编码格式,如UTF-8或UTF-16,带或不带字节顺序标记(BOM)。为了确保跨平台兼容性,建议尽量使用UTF-8编码。特别是当涉及到非ASCII字符时,正确的编码选择尤为重要,因为错误的编码可能导致乱码问题。

创建与编辑SRT文件

创建SRT文件的过程相对直接,用户可以直接用文本编辑器手动编写,也可以借助专门的字幕编辑软件,如Aegisub、Subtitle Edit等。此外,还有在线服务和移动应用程序可以帮助生成或调整现有的SRT文件。对于批量处理或者需要高精度的时间轴同步,还可以考虑利用语音识别技术自动生成初步的SRT文件,然后进行人工校对和完善。

综上所述,SRT字幕格式凭借其易于理解和操作的特点,成为了视频字幕领域不可或缺的一部分。

3.2 ASS字幕

ASS(Advanced SubStation Alpha)是一种比SSA更为高级的字幕格式,它不仅支持基本的文本显示,还允许用户添加复杂的样式、特效以及时间轴控制。ASS 文件通常以 .ass 作为文件扩展名,并且是纯文本文件,这意味着它们可以用任何文本编辑器手工编辑,但必须注意遵循特定的规则以确保正确解析。

ASS 字幕的基本结构

一个典型的 ASS 文件由几个部分组成:[Script Info][V4+ Styles][Events]。每个部分都有其独特的功能和用途。

[Script Info]

这部分包含了脚本的头部信息和总体描述。例如:

1
2
3
4
5
6
7
8
9
10
[Script Info]
; This is a Sub Station Alpha v4 script.
Title: Neon Genesis Evangelion - Episode 26 (neutral Spanish)
Original Script: RoRo
Script Updated By: version 2.8.01
ScriptType: v4.00+
Collisions: Normal
PlayResY: 600
PlayDepth: 0
Timer: 100,00

这里定义了诸如标题 (Title)、原作者 (Original Script) 等元数据,以及一些技术参数如播放分辨率 (PlayResX, PlayResY) 和颜色深度 (PlayDepth)。Timer 属性用于调整字幕的时间轴速度,不过现代渲染器通常会忽略这一设置。

[V4+ Styles]

这是样式定义的部分,其中每一个被脚本使用的样式都应该在此处定义。格式如下:

1
2
3
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,0.5,0,2,10,10,10,1

每一项都对应着不同的视觉属性,比如字体名称 (Fontname)、字体大小 (Fontsize)、主要颜色 (PrimaryColour) 等等。Alignment 属性决定了字幕在屏幕上的对齐方式,而 MarginL, MarginR, MarginV 则设定了字幕与屏幕边缘的距离。

[Events]

这是最重要的部分之一,因为它包含了所有实际出现在屏幕上的内容。每条事件记录了一个具体的字幕或注释,并指定了它的开始时间和结束时间、所使用的样式以及其他可能的效果。例如:

1
2
3
4
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:09.07,0:00:13.14,Default,0,0,0,,我的爱从相遇的那一刻起
Dialogue: 0,0:00:13.27,0:00:17.41,Default,0,0,0,,我的生活一切都被你占据

Layer 属性控制字幕的叠放顺序;StartEnd 分别表示字幕出现和消失的时间点;Style 指向之前定义好的样式;Text 包含了要显示的具体文字。

样式与格式化示例

除了上述基础元素外,ASS 还提供了丰富的内联标签来实现更加精细的排版和动画效果。例如:

  • \b1 开启粗体,\b0 关闭粗体;
  • \i1 开启斜体,\i0 关闭斜体;
  • \u1 开启下划线,\u0 关闭下划线;
  • \k<time> 用于卡拉 OK 效果,指定高亮移动的速度;
  • \move(<x1>, <y1>, <x2>, <y2>) 实现字幕从一个位置移动到另一个位置;
  • \fad(<in-time>, <out-time>) 创建淡入淡出效果。

以下是一个使用这些标签的例子:

1
2
Dialogue: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,,{\b1\u1\c&HFF0000&}这是一段{\i1}带{\i0}有{\b0\u0}样式的文本。
Dialogue: 0,0:00:05.00,0:00:10.00,Default,,0,0,0,,{\move(100,100,500,100)\fad(1000,1000)}这段文字会从左下角滑动到右下角并伴有淡入淡出。

在这个例子中,第一行应用了粗体和下划线,同时将颜色更改为红色,并且中间有一部分为斜体;第二行则设置了从屏幕左侧到右侧的移动路径,并且加入了1秒的淡入淡出过渡。

实际应用中的ASS文件示例

考虑到ASS的强大功能,它可以用来创建非常复杂且富有创意的字幕效果,尤其是在动漫领域。下面给出一段来自《命运石之门》的日语台词及其对应的ASS代码:

1
2
Dialogue: 0,0:01:23.45,0:01:27.67,CustomStyle,,0,0,0,,{\an7\b1\c&HFFFF00&\3c&H0000FF&}OKERU!
Dialogue: 0,0:01:27.67,0:01:31.89,CustomStyle,,0,0,0,,{\an8\i1\k50}我们终于可以一起制作游戏了!

这里,“CustomStyle” 是预先定义好的一种样式,而 {} 内的内容则是额外添加的临时样式覆盖。第一句台词位于屏幕顶部中央(an7),并且采用了黄色字体配蓝色边框;第二句则位于顶部右侧(an8),带有卡拉 OK 式的逐字高亮效果(\k50 表示每个字符高亮持续50毫秒)。

编码方式

与SRT类似,ASS也推荐使用UTF-8编码,特别是当涉及到多语言支持时。正确的编码选择对于避免乱码至关重要。此外,由于ASS支持更多样化的字体和颜色配置,因此还需要确保目标设备上安装了相应的字体文件,或者考虑嵌入所需字体以便于跨平台播放。

3.3 SSA字幕

在上面我们介绍了ASS字幕,ASS字幕其实是SSA字幕格式的高级版本,在SSA的基础上增加了一些额外的功能。下面用一个例子介绍下ASS和SSA之间的区别和联系。

假设我们要为一段视频添加带有特效的字幕,这段视频中有一句台词:“欢迎来到未来世界”。

SSA 字幕文件示例

首先,我们看看如何用 SSA 格式创建这段字幕。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Script Info]
; This is a Sub Station Alpha v4 script.
Title: Future World - Episode 1
Original Script: Example Author
ScriptType: v4.00
Collisions: Normal
PlayResX: 640
PlayResY: 480
Timer: 100,00

[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,1,2,2,2,10,10,10,0,0

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:05.00,0:00:07.00,Default,,0,0,0,,{\c&HFF0000&}欢迎{\c&H00FF00&}来到{\c&H0000FF&}未来世界!

在这个 SSA 文件中:

  • [Script Info] 部分定义了脚本的基本信息,如标题、原作者等。
  • [V4 Styles] 定义了一种默认样式 Default,指定了字体名称、大小、颜色等属性。
  • [Events] 包含了一个对话事件,它设置了开始时间和结束时间,并使用了内联标签 \c 来改变文本的颜色,以实现多彩效果。

ASS 字幕文件示例

接下来,我们将相同的台词转换成 ASS 格式,同时增加一些额外的功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Script Info]
; This is an Advanced Sub Station Alpha v4+ script.
Title: Future World - Episode 1
ScriptType: v4.00+
Collisions: Normal
PlayResX: 640
PlayResY: 480
Timer: 100,00

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,1,1,2,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:05.00,0:00:07.00,Default,,0,0,0,,{\an8\c&HFF0000&\b1}欢迎{\c&H00FF00&\b0}来到{\c&H0000FF&}未来世界!{\fad(500,500)}

在这个 ASS 文件中:

  • [Script Info] 部分同样提供了脚本信息,但指明这是 v4.00+ 版本。
  • [V4+ Styles] 中增加了更多样式属性,例如 ScaleX, ScaleY, Spacing, Angle 等,允许对文本进行更精细的控制。
  • [Events] 部分不仅实现了与 SSA 相同的多彩效果,还加入了粗体切换 (\b1, \b0) 和淡入淡出效果 (\fad)。

区别和联系

区别
  1. 版本:ASS 是基于 SSA v4.00+ 的改进版本,具有更多的功能和支持。
  2. 样式定义:ASS 在 [V4+ Styles] 中引入了额外的样式属性,如 ScaleX, ScaleY, Spacing, Angle 等。
  3. 内联标签支持:ASS 扩展了 SSA 的内联标签功能,新增了如 \t (临时样式覆盖) 等标签,并增强了现有标签的效果,比如卡拉 OK 效果 (\k)。
  4. 高级特效与动画:ASS 支持更复杂的动画效果,包括路径上的移动 (\move),旋转,缩放变换等。
  5. 字符编码:ASS 设计之初就考虑到了更好的国际化支持,对于非拉丁字符集有更好的处理方式。
联系
  • 结构相似:两者都遵循类似的文件结构,包括 [Script Info], [V4/V4+ Styles], [Events] 等部分。
  • 向后兼容:大多数现代播放器能够解析 SSA 和 ASS 文件,因为 ASS 向后兼容 SSA。
  • 基本功能一致:在基础功能上,SSA 和 ASS 提供了相同的核心特性,如设置字体、颜色、对齐方式等。

综上所述,尽管 SSA 和 ASS 在细节上有许多不同之处,但它们共享很多共同点,特别是对于普通用户来说,两者都能很好地满足日常字幕制作的需求。然而,如果你需要利用更先进的特效或希望确保最佳的跨平台兼容性,那么选择 ASS 可能会是一个更好的决定。

3.4 VTT字幕

WebVTT(Web Video Text Tracks)是一种专门为网络视频设计的字幕格式,它被广泛应用于 HTML5 <video> 元素中。WebVTT 文件通常以 .vtt 作为扩展名,并且是纯文本文件,易于编辑和解析。与 SSA/ASS 等格式相比,WebVTT 更加简洁,专注于提供基本的字幕功能,如时间戳、文本内容以及简单的样式控制。下面将通过一个具体的例子来详细介绍 WebVTT 的结构和用法。

WebVTT 文件的基本结构

每个 WebVTT 文件都必须以 WEBVTT 开头,紧接着是一个空行,然后是各个字幕段落。每个段落由以下几部分组成:

  1. 标识符(可选):可以为每个字幕段落指定一个唯一的标识符。
  2. 时间码:定义了字幕显示的时间范围,格式为 HH:MM:SS.mmm --> HH:MM:SS.mmm,其中 HH 表示小时,MM 表示分钟,SS 表示秒,mmm 表示毫秒。
  3. 设置(可选):用于指定字幕的位置、对齐方式等属性。
  4. 文本内容:即实际要显示的字幕文字,可以包含多行。
示例:简单对话场景

假设我们有一段视频,其中一个人说:“欢迎来到未来世界。” 我们可以创建如下的 WebVTT 文件:

1
2
3
4
5
WEBVTT

1
00:00:05.000 --> 00:00:07.000
欢迎来到未来世界。

在这个例子中:

  • WEBVTT 表明这是一个 WebVTT 文件。
  • 数字 1 是字幕段落的唯一标识符(可选),有助于管理和引用特定的字幕。
  • 时间码 00:00:05.000 --> 00:00:07.000 指定了字幕从第 5 秒开始,在第 7 秒结束。
  • 最后一行是实际要显示的文字内容。

增强样式的使用

虽然 WebVTT 主要关注于提供清晰易读的字幕,但它也允许一定程度上的样式定制。例如,你可以使用 HTML 标签或内联 CSS 来改变字体颜色、大小、样式等。此外,WebVTT 还支持一些特殊的标签来实现更复杂的效果。

示例:带样式的字幕

考虑同样的台词,但我们想让它更引人注目,比如给“欢迎”两个字加上红色高亮,并让整个句子居中显示:

1
2
3
4
5
WEBVTT

1
00:00:05.000 --> 00:00:07.000 line:50% position:50% align:center
<c.red>欢迎</c>来到未来世界。

在这个例子中:

  • line:50% position:50% align:center 设置了字幕在屏幕上的位置和对齐方式,使它位于屏幕中央。
  • <c.red></c> 是 WebVTT 特有的标记,用来包裹需要应用样式的文本。这里我们将“欢迎”两个字的颜色设置为红色。

使用 CSS 类进行样式化

对于更复杂的样式需求,可以结合 CSS 类来进行处理。首先,在 WebVTT 文件中定义类名,然后在网页上关联相应的 CSS 样式规则。

示例:使用 CSS 类

继续上面的例子,这次我们将为“欢迎”添加一个自定义的 CSS 类:

1
2
3
4
5
WEBVTT

1
00:00:05.000 --> 00:00:07.000 line:50% position:50% align:center
<c.vwelcome>欢迎</c>来到未来世界。

接着,在网页中的 <style> 标签或者外部样式表里添加如下 CSS 规则:

1
2
3
4
::cue(.vwelcome) {
color: red;
font-weight: bold;
}

这样,当播放器渲染这个 WebVTT 文件时,“欢迎”这两个字不仅会变成红色,还会显得更加粗重。

WebVTT 的高级特性

除了上述基本功能外,WebVTT 还支持其他类型的文本轨道,如章节列表、描述性音轨等。这些功能使得 WebVTT 成为了一个非常灵活且强大的工具,适用于各种多媒体应用场景。

示例:章节列表

如果想要为视频添加章节导航,可以使用 WebVTT 创建一个章节轨道文件:

1
2
3
4
5
6
7
8
9
10
11
12
WEBVTT

CHAPTERS

00:00:00.000 --> 00:01:00.000
Introduction

00:01:00.000 --> 00:02:30.000
Main Content

00:02:30.000 --> 00:03:00.000
Conclusion

这段代码定义了一个包含三个章节的列表,用户可以通过点击章节标题快速跳转到相应的时间点。

总结

WebVTT 是一种轻量级但功能丰富的字幕格式,特别适合在网络环境中使用。它的语法简单直观,易于学习和实现,同时提供了足够的灵活性来满足大多数字幕制作的需求。无论是简单的对话字幕还是带有复杂样式的提示信息,WebVTT 都能有效地支持。更重要的是,由于它是 HTML5 标准的一部分,因此可以在所有现代浏览器中无缝工作,确保了良好的兼容性和用户体验。

4. 字幕制作

4.1 字幕的制作工具

有许多专业的字幕制作软件可以帮助用户轻松制作和编辑字幕,例如:

  1. **KBuilderTools (小灰熊字幕制作软件)**:支持MV字幕制作,操作简单。
  2. Sayatoo卡拉字幕精灵:支持自定义设置字幕的字体、颜色、布局等参数。
  3. Srt字幕制作帮手:专门针对SRT字幕的编辑软件,操作简便。
  4. **字幕大师 (OKVoice)**:采用高精准语音识别技术,支持自动匹配音视频中的语音与字幕。
  5. Arctime Pro:专业字幕制作软件,支持多种创新技术,如字幕块绑定、自动分轴等。
  6. Aegisub:免费、开源、跨平台的字幕编辑软件,支持多种语言编码。

4.2 字幕的制作步骤

  1. 导入视频和字幕文件:使用视频编辑软件导入视频文件和字幕文件,确保字幕文件与视频文件的内容对应。
  2. 调整时间轴:在视频编辑软件中,调整字幕的出现时间和消失时间,使其与配音的时长和内容一致。
  3. 调整字幕样式:根据需要,调整字幕的字体、字号、颜色、背景等,以使字幕更加清晰明确。
  4. 预览和调整:预览整个视频,确保字幕与配音同步显示,并且字幕的内容清晰可读。
  5. 导出视频:完成字幕的调整后,将视频导出为新的文件,确保字幕和配音同步的效果在最终的视频文件中得以保留。

文章合集:https://github.com/chongzicbo/ReadWriteThink

微信公众号


音视频开发09:SRT、ASS、SAA、VTT字幕介绍
https://chongzicbo.github.io/2024/12/09/开发/音视频/音视频开发09:字幕介绍/
Author
程博
Posted on
December 9, 2024
Licensed under