自制字幕格式转换工具,Txt文本转字幕,字幕格式相互转换!

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

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

常见字幕的格式

SRT

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

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

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

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

lua 复制代码
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 行表示字幕格式。
vbnet 复制代码
[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 为后缀,以下为文件内容样例

vbnet 复制代码
[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格式字幕(歌词)包含两部分:歌曲信息(歌名、作者等)、歌词内容。

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

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

自制字幕格式转换工具

工具功能说明

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

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

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

txt 复制代码
, 。 ! ? ; , . ; 

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

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

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

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

工具配置文件

配置文件样例

properties 复制代码
# 配置文件 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 不包含字幕时间信息,为防止生成的字幕重叠在一起,需要手动设置时间信息;
  • 第一条字幕的起止时间为 0txtSplitTimeStep,第二条字幕的起止时间为 txtSplitTimeStep2×txtSplitTimeStep,以此类推;
  • txtSplitTimeStep 的值必须为正数。

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

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

命令行参数格式

在命令行中设置的参数会覆盖掉配置文件中相应参数,命令示例如下

bash 复制代码
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 文本进行分割,并将得到单条字幕的结尾标点符号去除:

ini 复制代码
,。!?;,.;

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

例句:

arduino 复制代码
"你好,我是001"。天气不错!去不去钓鱼?

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

arduino 复制代码
"你好
我是001"
天气不错
去不去钓鱼

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

arduino 复制代码
"你好,我是001"
今天天气不错
可以去钓鱼

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

工具使用步骤

如果需要在启动时指定参数,则启动步骤如下

  1. 在配置文件中设置好参数;
  2. 将配置文件和 exe 文件放于同一目录下;
  3. 打开命令行进入 exe 文件所在目录;
  4. 输入 subtitle.exe ,参数设置参照前述参数格式,回车直接启动。

如果启动时不需要设置参数,则可直接双击 exe 文件启动。

END

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

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

文章文档:公众号 字节幺零二四 回复关键字可获取本文文档。

相关推荐
别NULL3 小时前
机试题——疯长的草
数据结构·c++·算法
CYBEREXP20084 小时前
MacOS M3源代码编译Qt6.8.1
c++·qt·macos
yuanbenshidiaos4 小时前
c++------------------函数
开发语言·c++
yuanbenshidiaos5 小时前
C++----------函数的调用机制
java·c++·算法
tianmu_sama5 小时前
[Effective C++]条款38-39 复合和private继承
开发语言·c++
羚羊角uou5 小时前
【C++】优先级队列以及仿函数
开发语言·c++
姚先生975 小时前
LeetCode 54. 螺旋矩阵 (C++实现)
c++·leetcode·矩阵
FeboReigns5 小时前
C++简明教程(文章要求学过一点C语言)(1)
c语言·开发语言·c++
FeboReigns5 小时前
C++简明教程(文章要求学过一点C语言)(2)
c语言·开发语言·c++
264玫瑰资源库6 小时前
从零开始C++棋牌游戏开发之第二篇:初识 C++ 游戏开发的基本架构
开发语言·c++·架构