是否有用于SRT字幕的Java API?
发布于 2011-08-02 06:16:36
实际的SRT解析是通过正则表达式执行的,Java能够操纵正则表达式。
实际的regexp是:
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是字幕文本
发布于 2013-02-15 04:39:32
我制作了一个java逻辑,用来解析和读取不同的字幕格式,其中包括流行的srt:你可以在我的GiT存储库中找到遵循麻省理工学院开源许可证(免费使用)的代码:
https://github.com/JDaren/subtitleConverter
您可能只需要基本的类和SRTFormat类,有了它们,您就可以从InputStream中读取srt文件,或者在完成编辑后获得完整的String[]文件。
如果你觉得这很有用,或者我能帮上什么忙,请联系我。
PS:(其他支持的格式,部分或全部是.ASS .SSA .STL .SCC和.XML (来自W3C的TTAF-DFXP,也称为TTML1.0)
编辑:
您可以在www.subtitleconverter.net中找到工作逻辑
发布于 2013-12-28 23:12:09
实际上,支持多行字幕文本的@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);将([^\\|]*?)替换为出现为字幕文本概率较小的任何字符。我目前使用的是"|“字符否定规则。
https://stackoverflow.com/questions/5062914
复制相似问题