有没有 Java API 可以处理 SRT 字幕?
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组是字幕文本
Region
)和捕获NullPointerException
不太好。 - kolobok实际上,支持多行字幕文本的修改后的正则表达式来自@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);
将([^\\|]*?)
替换为任何概率较小的字符,这些字符不太可能成为字幕文本。我目前使用的是“|”字符否定规则。
((.|\\n)*?)
代替([^\\|]*?)
,这样就不会出现任何异常。 - Carson Ip这里有另一个基础的(且开源的)API,可以处理SRT和ASS字幕,链接在这里
解析SRT:
File file = Paths.get("subtitle.srt").toFile();
SRTSub subtitle = new SRTParser().parse(file);