用于SRT字幕的Java API

时间:2011-02-21 06:15:18

标签: java api multimedia subtitle

SRT字幕是否有任何Java API?

4 个答案:

答案 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)

编辑:

您可以在www.subtitleconverter.net

中找到适用的逻辑

答案 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);