SRT 字幕用の Java API はありますか?
4 に答える
実際の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は字幕テキストです
さまざまな字幕形式を解析して読み取るための Java ロジックを作成しました。その中には人気のある srt があります。MIT オープン ソース ライセンス (何にでも自由に使用できる) の下でライセンスされたコードは、私の GiT リポジトリにあります。
https://github.com/JDaren/subtitleConverter
基本的なクラスと SRTFormat クラスだけが必要な場合があります。これにより、InputStream から srt ファイルを読み取ったり、編集が完了したら完全な String[] ファイルを取得したりできます。
これが役に立つと思うか、何かお手伝いできることがあれば、私に連絡してください。
PS: (部分的または完全にサポートされているその他の形式は、.ASS .SSA .STL .SCC および .XML (TTML 1.0 とも呼ばれる W3C の TTAF-DFXP から)
編集:
www.subtitleconverter.netで動作中のロジックを見つけることができます
実際、@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);
([^\\|]*?)
字幕テキストになる可能性が低い任意の文字に置き換えます。現在「|」を使用しています 文字否定規則。
SRT と ASS サブタイトルを処理できる別の基本的な (そしてオープン ソースの) API がここにあります
SRT の解析:
File file = Paths.get("subtitle.srt").toFile();
SRTSub subtitle = new SRTParser().parse(file);