Java API for SRT subtitles [closed]

2019-02-06 21:12发布

Is there any Java API for SRT subtitles ?

4条回答
劳资没心,怎么记你
2楼-- · 2019-02-06 21:21

There is another basic (and open source) API that can deal with SRT and ASS subtitle here

Parsing SRT :

File file = Paths.get("subtitle.srt").toFile();
SRTSub subtitle = new SRTParser().parse(file);
查看更多
欢心
3楼-- · 2019-02-06 21:30

The actual SRT parsing is performed through regular expressions, which Java is able to manipulate.

The actual regexp is:

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

group 2, 3, 4, and 5 is start time group 6, 7, 8, and 9 is finish time group 11 is subtitle text

查看更多
唯我独甜
4楼-- · 2019-02-06 21:38

I have produced a java logic with which to parse and read different subtitle formats, among them is the popular srt: you can find the code licensed under MIT open source license (free to use for whatever) in my GiT repository:

https://github.com/JDaren/subtitleConverter

You probably just need the basic classes and the SRTFormat class, and with that you can read srt files from an InputStream or get full String[] files once you've finished editing them.

If you do find this useful or I can help you with anything please contact me.

PS: (other supported formats, either partially or fully are .ASS .SSA .STL .SCC and .XML (from W3C's TTAF-DFXP also known as TTML 1.0)

EDIT:

you can find the logic at work in www.subtitleconverter.net

查看更多
淡お忘
5楼-- · 2019-02-06 21:42

Actually the modified regex from @Panayotis that supports multi-line subtitle text is like this:

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

Replace ([^\\|]*?) with any character which have less probability to come as subtitle text. I have currently used "|" character negation rule.

查看更多
登录 后发表回答