【问题标题】:Java API for SRT subtitles [closed]用于 SRT 字幕的 Java API [关闭]
【发布时间】:2011-07-01 01:54:29
【问题描述】:

是否有任何用于 SRT 字幕的 Java API?

【问题讨论】:

    标签: java api multimedia subtitle


    【解决方案1】:

    实际的 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 组是字幕文本

    【讨论】:

    • 谢谢!你能解释一下这是什么:“(X1:\\d.*?)??”为了?
    • 还有一个错误——“\\n”而不是“\\\n”。如here 所述,最好将其替换为“\\r?\\n”(适用于 Windows 和 Unix)
    • 您在哪里看到“\\n”模式?现在,关于 \r 字符,我会说你是对的,但由于我现在无法解释的原因,即使文件中有 \r 字符,此模式也成功匹配并产生正确的结果!跨度>
    【解决方案2】:

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

    【讨论】:

    • 需要改进。空班(例如Region)和捕捉NullPointerExceptions 的气味不好。
    • @akapelko Region 是其他格式的未来功能(这就是它为空的原因)(将字幕设置在屏幕上的某处),SRT 不提供任何类型的布局。 NullPointerException 可能出现在奇怪的情况下,到目前为止,大多数情况都已被纠正为首先检查 null 或初始化大小为 0 的变量。但你是对的,一些折射会很好......仍然适用于 SRT。
    • 好东西 :)))))))
    【解决方案3】:

    实际上支持多行字幕文本的@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)*?)而不是([^\\|]*?),所以不会有任何异常。
    【解决方案4】:

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

    解析 SRT:

    File file = Paths.get("subtitle.srt").toFile();
    SRTSub subtitle = new SRTParser().parse(file);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多