私人影库支持解析ova

This commit is contained in:
mtvpls
2026-01-03 16:40:39 +08:00
parent 2054e3122f
commit a10bf361a8
8 changed files with 62 additions and 23 deletions
+1
View File
@@ -43,6 +43,7 @@ export interface VideoInfo {
season?: number;
title?: string;
parsed_from: 'videoinfo' | 'filename';
isOVA?: boolean;
};
};
last_updated: number;
+13 -10
View File
@@ -4,6 +4,7 @@ export interface ParsedVideoInfo {
episode?: number;
season?: number;
title?: string;
isOVA?: boolean;
}
/**
@@ -27,27 +28,29 @@ export function parseVideoFileName(fileName: string): ParsedVideoInfo {
// 降级方案:使用多种正则模式提取集数
// 按优先级排序:更具体的模式优先
const patterns = [
const patterns: Array<{ pattern: RegExp; isOVA?: boolean }> = [
// OVA01, OVA 01, ova01, ova 01 (OVA特殊处理) - 最优先
{ pattern: /OVA\s*(\d+(?:\.\d+)?)/i, isOVA: true },
// S01E01, s01e01, S01E01.5 (支持小数) - 最具体
/[Ss]\d+[Ee](\d+(?:\.\d+)?)/,
// [01], (01), [01.5], (01.5) (支持小数) - 很具体
/[\[\(](\d+(?:\.\d+)?)[\]\)]/,
{ pattern: /[Ss]\d+[Ee](\d+(?:\.\d+)?)/ },
// [01], (01), [01.5], (01.5) (支持小数,但要排除中文括号内容) - 很具体
{ pattern: /[\[\(](\d+(?:\.\d+)?)[\]\)]/ },
// E01, E1, e01, e1, E01.5 (支持小数)
/[Ee](\d+(?:\.\d+)?)/,
{ pattern: /[Ee](\d+(?:\.\d+)?)/ },
// 第01集, 第1集, 第01话, 第1话, 第1.5集 (支持小数)
/第(\d+(?:\.\d+)?)[集话]/,
{ pattern: /第(\d+(?:\.\d+)?)[集话]/ },
// _01_, -01-, _01.5_, -01.5- (支持小数)
/[_\-](\d+(?:\.\d+)?)[_\-]/,
{ pattern: /[_\-](\d+(?:\.\d+)?)[_\-]/ },
// 01.mp4, 001.mp4, 01.5.mp4 (纯数字开头,支持小数) - 最不具体
/^(\d+(?:\.\d+)?)[^\d.]/,
{ pattern: /^(\d+(?:\.\d+)?)[^\d.]/ },
];
for (const pattern of patterns) {
for (const { pattern, isOVA } of patterns) {
const match = fileName.match(pattern);
if (match && match[1]) {
const episode = parseFloat(match[1]);
if (episode > 0 && episode < 10000) { // 合理的集数范围
return { episode };
return { episode, isOVA };
}
}
}