你是否在寻找能将 txt 文件转为 srt、ass等字幕格式的工具?你是否需要将字幕从一种格式转换为另一种格式?你是否担心在线字幕格式转换工具或者会泄露你的数据?
本文将介绍常见字幕格式以及自制字幕格式转换工具。自制字幕格式转换工具不仅实现了常见字幕格式的相互转换,还可以将 TXT 文本转为常见字幕格式文件,免去手动将字幕一句一句复制到剪辑软件中的繁琐过程。
常见字幕的格式
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]我是第二句字幕
自制字幕格式转换工具
工具功能说明
目前支持 txt、srt、ass、lrc 格式相互转换,免安装、本地运行、不用联网。
由于不同格式表示信息的能力存在差异,所以格式转换可能会丢失部分信息。
对于 TXT 文件:会按照以下符号对文本进分割,划分为一个个句子。
, 。 ! ? ; , . ;
对于 TXT 文件:空行会被忽略,单条字幕长度和持续时间可通过参数控制。
对于 SRT 格式文件:时间格式中,秒与毫秒的分隔符可以手动指定。
对于 ASS 格式文件:Script Info、V4+ Styles 以及 Events 的 Format 行和 Comment 行会被忽略。
对于 LRC 格式文件:歌曲信息(歌名、作者等)会被忽略。
工具配置文件
配置文件样例
# 配置文件 mine.cnf
input=D:\data\a.txt
output=D:\data\b.srt
txtSplitMode=1
txtSplitMinLen=1
txtSplitTimeStep=50
srtMillSep=,
配置文件支持注释,若当前行以 #
开头,则程序在读取时会忽略当前行。配置文件中请勿包含空格。配置文件名称为 mine.cnf
,请勿修改。配置文件中各参数的含义如下
input
:输入文件路径
- 支持绝对路径和相对路径,相对路径是指相对于 exe 文件的路径;
- 路径建议不要包含空格或者中文;
- 路径请勿用双引号或者单引号包裹;
- 输入文件必须存在。
output
:输出文件路径
- 输出文件可以不存在。当输出文件不存在时,会自动创建文件,当输出文件存在时,会覆盖源文件。
- 其余要求同 input。
txtSplitMode
:txt 分割模式
- 目前仅支持值 1,表示,在对 txt 文本进行分割时,按照前述分隔符将文本分割为若干条句子。
txtSplitMinLen
:txt 分割得到的句子的最小长度
- 当碰到
,,
分隔符时,若当前句子长度小于 txtSplitMinLen,则不会进行分割。 - txtSplitMinLen 的值必须为正数。
txtSplitTimeStep
:将 txt 转为其他字幕格式时,所得到的每条字幕的持续时间。
- 由于 txt 不包含字幕时间信息,为防止生成的字幕重叠在一起,需要手动设置时间信息;
- 第一条字幕的起止时间为 0~txtSplitTimeStep,第二条字幕的起止时间为 txtSplitTimeStep~2×txtSplitTimeStep,以此类推;
- txtSplitTimeStep 的值必须为正数。
srtMillSep
:srt 字幕的时间格式中,秒和毫秒之间的分隔符。
- srtMillSep 的值仅支持英文的
,
和.
。
命令行参数格式
在命令行中设置的参数会覆盖掉配置文件中相应参数,命令示例如下
subtitle.exe -i a.txt -o b.srt -m 1 -ml 20 -ts 10 -ms ,
项与项之间用空格分隔,参数设置顺序随意,可仅设置某些参数。
-i
: 指定输入文件路径:
- 后跟空格,然后跟输入文件路径,其余参数若无特别说明,均有此要求;
- 路径建议不要包含中文或者空格,当路径含有空格时,请用双引号包裹路径;
- 支持绝对路径和相对路径,相对路径是指相对于 exe 文件的路径;
- 输入文件必须存在。
-o
:指定输出文件路径:
- 输出文件可以不存在。当输出文件不存在时,会自动创建文件,当输出文件存在时,会覆盖源文件。
- 其余要求同
-i
。
-m
:含义与前述配置文件中的 mode
相同。
-ml
:含义与前述配置文件中的 txtSplitMode
相同。
-ts
:含义与前述配置文件中的 txtSplitTimeStep
相同。
-ms
:含义与前述配置文件中的 srtMillSep
相同。
TXT 文件转字幕格式文件
程序会将下列字符视为分隔符对 txt 文本进行分割,并将得到单条字幕的结尾标点符号去除:
,。!?;,.;
即便上述字符出现在括号、双引号等符号中间,仍然会被视为分隔符。通常情况下,会使得结果不太符合预期,所以,转换前请先清理文本,确保文本中不包含括号/引号或者括号/引号中不包含分隔符。
例句:
"你好,我是001"。天气不错!去不去钓鱼?
例句会被切分成以下四条字幕,显然不是很符合要求。
"你好
我是001"
天气不错
去不去钓鱼
通过 txtSplitMinLen
参数可设置转换后得到的单条字幕的最短长度,仅对分隔符 ,,
有效。假设值设置为 5,对于前面的例句切分结果,由于第一条字幕长度为 3 ,所以会和第二条字幕合并,对于第三条字幕,尽管长度小于 5,但其后的分隔符为 !
,所以仍会被切割。所以,设置 txtSplitMinLen
的值为 5 后,会被切分成以下三条字幕。
"你好,我是001"
今天天气不错
可以去钓鱼
通过 txtSplitTimeStep
参数可设置转换后得到的单条字幕的持续时间。
工具使用步骤
如果需要在启动时指定参数,则启动步骤如下
- 在配置文件中设置好参数;
- 将配置文件和 exe 文件放于同一目录下;
- 打开命令行进入 exe 文件所在目录;
- 输入
subtitle.exe
,参数设置参照前述参数格式,回车直接启动。
如果启动时不需要设置参数,则可直接双击 exe 文件启动。
END
想让程序跑起来不简单,但想让程序跑不起来很容易,请尽量按照本文要求进行使用。程序在使用过程如果出现任何问题,欢迎在评论区留言或者后台私信,看到后会在第一时间回复。
以上就是本文的全部内容,如果觉得本文对您有一点点帮助,欢迎点赞、转发加关注,这会对我有非常大的帮助,咱们下期见!
文章文档:公众号 字节幺零二四
回复关键字可获取本文文档。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。