SRT字幕是否有任何Java API?
答案 0 :(得分:7)
实际的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组是副标题文本
答案 1 :(得分:6)
我已经制作了一个用于解析和阅读不同字幕格式的java逻辑,其中有一些是流行的srt:你可以在我的GiT存储库中找到MIT开源许可证(可以随意使用)许可的代码: / p>
https://github.com/JDaren/subtitleConverter
您可能只需要基本类和SRTFormat类,然后您可以从InputStream中读取srt文件,或者在完成编辑后获取完整的String []文件。
如果您确实发现这个有用,或者我可以帮助您,请与我联系。
PS :(其他支持的格式,部分或全部是.ASS .SSA .STL .SCC和.XML(来自W3C的TTAF-DFXP,也称为TTML 1.0)
编辑:
中找到适用的逻辑答案 2 :(得分:6)
实际上,支持多行字幕文本的@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);
将([^\\|]*?)
替换为任何较不可能作为字幕文本的字符。我目前使用“|”人格否定规则。
答案 3 :(得分:1)
还有另一个基本(和开源)API可以处理SRT和ASS副标题here
解析SRT:
File file = Paths.get("subtitle.srt").toFile();
SRTSub subtitle = new SRTParser().parse(file);