多个srt文件合并
多个字幕文件路径以list存放,每个字幕文件的内容都追加在第一个字幕文件之后,时长累加,字幕编号累加。 直接上代码
public void mergeSrt(List<String> srtPathList){
if (srtPathList != null && srtPathList.size() > 0){
FileOutputStream mergeFos = null;
int maxNumber = 0;
long maxTime = 0L;
File firstSrtFile = new File(srtPathList.get(0));
try {
InputStreamReader read = new InputStreamReader(new FileInputStream(firstSrtFile), "utf-8");
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt;
List<String> lineList = new ArrayList<>();
while ((lineTxt = bufferedReader.readLine()) != null){
lineList.add(lineTxt);
}
if (lineList != null && lineList.size() > 4){
int size = lineList.size();
maxNumber = Integer.parseInt(lineList.get(size - 4));
String timeString = lineList.get(size - 3).split(" ")[2];
maxTime = ConvertUtil.convertToMs(timeString);
}
read.close();
bufferedReader.close();
mergeFos = new FileOutputStream(firstSrtFile, true);
for (int i = 1; i < srtPathList.size(); i++){
InputStreamReader readI = new InputStreamReader(new FileInputStream(srtPathList.get(i)), "utf-8");
BufferedReader bufferedReaderI = new BufferedReader(readI);
String lineTxtI;
int lines = (int) Files.lines(Paths.get(srtPathList.get(i))).count();
int index = 0;
while ((lineTxtI = bufferedReaderI.readLine()) != null){
index ++;
switch (index % 4){
case 1 :
lineTxtI = String.valueOf(Integer.parseInt(lineTxtI) + maxNumber);
break;
case 2 :
String[] timeArray = lineTxtI.split(" --> ");
long bg = Long.valueOf(ConvertUtil.convertToMs(timeArray[0])) + maxTime;
long ed = Long.valueOf(ConvertUtil.convertToMs(timeArray[1])) + maxTime;
lineTxtI = ConvertUtil.convertTime(bg) + " --> " + ConvertUtil.convertTime(ed);
break;
}
switch (lines - index){
case 3 :
maxNumber = Integer.parseInt(lineTxtI);
break;
case 2 :
String[] timeArray = lineTxtI.split(" --> ");
maxTime = Long.valueOf(ConvertUtil.convertToMs(timeArray[1]));
break;
}
lineTxtI += "\r\n";
mergeFos.write(lineTxtI.getBytes());
}
bufferedReaderI.close();
readI.close();
File delFile = new File(srtPathList.get(i));
delFile.delete();
}
mergeFos.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
mergeFos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
用到的工具类
public class ConvertUtil {
public static String convertTime (long ms){
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss,SSS");
format.setTimeZone(TimeZone.getTimeZone("GMT+00:00"));
return format.format(ms);
}
public static long convertToMs (String timeString){
if (StringUtils.isBlank(timeString)){
return 0;
}
long maxTime;
String[] timeStringArray = timeString.split(":");
if (timeStringArray.length < 3){
return 0;
}
int hour = Integer.parseInt(timeStringArray[0]);
int minute = Integer.parseInt(timeStringArray[1]);
int second = Integer.parseInt(timeStringArray[2].split(",")[0]);
if (timeStringArray[2].split(",").length < 2){
maxTime = (hour * 3600 + minute * 60 + second) * 1000;
return maxTime;
}
maxTime = (hour * 3600 + minute * 60 + second) * 1000 + Integer.parseInt(timeStringArray[2].split(",")[1]);
return maxTime;
}
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-17370.html