跳至主要內容

ass字幕格式

leonhardt...大约 5 分钟Note

ass字幕格式

来源: https://github.com/libass/libass/wiki/ASS-File-Format-Guideopen in new window

TODO:
了解ass格式。样式设置。
ass解析器。
python-vlc 如何播放视频外挂字幕。如何实时修改ass字幕。
ffmpeg嵌入软字幕,硬字幕。
b站是否支持软字幕。

概述

  • 一个ASS/SSA字幕文件通常被称为"script"
  • 字幕文件由多个类似ini文件的节(section)组成。每节第一行为[section_title]。前后无空格。两节之间至少有一个空行。
  • 除了[Fonts]节,其他节的每一行都必须是完整,独立的陈述。单个陈述不允许拆分为多行。
  • 每个节只能出现一次,并按[Script Info], [V4++ Style], [Events]的顺序出现。这三个节是必须有的。[Fonts]节是可选的。
  • 文件必须为有效的UTF-8格式,并且可以使用UNIX风格或DOS风格的换行符。为了使更多编辑器能够识别,文件开头应添加UTF-8 BOM。
  • 除非另有指示,否则整数和小数必须使用10进制,并且不得添加任何领先或尾随的零。
  • ASS坐标系的原点在左上角。

Script Info节

  • 节头为[Script Info]
  • 本节可以设置全局标头(global header)值来影响其他所有内容的行为。
  • 标头格式header_name: header_value,冒号后的空格不能省略。
  • 必须有ScriptType标头
  • 应该至少有ScaledBorderAndShadowYCbCr Matrix、 PlayResXPlayResYLayoutResXLayoutResY这些标头。
  • 如果脚本是由程序生成或通过编辑器编写的,则通常会在该[Script Info]部分的第一行中插入对此的注释。格式为; comment content。分号后的空格不能省略

功能标头

  • ScriptType: SSAv4文件设为v4.00,ASS文件设为v4.00+,ASS2文件设为v4.00++。必须匹配以后在样式和事件部分中使用的格式。
  • ScaledBorderAndShadow: 设为yes。
  • YCbCr Matrix: 有效的值为<range>.<colour space>
    • range: 可以是PC(全范围),或TV(受限范围)
    • colour space: 601(BT601), 709(BT709), 240M(SMPTE240M),FCC
  • LayoutResX and LayoutResY: 设置为相应视频的原生显示尺寸。(应该就是分辨率)
  • PlayResX and PlayResY: 创建新文件时和LayoutResX and LayoutResY保持一致。会影响Fontsize的实际大小。
  • WrapStyle: 设置全局默认的换行行为。
    • 0: 默认值。在空格或\n处换行,每行长度尽量相当。
    • 1: 在空格或\n处换行,只把溢出的文本放到下一行。
    • 2: 只会在\N处换行。(排版应激活此模式\q,但除非执行纯 Sign&Song 脚本,否则全局启用此模式可能没有多大意义)

信息标头

以下标头不会影响渲染,但可用于记录有关脚本的元数据: TitleOriginal ScriptOriginal TranslationOriginal EditingOriginal TimingScript Updated ByUpdate Details。值没有特别的格式,只要不包含换行或其他ASCII控制序列即可。

Style节

v4+(ASS) 风格

  • 节头为[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
  • 后续则逐行逐个按Format定义后续会用到的字体样式。
    • 布尔值false必须用0表示,true必须用-1表示。
    • 颜色值必须使用16进制值,加上&H前缀。颜色和AlphaGo通道的声明顺序为ABGR&H00为完全不透明,&HFF为透明。对于不接受 alpha 通道的覆盖标签(override tags),必须仅指定BGR且不指定 alpha。
    • 所有使用的字体及其变体必须存在并且必须附加到最终版本中。
  • Name: 必须是唯一的非空字符串,不得以空格开头或结尾。稍后用于引用和使用定义的样式。
  • Fontname: 设置所需字体的系列名称。不得超过 31 个字符,并且字体的系列名称必须在所有平台上匹配。
  • Spacing: 浮点数。在每个字形之间应用间距。
  • BorderStyle: 可以1用于扩展字形形状的常规轮廓,也3可以使用矩形框代替。
  • Alignment:参见\an允许值。
  • Encoding: 必须始终设置为1
  • Fontsize:浮点数。
  • PrimaryColourSecondaryColourOutlineColourBackColour: ABGR颜色值。
  • BoldItalicUnderlineStrikeOut: 布尔值。
  • ScaleXScaleY: 浮点数。
  • OutlineShadow: 浮点数。
  • Angle: 浮点数。
  • MarginLMarginRMarginV: 整数。

其他风格

Fonts节

此部分是可选的,包含嵌入到字幕文件本身中的字体。如果没有嵌入字体,则必须省略该部分。

如果可能,您应该将字体附加到 MKV 容器(或类似的多媒体容器),而不是将它们嵌入到字幕文件本身中。

Events节

格式

  • 节头为[Events]
  • 有两类事件。格式取决于格式版本。
    • Dialogue,将在指定的时间和位置渲染到屏幕上
    • Comment,不渲染但显示在编辑器中。
  • v4+格式中,节头下一行必须为Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
  • 除最后一个Text字段外,任何字段值都不允许包含逗号。
  • Layer:范围内的整数值[0, 2³¹-1]。低值先渲染。
  • StartEnd:事件的开始/结束时间;字幕只会在这些时间之间显示; start 与 end 是互斥的。格式为h:mm:ss.dd
  • Style:必须与先前定义的名称完全匹配Style。该样式定义将用于整个事件。
  • Name:一个自由格式的元数据字段,主要用于指示角色正在说/正在思考/...这段对话。不影响渲染。
  • Margin* : 如果非零,则覆盖样式中的相应值MarginRMarginV
  • Effect:应用于事件的效果。主要是一些滚动效果。略。
  • Text:包含将在屏幕上显示的文本和命令。该字段允许包含逗号。

覆盖标签

示例文件

[Script Info]
ScriptType: v4.00+
ScaledBorderAndShadow: yes
YCbCr Matrix: None
PlayResX: 640
PlayResY: 360
LayoutResX: 640
LayoutResY: 360
WrapStyle: 0

[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,DejaVu Sans,65,&H007F67D0,&H00187DC1,&H00000000,&H00D4AA86,-1,0,0,0,100,100,0,0,1,0.4,0,7,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Comment: 0,0:00:00.00,0:00:06.99,Default,,0,0,0,,Placeholder; replace with proper type later
Dialogue: 0,0:00:00.00,0:00:06.99,Default,,0,0,0,,{\pos(52,72)\an7\1c&HB3B3B3&\p1}m 2 34 l 8 60 112 37 107 24{\p0}
Dialogue: 0,0:00:00.00,0:00:06.99,Default,,0,0,0,,{\q2\shad0\bord2\fs36\org(126.31,107.61)\pos(128.85,116.69)\fax-0.068131\fscx207.70\fscy50.43\frz4.2185\frx25.9522\fry63.2018}Bakery