67 lines
2.6 KiB
Java

package com.yutou.bilibili.Tools;
import com.yutou.bilibili.BiliBili.Datas.DanmuData;
import com.yutou.bilibili.sqlite.BiliBiliLiveDatabasesManager;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DanmuTools {
public static File danmuToAss(File live, File danmu, boolean useFileNameData, String... filterDanmu) {
BiliBiliLiveDatabasesManager manager = new BiliBiliLiveDatabasesManager();
try {
FileTime creationTime = Files.readAttributes(Paths.get(live.getAbsolutePath()), BasicFileAttributes.class).creationTime();
FileTime lastModifiedTime = Files.readAttributes(Paths.get(live.getAbsolutePath()), BasicFileAttributes.class).lastModifiedTime();
Date startTime;
if (useFileNameData) {
startTime = getLiveDate(live.getName());
} else {
startTime = new Date(creationTime.toMillis());
}
manager.init(danmu);
List<DanmuData> danmuData = manager.queryDanmu(startTime, new Date(lastModifiedTime.toMillis()));
AssTools assTools = new AssTools(live.getName(), startTime);
assTools.addFilter(filterDanmu);
assTools.setAlpha(128);
for (DanmuData danmuDatum : danmuData) {
assTools.addDanmu(danmuDatum);
}
assTools.saveDanmu(live.getAbsolutePath().replace(live.getName().substring(live.getName().lastIndexOf(".")), ".ass"));
} catch (Exception e) {
e.printStackTrace();
} finally {
manager.close();
}
return null;
}
private static Date getLiveDate(String fileName) {
Pattern pattern = Pattern.compile("(\\[.*\\]).");
Matcher matcher = pattern.matcher(fileName);
if (matcher.find()) {
String str = matcher.group(1);
try {
return new SimpleDateFormat("[yyyy-MM-dd HHmmss]").parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
public static void main(String[] args) {
File live = new File("Z:\\BiliBiliLive\\live\\2022-04-24\\[2022-04-24 213155]1022.mp4");
File danmu = new File("Z:\\BiliBiliLive\\live\\2022-04-24\\[2022-04-24]1022.db");
danmuToAss(live, danmu,true, "老板大气!点点红包抽礼物!");
}
}