音视频相关基础知识储备入门-字幕

基础知识储备入门

  • 1.字幕概述
  • [2. SSA(软字幕)](#2. SSA(软字幕))
    • [2.1 历史背景](#2.1 历史背景)
    • [2.2 SSA 的核心能力](#2.2 SSA 的核心能力)
    • [2.3 V4 与 V4+(ASS)的关系](#2.3 V4 与 V4+(ASS)的关系)
  • [3. ASS](#3. ASS)
    • [3.1 关键节段(Section)](#3.1 关键节段(Section))
    • [3.2 ASS 标签(特效指令)](#3.2 ASS 标签(特效指令))
  • [4. 渲染流程](#4. 渲染流程)
    • [4.1 概览流程图](#4.1 概览流程图)
    • [4.2 常用库](#4.2 常用库)
  • [5. 与现代弹幕的关系](#5. 与现代弹幕的关系)

1.字幕概述

字幕就是视频里出现的文字:台词翻译、歌词、甚至弹幕。从技术实现角度分为两类:

类型 特点 常见格式
硬字幕 直接画在视频画面上,无法关闭或修改,本质是视频内容的一部分。 内嵌在视频流中
软字幕 独立于视频的文件,播放器实时叠加到画面上,可开关、切换语言。 SRT, ASS, SSA, VTT, PGS

音视频开发中,软字幕才是研究的重点:它更灵活,也带来了渲染、同步、特效等一系列技术挑战。

2. SSA(软字幕)

2.1 历史背景

SSA 诞生于上世纪 90 年代,当时流行的字幕格式是 MicroDVD 和 SubRip(SRT),它们只能控制起止时间,没有任何样式或特效。SSA 的野心是:让字幕拥有接近视频编辑软件的效果------不同字体、颜色、边框、甚至简单动画。

2.2 SSA 的核心能力

  • 支持多行样式定义(比如"说话人A用蓝色字","旁白用白色字")
  • 支持位置摆放(左上角、底部居中、屏幕任意座标)
  • 支持简单变换(旋转、缩放、移动、模糊)
  • 支持卡拉OK效果(逐字变色)
  • 使用纯文本语法,可读可编辑

2.3 V4 与 V4+(ASS)的关系

后来出现了 Advanced SubStation Alpha(ASS),即 V4+ 版本。它加入了更精细的标签(如 \move, \fad, \clip)和更好的渲染模型。现在几乎所有播放器都优先支持 ASS(完全兼容 SSA),所以ASS 就是事实上的标准

3. ASS

打开一个.ass文件,你会发现它非常像 Windows 的 INI 配置文件( INI 文件的魔改版):

ini 复制代码
[Script Info]
Title: My Awesome Sub
ScriptType: v4.00+
WrapStyle: 0
PlayResX: 1920
PlayResY: 1080

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Outline, Bold, Italic, ...
Style: Default,Arial,48,&H00FFFFFF,&H00000000,0,0,...

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:03.00,Default,,0,0,0,,{\move(100,100,200,200)}Hello world!

3.1 关键节段(Section)

  • Script Info\]:全局设定,如分辨率、标题、字幕引擎兼容性。

  • Events\]:时间轴 + 具体字幕内容。每条字幕可以指定使用哪个样式,并附加覆盖标签({...} 里的命令)。

3.2 ASS 标签(特效指令)

在每一条 Dialogue 的 Text 字段中,可以用 \标签(参数) 临时修改样式。标签从左到右生效,可以嵌套。几个常用例子:

标签 含义
{\an5} 对齐方式:5 表示居中(数字小键盘布局)
{\fs20} 修改字号为 20
{\c&HFF0000&} 颜色改为蓝色(BGR 顺序,&H 表示十六进制)
{\move(100,100,300,300)} 从 (100,100) 移动到 (300,300)
{\fad(200,200)} 淡入 200ms,淡出 200ms
{\k50}(卡拉OK) 高亮 50 百分之一秒,常用于歌词

整条字幕的最终显示结果 = 基础样式 + 覆盖标签

4. 渲染流程

只需要一个解析器 + 状态机。整个流程比编译 C++ 简单一个数量级。

4.1 概览流程图

text 复制代码
ASS文件 → 解析器 → 样式表/事件列表 → 时间轴控制器 → 渲染器 → 视频合成
                ↑                             ↓
                └────────── 字体引擎(FreeType)─┘

4.2 常用库

功能 常用库
解析 ASS libass(主流),VSFilter(老旧 DirectShow)
字体渲染 FreeType + HarfBuzz(处理复杂排版)
颜色 / 坐标 自家数学库,通常依赖 libass 内部实现
视频叠加 OpenGL 纹理或多平面 YUV + 混合(libass 输出位图)

libass 几乎就是 ASS 字幕的代名词。它已经被集成到 FFmpeg、mpv、VLC 等所有主流播放器中。

5. 与现代弹幕的关系

很多人以为弹幕是新技术,其实弹幕播放器的鼻祖 niconico 使用的 Danmakufu 引擎,语法直接借鉴了 ASS 的 \move\fade 等标签。随后 Bilibili 等站也延续了这一设计。

项目 传统 ASS 字幕 现代弹幕
来源 本地文件,手工制作或机翻 服务器实时下发,用户即时发送
数量 同时显示 ≤ 10 条 峰值 每秒几百条,屏幕上经常 > 50 条
特效 预设动画(移动、旋转、卡拉OK) 滚动、顶部、底部、反向、高级轨迹
渲染 单机 libass,逐帧绘制 浏览器 Canvas/WebGL,高度优化缓存
交互 点赞、屏蔽关键词、透明度调节

技术上的共同点:

  • 都用时间轴驱动(每个弹幕有自己的生命期)

  • 都支持标签式语法(虽然弹幕通常转成 JSON)

  • 底层渲染都依赖纹理 + 混合

不同点:弹幕为了高并发,往往舍弃了 ASS 复杂的样式继承和矢量裁剪,改用更轻量的预定义模式(滚动、静止、移动路径)。

可以这样理解:弹幕是"被阉割但仍保留 ASS 灵魂"的实时字幕系统。

相关推荐
音视频牛哥1 小时前
大牛直播SDK(SmartMediaKit)Windows平台RTSP/RTMP直播播放SDK集成说明(C++版)
windows·音视频·实时音视频·windows rtsp播放器·windows rtmp播放器·超低延迟rtsp播放器·超低延迟rtmp播放器
EasyGBS3 小时前
1分钟讲清楚选EasyNVR还是国标GB28181视频平台EasyGBS:路线不同,别选错
音视频
日光明媚4 小时前
深度解析 SGLang 框架 Wan2.1 视频生成加速技术:从 49 分钟到 1 分钟的极致优化
人工智能·计算机视觉·aigc·音视频·sglang
小猿君4 小时前
谷歌I/O前夜Veo 4遭泄露,AI视频底层逻辑浮出水面
人工智能·音视频
南山有乔木7894 小时前
音频怎么转换MP3格式?M4A、WAV、FLAC转mp3实测有效的格式转换方法
音视频
不昀4 小时前
音频变压器Bourns SM-LP-5001国产替代选型指南
网络·音视频·以太网·网络通信·电子元器件
REDcker4 小时前
RGB与YUV像素格式详解
音视频·实时音视频·视频编解码·yuv·rgb
水上冰石4 小时前
v1-5-pruned-emaonly.safetensors 搭配mm_sd_v15_v2.ckpt 生成视频,具体操作步骤
stable diffusion·音视频·文生视频
searchforAI4 小时前
我用这款本土NotebookLM平替重构了知识库
人工智能·笔记·gpt·ai·音视频·知识图谱
美狐美颜SDK开放平台5 小时前
美颜SDK开发详解:如何优化美颜SDK在低端安卓机上的性能?
android·ios·音视频·直播美颜sdk·视频美颜sdk