你是否在寻找能将 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]我是第二句字幕
自制工具
功能说明
目前支持 txt
、srt
、ass
、lrc
格式相互转换,免安装、本地运行、不用联网。
由于不同格式表示信息的能力存在差异,所以格式转换可能会丢失部分信息。
对于 TXT
文件:会按照以下符号对文本进分割,划分为一个个句子。
, 。 ! ? ;: , . ; :
对于 TXT
文件:空行会被忽略,单条字幕长度和持续时间可通过参数控制。
对于 SRT
格式文件:时间格式中,秒与毫秒的分隔符可以手动指定。
对于 ASS
格式文件:Script Info、V4+ Styles 以及 Events 的 Format 行和 Comment 行会被忽略。
对于 LRC
格式文件:歌曲信息(歌名、作者等)会被忽略。
参数说明
图1 参数设置
txtSplitMode
:txt 分割模式
- 目前仅支持值 1,表示,在对
txt
文本进行分割时,按照前述分隔符将文本分割为若干条句子。
txtSplitMinLen
:txt
分割得到的句子的最小长度
- 当碰到
,,
分隔符时,若当前句子长度小于 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
想让程序跑起来不简单,但想让程序跑不起来很容易,请尽量按照本文要求进行使用。程序在使用过程如果出现任何问题,欢迎在评论区留言或者后台私信,看到后会在第一时间回复。
以上就是本文的全部内容,如果觉得本文对您有一点点帮助,欢迎点赞、转发加关注,这会对我有非常大的帮助,咱们下期见!
文章文档:公众号 字节幺零二四
回复关键字即可获取本文最新内容(含附件),关键字放在公众号的本文中。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。