private static void exchange(String srtFilePath,String assFilePath){ try (BufferedReader reader = new BufferedReader(new FileReader(srtFilePath)); BufferedWriter writer = new BufferedWriter(new FileWriter(assFilePath))) { writer.write("[Script Info]\n"); writer.write("Title: Converted from SRT\n"); writer.write("ScriptType: v4.00+\n"); writer.write("WrapStyle: 0\n"); writer.write("PlayResX: 1280\n"); writer.write("PlayResY: 720\n"); writer.write("\n"); writer.write("[V4+ Styles]\n"); writer.write("Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding\n"); writer.write("Style: Default,微软雅黑,50,&H005aff65,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,2.0,0,1,2.0,0,2,10,10,22,1\n"); writer.write("Style: Secondary,微软雅黑,38,&H00ffffff,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0.4,0,1,2.0,0,2,10,10,22,1\n"); writer.write("\n"); writer.write("[Events]\n"); writer.write("Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\n"); String line; while ((line = reader.readLine()) != null) { if (line.trim().isEmpty()) { continue; } try { int srtIndex = Integer.parseInt(line.trim()); String time = reader.readLine().trim(); String[] timeParts = time.split(" --> "); String startTime = srtToAssTime(timeParts[0]); String endTime = srtToAssTime(timeParts[1]); String text = reader.readLine().trim(); if(text.contains("[")&&text.contains("]")){ continue; } writer.write("Dialogue: 0," + startTime + "," + endTime + ",Default,,0,0,0,, " + text + "\n"); } catch (NumberFormatException e) { // 可能是多行字幕文本,继续读取下一行 continue; } } } catch (IOException e) { e.printStackTrace(); } } private static String srtToAssTime(String srtTime) { String[] parts = srtTime.split(":"); int hours = Integer.parseInt(parts[0]); int minutes = Integer.parseInt(parts[1]); String[] secondsParts = parts[2].split(","); int seconds = Integer.parseInt(secondsParts[0]); int milliseconds = Integer.parseInt(secondsParts[1]); return String.format("%01d:%02d:%02d.%02d", hours, minutes, seconds, milliseconds); }