[时间:2019-03] [状态:Open]

[关键词:字幕,SRT,文件格式]

0 引言

视频文件中最简单、最常见的外挂字幕格式是SRT(SubRip Text)。本人找了好久也没找到类似的标准文档,从wiki等资料来看,SRT格式是SubRip软件所生成从DVD或视频文件提取的字幕格式,SubRip软件使用OCR将基于图形的字幕转化为纯文本格式的字幕,这样就可以支持诸如渲染、检索、数据分析等诸多用途。后来出于某些原因普及起来,被主流多媒体播放器所支持,由此也催生了各种字幕组产生。

本文的内容将包括:

  • SRT字幕基本格式
  • SRT特效设置
  • ffmpeg中srt相关用例

1 SRT基本格式

SRT字幕通常以srt作为后缀,作为外挂字幕,多数主流播放器都支持直接加载并显示SRT字幕,具体细节看参考SubRip (.SRT) subtitles support in players

该格式是基于纯文本的格式,使用CR+LF作为换行符(Windows下常用换行符,*nix使用LF作为换行符)。每个SRT文件包含至少一个字幕段。

每个字幕段有四部分构成:

  • 字幕序号
  • 字幕显示的起始时间
  • 字幕内容(可多行)
  • 空白行(表示本字幕段的结束)

其中字幕序号一般是顺序增加的,表示字幕是一系列连续的序列。但该数值在字幕显示中不起任何作用,只是起着标记和标识的作用,方便分配翻译行数用。字幕序号的值可以随意,1和100都一样,并不会影响字幕的显示。但字幕序号也是字幕段的一部分,所以不能没有或者删去,否则在播放时,将出现错误。

字幕显示起始时间的格式如下:

hour:minute:second.millisecond --> hour:minute:second.millisecond

hour:minute:second,millisecond --> hour:minute:second,millisecond

后面还可以附加用于指定字幕显示位置的信息,以像素为单位,格式如下: X1:number Y1:number X2:number Y2:number

一个典型的SRT文件如下(截取自阿凡达中英字幕):

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

2 SRT格式化设置

多数SRT支持一些特定格式化,比如斜体、粗体、下划线以及字体颜色。使用时需要基于HTML的标签,具体用法如下:

<font color=red>颜色</font>
<i>字体斜体</i>
<u>字体下加划线</u>
<br>换行
<b>字体加粗</b>

这些HTML可嵌套。

当然某些播放器还对SRT做了扩展,可以支持ASS/SSA中部分格式化代码。

3 ffmpeg中srt相关用例

使用ffmpeg可以很轻松的把ass/vtt/lyric转换为srt文件,命令如下:

ffmpeg -i a.ass b.srt

ffmpeg -i c.vtt d.srt

ffmpeg -i e.lyric f.srt

使用ffplay现在字幕需要使用subtitles filter,具体命令如下:

./ffplay test.mp4 -vf subtitles=test.srt

对于FFmpeg中的srt demuxer的实现逻辑,基本上是参考SRT基本格式实现的,其中并未支持各种格式,具体代码请查看srtdec.c

4 小结

srt字幕以其简单、体积小、易查看、易掌握等优点,深得人们的喜爱,但便利的代价就是样式少,无法实现复杂的特效。

本文整理了srt字幕的基本格式以及支持的格式,同时介绍了ffmpeg中srt格式生成和渲染的用法,仅供后续参考。

5 参考资料

  1. wiki-SRT
  2. multimedia-SubRip
  3. mkv-SRT
  4. SRT字幕的颜色以及一些特效的设置
  5. SRT字幕完全手册
  6. SubRit Text

SRT字幕格式的更多相关文章

  1. 【Win 10 应用开发】加载外部的 srt 字幕

    据说系统内置的多媒体功能支持 srt. ssa 等字幕,老周测试过几种格式的字幕均能加载. SRT 字幕是最简单的字幕结构,甚至你用记事本都能做出来,就是分为几行来写. 第一行是字幕的编号,应该是从1 ...

  2. webvtt字幕转srt字幕的python程序(附改名程序)

    最近写了两个比较简单的python程序,原有都是由于看公开课感觉比较费劲,一个是下载的视频无用的名字太长,另一个就是下载的vtt字幕播放器不识别,写了一个vtt转换成str字幕格式的文件 vtt to ...

  3. ASS/SSA字幕格式

    [时间:2019-04] [状态:Open] [关键词:字幕,ASS,SSA,文件格式,v4 Styles,字幕特效] 0 引言 SubStation Alpha(Sub Station Alpha) ...

  4. 探究:Adobe Premiere Pro CC 2018 导入SRT字幕显示不全问题

    问题:如果使用PR,大概率会遇到导入SRT格式的字幕文件后,PR里面显示的字幕不完整,字幕丢失的问题. 探究:字幕文件的内容正常,导入PR后字幕出现丢失. 查看字幕文件,并测试,发现如下图,如果出现字 ...

  5. 关于vtt 与 srt 字幕 的相互转换

    我在下载的udacity中教程时,字幕和视频是分离的,对于英文还无法完全听懂的我来说,字幕还是比较重要.不想看解释的可直接跳到最后复制代码运行即可. 查看了vtt和srt的区别,使用记事本打开vtt和 ...

  6. FFmpeg基础库编程开发学习笔记——音频常见格式及字幕格式

    声明一下:这些关于ffmpeg的文章仅仅是用于记录我的学习历程和以便于以后查阅,文章中的一些文字可能是直接摘自于其它文章.书籍或者文献,学习ffmpeg相关知识是为了使用在Android上,我也才是刚 ...

  7. WebVTT字幕格式

    [时间:2019-05] [状态:Open] [关键词:字幕,vtt,webvtt, 文件格式,cue,css] 0 引言 WebVTT(Web Video Text Tracks),通过HTML5中 ...

  8. 虎牙直播弹幕转换字幕格式 基于Node.js 的 huya-danmu

    1 首先安装nodejs运行环境, 从 http://nodejs.cn/download/ 下载对应的版本 2 安装 huya-danmu 模块, https://github.com/BacooT ...

  9. Srt字幕文件解析

    // // ViewController.m // 字幕解析 // // Created by admin on 2018/8/30. // Copyright © 2018年 admin. All ...

随机推荐

  1. win/zabbix_agent.conf

    # This is a configuration file for Zabbix agent service (Windows) # To get more information about Za ...

  2. MacbookPro升级10.15 Catalina之后无法读写NTFS

    冲着Sidecar的双屏功能,乐呵呵的跑去升级了10.15,结果就悲剧了. 所有移动硬盘和U盘都写不了,无奈只好上网找办法,目前找到一个便宜的方法: 共2步: Step 1:编写fstab文件 使用T ...

  3. Postman测试后台使用@RequestBody接收参数的坑

    问题原因:我在使用PostMan测试接口时发现数据传递不过来,是因为请求体定义为JSON数据,自动就传递不过来,虽然问题简单,但由于之前这个用的较少,所以就忽略了这点. 解决问题链接:https:// ...

  4. Navicat Keygen - for Windows

    如何使用这个注册机 从这里下载最新的release. 使用navicat-patcher.exe替换掉navicat.exe和libcc.dll里的Navicat激活公钥. navicat-patch ...

  5. 获取 Rancher 中 Prometheus 的数据

    1.需求 在 rancher 应用商店添加集群监控,会安装 prometheus.grafana:需要从 prometheus 的 api 中收集 pod 的一些信息. 查看grafana 配置的数据 ...

  6. Redis学习之intset整数集合源码分析

    1.整数集合:整数的集合,升序排序,无重复元素 2.整数集合intset是集合键的底层实现之一,当一个集合只包含整数值的元素,并且这个集合的元素数量不多时,redis会使用整数集合作为集合键的底层实现 ...

  7. 使用Jenkins来实现内部的持续集成流程(下)

    目录 配置项目构建 添加任务 添加源代码地址和登录凭据 添加构建触发器  TFS添加WebHook  添加构建步骤 后端UI  API端  配置项目构建 1.添加任务 2.添加源代码地址和登录凭据 添 ...

  8. JavaScriptCore在浏览器引擎中的位置

    因为随着JS这门语言的发展,JS的宿主越来越多,有各种各样的浏览器,甚至是常见于服务端的Node.js(基于V8运行). 2.       Webkit 源代码由三大模块组成: 1). WebCore ...

  9. 【学习笔记】C#中的泛型和泛型集合

    一.什么是泛型? 泛型是C#语言和公共语言运行库(CLR)中的一个新功能,它将类型参数的概念引入.NET Framework.类型参数使得设计某些类和方法成为可能,例如,通过使用泛型类型参数T,可以大 ...

  10. 用友U9执行JS代码。

      UFSoft.UBF.UI.AtlasHelper.RegisterAtlasStartupScript(part.Page, part.Page.GetType(), "JavaScr ...