Subtitle-ass-srt

news/2024/12/29 23:04:43/
  • 导航 (返回顶部)
1. ass1.1 ssa-ass1.2 脚本说明1.2.1 头部1.2.2 样式定义1.2.3 主体1.2.4 注意事项1.3 双语字幕
2. srt2.1 文件格式2.2 样式2.3 位置
3. 小结3.1 列出支持的格式3.2 srt-ass3.3. sbv-srt
4 字幕操作4.1 软字幕(推荐)4.1.1 提取字幕流4.1.2 添加字幕流4.1.3 注意4.2. 硬字幕(不推荐)
5. 相关链接

1. ass

1.1 ssa-ass

https://en.wikipedia.org/wiki/SubStation_Alpha
https://zh.wikipedia.org/wiki/SubStation_Alpha
  • 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或\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 注意事项

一对大括号内可以放置多个语句。 如. {\bord8\be1}
换行的 \N 和 \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{\rChs}女孩:嘿,纳特!
Dialogue: 0,0:01:37.08,0:01:38.71,Default,,0,0,0,,We're both upside down.\N{\rChs}我们两个都颠倒了。
Dialogue: 0,0:01:38.87,0:01:40.96,Default,,0,0,0,,And I bet you're gonna fall down first.\N{\rChs}我打赌你会先倒下。
Dialogue: 0,0:01:41.12,0:01:42.66,Default,,0,0,0,,No, you will.\N{\rChs}不,你会的。

2. srt

https://zh.wikipedia.org/wiki/SubRip
https://en.wikipedia.org/wiki/SubRip
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

https://trac.ffmpeg.org/wiki/HowToConvertSubtitleToASS
$ ffmpeg -i input.srt output.ass
$ ffmpeg -i out.ass out.srt

3.3 sbv-srt

https://trac.ffmpeg.org/wiki/HowToConvertYouTubeSBVtoSRT
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 硬字幕(不推荐)

将字幕嵌入到视频帧中,这个过程需要重新编解码,所以速度比较慢。而且不可逆.
https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo
您可以使用以下两种过滤器之一来刻录文本字幕(硬字幕):subtitles或ass.
subtitles 滤镜
http://ffmpeg.org/ffmpeg-filters.html#subtitles-1
ffmpeg -i video.avi -vf subtitles=subtitle.srt out.avi
ffmpeg -i video.mkv -vf subtitles=video.mkv out.avi
ass 滤镜
http://ffmpeg.org/ffmpeg-filters.html#ass
ffmpeg -i video.avi -vf "ass=subtitle.ass" out.avi
它仅限于ASS(高级变电站阿尔法)字幕文件, 所以若是SubRip,MicroDVD或任何其他支持的文本字幕,您必须在使用此过滤器之前将其转换为 ASS:
https://trac.ffmpeg.org/wiki/HowToConvertSubtitleToASS
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

5. 相关链接

https://www.cnblogs.com/sztom/p/11964797.html
https://www.cnblogs.com/sztom/p/11909360.html
https://szosoft.blogspot.com/2019/11/ffmpeg-01-subtitle.html
https://en.wikipedia.org/wiki/Subtitles
https://zh.wikipedia.org/wiki/字幕
https://en.wikipedia.org/wiki/Comparison_of_subtitle_editors
https://en.wikipedia.org/wiki/Comparison_of_video_player_software#Subtitle_ability
https://en.wikipedia.org/wiki/Speech_recognition
https://zh.wikipedia.org/wiki/语音识别
https://translations.ted.com/How_to_Compress_Subtitles

http://www.ppmy.cn/news/372380.html

相关文章

音视频学习 - windows10 + vs2019环境编译ffmpeg

一、编译经历 1、【第一次失败】基于windows11 vs2022编译&#xff0c;总是卡住不动。 2、【第二次失败】基于ubantu进行交叉编译&#xff0c;各种报错&#xff0c;没搞定。 3、【第一次成功】基于虚拟机的win10 vs2019&#xff0c;编译成功&#xff08;未编译额外的库&#…

FFmpeg源码分析:avcodec_find_decoder()查找解码器

FFmpeg提供两种方式查找解码器&#xff0c;通过codecId查找avcodec_find_decoder()与通过名字查找avcodec_find_decoder_by_name()。同样地&#xff0c;也提供两种方式查找编码器&#xff0c;通过codecId查找avcodec_find_encoder()与通过名字查找avcodec_find_encoder_by_name…

2 FFmpeg从入门到精通-FFmpeg工具使用基础

1 FFmpeg从入门到精通-FFmpeg简介 2 FFmpeg从入门到精通-FFmpeg工具使用基础 3 FFmpeg从入门到精通-FFmpeg转封装 4 FFmpeg从入门到精通-FFmpeg转码 5 FFmpeg从入门到精通-FFmpeg流媒体 6 FFmpeg从入门到精通-FFmpeg滤镜使用 7 FFmpeg从入门到精通-FFmpeg中Linux设备操作 8 FFm…

ffmpeg-01-Subtitle

1. ffmpeg简介 2. 摘录文档2.1 过滤 Filtering2.1.1 简单滤镜2.1.2 复杂的滤镜2.1.3 简单过滤与复杂过滤2.2 Stream 流复制2.3 对比图 3. 提取字幕 4. 如何将字幕刻录到视频中 5. 如何将其他FFmpeg支持的字幕转换为ASS格式 6. 如何将YouTube SBV转换为SRT 7. 获取可用信息 8. 从…

字幕文件 WebVTT 与 srt 之间的互相转化

1. WebVTT 2 srt 1. 用记事本打开 .vtt 文件&#xff1b; 2. 在记事本中点击 编辑 —> 替换 —> 查找内容中输入”.”&#xff0c;替换为中输入”,”&#xff0c;点击全部替换&#xff1b; (注意&#xff1a;”.”与”,”均为英文状态下输入的&#xff09; 3. 将文档中的…

Android MediaPlayer 字幕同步

第一次写博客&#xff0c;逻辑有点乱&#xff0c;见谅~ Android从API16中更新对字幕追踪的支持&#xff0c;具体是下面几个方法。 Added in API level 16 public void addTimedTextSource (Context context, Uri uri, String mimeType) public void addTimedTextSource (Str…

Android 关于mimeType的使用

最近有个需求&#xff0c;需要在app中显示ppt&#xff0c;第一反应就是从文件管理中选择ppt&#xff0c;然后用第三方控件显示&#xff0c;结果ios开发人员跟我说在ios上可以直接选择打开方式&#xff0c;比如微信接收到一个ppt&#xff0c;然后选择打开&#xff0c;会弹出一个…

ffmpeg 字幕格式转换,webvtt字幕格式,srt字幕格式

常见的字幕格式 https://zh.wikipedia.org/wiki/%E5%AD%97%E5%B9%95%E6%A0%BC%E5%BC%8F 常见的格式&#xff1a;srt、ass、webvtt srt 字幕格式 SRT&#xff08;Subripper&#xff09;是最简单的文本字幕格式&#xff0c;扩展名为.srt 每个字幕段有四部分构成&#xff1a; …