1. ass 1.1 ssa-ass 1.2 脚本说明 1.2.1 头部 1.2.2 样式定义 1.2.3 主体 1.2.4 注意事项 1.3 双语字幕 2. srt 2.1 文件格式 2.2 样式 2.3 位置 3. 小结 3.1 列出支持的格式 3.2 srt-ass 3.3. sbv-srt 4 字幕操作 4.1 软字幕(推荐) 4.1.1 提取字幕流 4.1.2 添加字幕流 4.1.3 注意 4.2. 硬字幕(不推荐) 5. 相关链接
1. ass
1.1 ssa-ass
- SubStation Alpha(或 Sub Station Alpha),简称SSA,是由 CS Low(亦作 Kotus)创建、比传统字幕(如SRT)更加强大先进的字幕文件格式。该格式在Windows平台上可以经播放器由VSFilter渲染进行播放。这是一款广受欢迎且已停止开发的字幕编辑制作工具。
- 而Advanced SubStation Alpha(ASS)是一种比SSA更先进的字幕脚本格式。基于SSA 4.00+编码构建。ASS的主要变化就是在SSA编写风格的基础上增添更多的效果和指令。SSA当前版本为V4.00。ASS则使用更高级的V4.00+编码。
1.2 脚本说明
1.2.1 头部
Script Info: 脚本的一般全局信息:
Title:标题
Original Script:作者
Script Updated By:更新时间
Script Type:类型(用于兼容性设置,SSA为4.00,ASS为4.00+)
PlayResX & PlayResY:屏幕宽高
PlayDepth(决定颜色数量)
Timer:定时器
1.2.2 样式定义
V4 Styles: 定义文字样式,在events部分可以直接调用这些样式。
[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
[V4+ 样式]
格式:名称、字体名称、字体大小、原色、副色、轮廓色、底色、粗体、斜体、下划线、删除线、
缩放X、缩放Y、间距、角度、边框样式、外线、阴影、对齐、边距L、边距R、边距V、编码
PrimaryColour. 第一颜色,即文字本身的颜色
SecondaryColour. 第二颜色。在卡拉OK时使用,卡拉OK指令会用第一颜色填充第二颜色。
TertiaryColour(ASS中称为OutlineColour)边框色,文字边框的颜色。
BackColour. 阴影颜色,文字阴影的颜色。
MarginL, MarginR. 左右缩进。文字距离视频最左最右的最小距离。
MarginV. 上下缩进。文字热点(对齐点)距离视频上下的最小间距离。这取决于文字对齐方式,如果该文字使用中对齐,则上下缩进值无效。需要时文字可用
或N命令换行。ASS文件中,Script Info部分的一个参数“WrapStyle”也可以改变此值。
Outline. 边框样式,文字可以设定为有边框,无边框,或拥有不透明边框(矩形背景)。
Shadow. 阴影距离。文字的阴影到文字的距离大小。
AlphaLevel. 透明度(0至255有效)
Encoding. ASCII码中的文字编码方式。
1.2.3 主体
Events: 字幕的主体部分。
字幕的出现时间和样式、对样式的修改和特效均在这里编写。 其一般语法格式为:{命令(参数,多个参数用逗号隔开)}, 例如 {move(80,80,200,200,150,300)}.只有一个参数的命令不需要括号 (如. {kf89}).
1.2.4 注意事项
一对大括号内可以放置多个语句。 如. {ord8e1}
换行的 N 和
命令不需要在两边加大括号就可使用。
1.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,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,10,0
Style: Chs,Arial,12,&Hcccccc,&Hcccccc,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,10,0
Style: Eng,Arial,20,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,10,0
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:01:06.63,0:01:07.63,Default,,0,0,0,,GIRL: Hey, Nat!N{
Chs}女孩:嘿,纳特!
Dialogue: 0,0:01:37.08,0:01:38.71,Default,,0,0,0,,We're both upside down.N{
Chs}我们两个都颠倒了。
Dialogue: 0,0:01:38.87,0:01:40.96,Default,,0,0,0,,And I bet you're gonna fall down first.N{
Chs}我打赌你会先倒下。
Dialogue: 0,0:01:41.12,0:01:42.66,Default,,0,0,0,,No, you will.N{
Chs}不,你会的。
2. srt
SubRip是一款适用于Microsoft Windows的免费软件程序,可将字幕及其时间从各种视频格式提取到文本文件中。它是在GNU GPL下发布的。其字幕格式的文件扩展名得到广泛支持。每个文件都是人类可读的文件格式,其中字幕与时序信息一起顺序存储。互联网上分发的大多数字幕都是这种格式。.srt
2.1 文件格式
序号开始: 标识顺序的数字计数器
时间起始: 字幕应该出现在屏幕上的时间 --> 它应该消失的时间
字幕内容: 一行或多行的字幕文本本身
空行结束: 一个不包含文本的空行,表示该标题的结束
2.2 样式
非正式地,该格式具有非常基本的文本格式,可以根据处理应用程序进行解释或传递以进行渲染。格式源自 HTML 标记的粗体、斜体、下划线和颜色:
粗体——<bold>…</bold>或{bold}…{/bold}
斜体 -<italic>…</italic>或{italic}…{/italic}
下划线 –<underline>…</underline>或{underline}…{/underline}
color 字体颜色 - <font color="color name or #code">…</font>(如在HTML 中)
position 行位置 -X1:… X2:… Y1:… Y2:…在时间戳之后表示文本坐标
2.3 位置
字幕摆放, 若不明示, 则处在底部居中位置, 即默认{an2}. 可使用如下标识控制字幕出现的位置.
|– 字幕靠左 字幕居中 字幕靠右 顶部 {an7} {an8} {an9} 中间 {an4} {an5} {an6} 底部 {an1} {an2} {an3}
3. 小结
ass 相当于 srt + 简单样式表
- 只需要单纯文本字幕时使用 srt
- 需要样式文本字幕时使用 ass
常见的应用是中英双语字幕时, 使用ass可以很方便的分别控制2种语言的颜色, 字体大小.
3.1 列出支持的格式
$ ffmpeg -hide_banner -codecs | grep "^...S"
..S... = Subtitle codec
DES... ass ASS (Advanced SSA) subtitle (decoders: ssa ass ) (encoders: ssa ass )
..S... srt SubRip subtitle with embedded timing
..S... ssa SSA (SubStation Alpha) subtitle
DES... subrip SubRip subtitle (decoders: srt subrip ) (encoders: srt subrip )
DES... mov_text MOV text
...
3.2 srt-ass
$ ffmpeg -i input.srt output.ass
$ ffmpeg -i out.ass out.srt
3.3 sbv-srt
ffmpeg -i captions.sbv captions.srt
ffmpeg -fix_sub_duration -i captions.sbv captions.srt
4. 字幕操作
4.1 软字幕(推荐)
软字幕是独立于视频流的字幕流信息, 可以加入多个, 删除也很方便, 视频不需要重新编码, 速度相当于复制文件.
4.1.1 提取字幕流
查看视频文件信息, 找到需要的字幕流
$ ffmpeg -i input.mkv
不指定map, 默认提取第一个字幕
$ ffmpeg -i input.mkv sub.srt
绝对map, 提取第6个流信息
$ ffmpeg -i input.mkv -map 0:5 sub.srt
相对map, 提取第4个字幕流信息
$ ffmpeg -i input.mkv -map 0:s:3 sub.srt
4.1.2 添加字幕流
添加1个字幕流
$ ffmpeg -i IceAge3.mp4 -i sub.english.srt -map 0 -map 1 -c copy -c:s mov_text -metadata:s:s:0 language=en IceAge3.en.mp4
$ ffmpeg -i IceAge3.mp4 -i sub.english.srt -map 0 -map 1 -c copy -c:s mov_text IceAge3.en1.mp4
在已有字幕的基础上添加新字幕
ffmpeg -i IceAge3.en.mp4 -i sub.chinese.srt -map 0 -map 1 -c copy -c:s mov_text IceAge3.encn.mp4
添加多个字幕流
$ ffmpeg -i IceAge3.mp4 -i sub.english.srt -i sub.chinese.srt -i sub.ass.en.ass -map 0 -map 1 -map 2 -map 3 -c copy -c:s mov_text -metadata:s:s:0 language=en -metadata:s:s:1 language=cn -metadata:s:s:2 language=en.ass IceAge3sub.mp4
$ ffmpeg -i IceAge3.mp4 -i sub.english.srt -i sub.chinese.srt -i sub.ass.en.ass -map 0 -map 1 -map 2 -map 3 -c copy -c:s mov_text IceAge3sub.mp4
$ ffmpeg -i Trese.avi -i en.srt -i CN.srt -map 0:v -map 0:a -map 1 -map 2 -c:v copy -c:a copy -c:s mov_text -metadata:s:s:0 language=en -metadata:s:s:1 language=cn out2.mp4
$ ffmpeg -i Trese.avi -i en.srt -i CN.srt -map 0 -map 0:s:0 -map 0:s:1 -map 0:s:2 -c copy -c:s mov_text -metadata:s:s:0 language=en -metadata:s:s:1 language=cn out2.mp4
4.1.3 注意
不指定map则无效
ffmpeg -i input.mp4 -i sub.srt -c copy out.mp4
ffmpeg -i input.mp4 -i sub.srt -map 0 -c copy out.mp4
如下语法, 对于mp4无效, 对于mkv,则会增加字幕.
ffmpeg -i input.mp4 -i sub.srt -map 0 -map 1 -c copy out.mp4
$ ffmpeg -i input.mkv -i sub.srt -map 0 -map 1 -c copy out.mkv
完整语法:
$ ffmpeg -i input.mp4 -i sub.srt -map 0 -map 1 -c copy -c:s mov_text out.mp4
$ ffmpeg -i input.mp4 -i sub.srt -map 0 -map 1 -c copy -c:s mov_text -metadata:s:s:0 title=en out.mp4
$ ffmpeg -i input.mp4 -i sub.srt -map 0 -map 1 -c copy -c:s mov_text -metadata:s:s:0 language=en out.mp4
4.2 硬字幕(不推荐)
将字幕嵌入到视频帧中,这个过程需要重新编解码,所以速度比较慢。而且不可逆.
您可以使用以下两种过滤器之一来刻录文本字幕(硬字幕):subtitles或ass.
subtitles 滤镜
ffmpeg -i video.avi -vf subtitles=subtitle.srt out.avi
ffmpeg -i video.mkv -vf subtitles=video.mkv out.avi
ass 滤镜
ffmpeg -i video.avi -vf "ass=subtitle.ass" out.avi
它仅限于ASS(高级变电站阿尔法)字幕文件, 所以若是SubRip,MicroDVD或任何其他支持的文本字幕,您必须在使用此过滤器之前将其转换为 ASS:
ffmpeg -i subtitle.srt subtitle.ass
基于图片的字幕
你可以燃烧“基于图像的”字幕到一部电影中,通过使用叠加视频滤波器以覆盖图像。例如,dvdsub 是一种基于图片的叠加字幕。在单独的流中带有 dvdsub 字幕的 MKV 示例:
ffmpeg -i input.mkv -filter_complex "[0:v][0:s]overlay[v]" -map "[v]" -map 0:a <output options> output.mkv