12

Is there any Java API for SRT subtitles ?

4

4 回答 4

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 组为字幕

于 2011-08-01T22:16:36.170 回答
6

我制作了一个 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中找到工作逻辑

于 2013-02-14T20:39:31.750 回答
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);

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

于 2013-12-28T15:12:09.230 回答
3

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

解析 SRT:

File file = Paths.get("subtitle.srt").toFile();
SRTSub subtitle = new SRTParser().parse(file);
于 2016-11-19T15:21:53.280 回答