用于SRT字幕的Java API

是否有SRT字幕的Java API?

实际的SRT解析是通过Java能够操作的正则表达式执行的。

实际的正则表达式是:

protected static final String nl = "\\\n"; protected static final String sp = "[ \\t]*"; Pattern.compile("(?s)(\\d+)" + sp + nl + "(\\d{1,2}):(\\d\\d):(\\d\\d),(\\d\\d\\d)" + sp + "-->"+ sp + "(\\d\\d):(\\d\\d):(\\d\\d),(\\d\\d\\d)" + sp + "(X1:\\d.*?)??" + nl + "(.*?)" + nl + nl); 

组2,3,4和5是开始时间组6,7,8和9是完成时间组11是字幕文本

我已经生成了一个用于解析和读取不同字幕格式的java逻辑,其中有一些是流行的srt:你可以在我的GiT存储库中找到MIT开源许可证(可以随意使用)许可的代码:

https://github.com/JDaren/subtitleConverter

您可能只需要基本类和SRTFormat类,然后您可以从InputStream读取srt文件,或者在完成编辑后获取完整的String []文件。

如果您确实发现这个有用,或者我可以帮助您,请与我联系。

PS :(其他支持的格式,部分或全部是.ASS .SSA .STL .SCC和.XML(来自W3C的TTAF-DFXP,也称为TTML 1.0)

编辑:

你可以在www.subtitleconverter.net找到工作中的逻辑

实际上来自@Panayotis支持多行字幕文本的修改后的正则表达式如下:

 protected static final String nl = "\\n"; protected static final String sp = "[ \\t]*"; Pattern.compile( "(\\d+)" + sp + nl + "(\\d{1,2}):(\\d\\d):(\\d\\d),(\\d\\d\\d)" + sp + "-->" + sp + "(\\d\\d):(\\d\\d):(\\d\\d),(\\d\\d\\d)" + sp + "(X1:\\d.*?)??" + nl + "([^\\|]*?)" + nl + nl); 

([^\\|]*?)替换为任何较不可能作为字幕文本的字符。 我目前使用“|” 性格否定规则。

还有另一个基本(和开源)API可以在这里处理SRT和ASS字幕

解析SRT:

 File file = Paths.get("subtitle.srt").toFile(); SRTSub subtitle = new SRTParser().parse(file);