头图

你是否在寻找能将 txt 文件转为 srt、ass等字幕格式的工具?你是否需要将字幕从一种格式转换为另一种格式?你是否担心在线字幕格式转换工具会泄露你的数据?

本文将介绍常见字幕格式以及自制字幕格式转换工具。自制字幕格式转换工具不仅实现了常见字幕格式的相互转换,还可以将 TXT 文本转为常见字幕格式文件,免去手动将字幕一句一句复制到剪辑软件中的繁琐过程。

版本更新说明

相较于 1.0 版本,2.0 版本不再使用命令行、配置文件指定参数。2.0 版本增加了可视化界面,用户可在可视化界面设置参数,简化了使用步骤,增加了易用性。

常见字幕格式

SRT

SRT格式字幕包含四部分:序号、起始和终止时间、字幕内容、空行。其中,时间格式为如下一种

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

两种时间格式仅秒与毫秒之间的分隔符不同。

SRT 格式文件以 srt 为后缀,以下为文件内容样例

1
00:00:00,000 --> 00:00:10,000
我是第一句字幕

2
00:00:10,000 --> 00:00:20,000
我是第二句字幕

3
00:00:30,000 --> 00:00:40,000
我是第三句字幕

ASS

ASS 格式字幕包含三部分:Script Info、V4+ Styles、Events。

  • Script Info 部分记录标题、作者、注释等信息;
  • V4+ Styles 部分记录字幕样式;
  • Events:字幕主体,Format 行表示字幕格式。
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.24,0:00:01.99,Default,,0,0,0,,我是可以显示的字幕
Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,,我是注释,不会显示出来

Format 的内容是固定的,Dialogue/Comment 的各列与之对应

  • Layer:层,若两条字幕重叠时,层数大的在上,若层数相同,后面的在上,默认层数为 0;
  • Start/End:开始时间/结束时间,精度为 0.01s;
  • Style:样式名称,对应 [V4+ Styles] 中的 Name 项;
  • Name:说话人,只做参考,一般省略;
  • MarginL/MarginR/MarginV:左边距/右边距/垂直边距。默认为零,表示使用原值,不为 0 则用此值覆盖原值;
  • Effect:动态效果;Scroll up, Scroll down, Banner, Karaoke;
  • Text:字幕内容。

ASS 格式文件以 ass 为后缀,以下为文件内容样例

[Script Info]
; This is an Advanced Sub Station Alpha v4+ script.
Title: subtitles
ScriptType: v4.00+
Collisions: Normal
PlayDepth: 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,Arial,20,&H00FFFFFF,&H0300FFFF,&H00000000,&H02000000,0,0,0,0,100,100,0,0,1,2,1,2,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Actor, MarginL, MarginR, MarginV, Effect, Text;
Dialogue: 0,0:00:00.00,0:00:20.00,Default,,0,0,0,,我是第一句字幕
Dialogue: 0,0:00:00.00,0:00:20.00,Default,,0,0,0,,我是第二句字幕

LRC

LRC 格式字幕(歌词)包含两部分:歌曲信息(歌名、作者等)、歌词内容。

[al:专辑名]
[ar:歌手名]
[au:歌词作者-作曲家]
[by:LRC文件创建者]
[offset:+/- 时间补偿值,以毫秒为单位,正值表示加快,负值表示延后] 
[re:创建此LRC文件的播放器或编辑器]
[ti:歌词(歌曲)的标题]
[ve:程序的版本]

[00:10.00]我是第一句字幕
[00:20.00]我是第二句字幕

自制工具

功能说明

目前支持 txtsrtasslrc 格式相互转换,免安装、本地运行、不用联网。

由于不同格式表示信息的能力存在差异,所以格式转换可能会丢失部分信息。

对于 TXT 文件:会按照以下符号对文本进分割,划分为一个个句子。

, 。 ! ? ;: , . ; :

对于 TXT 文件:空行会被忽略,单条字幕长度和持续时间可通过参数控制。

对于 SRT 格式文件:时间格式中,秒与毫秒的分隔符可以手动指定。

对于 ASS 格式文件:Script Info、V4+ Styles 以及 Events 的 Format 行和 Comment 行会被忽略。

对于 LRC 格式文件:歌曲信息(歌名、作者等)会被忽略。

参数说明

图1 参数设置

txtSplitMode:txt 分割模式

  • 目前仅支持值 1,表示,在对 txt 文本进行分割时,按照前述分隔符将文本分割为若干条句子。

txtSplitMinLentxt 分割得到的句子的最小长度

  • 当碰到 ,, 分隔符时,若当前句子长度小于 txtSplitMinLen,则不会进行分割。
  • txtSplitMinLen 的值必须为正数。

txtSplitDuration:将 txt 转为其他字幕格式时,所得到的每条字幕的持续时间。

  • 由于 txt 不包含字幕时间信息,为防止生成的字幕重叠在一起,需要手动设置时间信息;
  • 第一条字幕的起止时间为 0~txtSplitDuration,第二条字幕的起止时间为 txtSplitDuration~2×txtSplitDuration,以此类推;
  • txtSplitTimeStep 的值必须为正数。

srtSecMsSeparator:srt 字幕的时间格式中,秒和毫秒之间的分隔符。

  • srtSecMsSeparator 的值仅支持英文的 ,.

TXT 文件转字幕格式文件

程序会将下列字符视为分隔符对 txt 文本进行分割,并将得到单条字幕的结尾与开头的标点符号去除:

, 。 ! ? ;: , . ; :

即便上述字符出现在括号、双引号等符号中间,仍然会被视为分隔符。通常情况下,会使得结果不太符合预期,所以,转换前请先清理文本,确保文本中不包含括号/引号,或者括号/引号中不包含分隔符。

例句:

"你好,我是001"。天气不错!去不去钓鱼?

例句会被切分成以下四条字幕,显然不是很符合要求。

"你好
我是001"
天气不错
去不去钓鱼

通过 txtSplitMinLen 参数可设置转换后得到的单条字幕的最短长度,仅对分隔符 , 有效。假设值设置为 5,对于前面的例句切分结果,由于第一条字幕长度为 3 ,所以会和第二条字幕合并,对于第三条字幕,尽管长度小于 5,但其后的分隔符为 ,所以仍会被切割。所以,设置 txtSplitMinLen 的值为 5 后,会被切分成以下三条字幕。

"你好,我是001"
今天天气不错
可以去钓鱼

通过 txtSplitTimeStep 参数可设置转换后得到的单条字幕的持续时间。

使用步骤

文末获取 subtitle.exe 程序。

双击 subtitle.exe,此时会自动打开命令行窗口。关闭窗口则程序停止。

图2 控制台窗口

浏览器输入localhost:8787,回车。


图3 使用界面

点击“文件”按钮,选择待转换的字幕文件,程序会自动根据文件后缀确定字幕格式,若实际格式和后缀不一致,可手动指定格式。

当源文件格式为 TXT 时,可调整如下参数:文本分割模式、单条字幕持续时间、单条字幕最少字数、单条字幕最大字数。

当目标文件格式为 SRT 时,可调整如下参数:SRT字幕时间格式。

文件选择完毕,参数调整完毕,然后点击转换,浏览器会自动下载转换得到的字幕文件。

图4 转换字幕

END

想让程序跑起来不简单,但想让程序跑不起来很容易,请尽量按照本文要求进行使用。程序在使用过程如果出现任何问题,欢迎在评论区留言或者后台私信,看到后会在第一时间回复。

以上就是本文的全部内容,如果觉得本文对您有一点点帮助,欢迎点赞、转发加关注,这会对我有非常大的帮助,咱们下期见!

文章文档:公众号 字节幺零二四 回复关键字即可获取本文最新内容(含附件),关键字放在公众号的本文中。


字节幺零二四
9 声望5 粉丝

talk is cheap, show me you code!