const fs = require('fs'); const path = require('path'); // 读取 TypeScript 配置文件 const tsFile = path.join(__dirname, '../src/config/systemSubtitleTemplates.ts'); const content = fs.readFileSync(tsFile, 'utf-8'); // 提取每个模板的关键信息 const templates = []; const templateRegex = /id: "template_system_(\d+)",[\s\S]*?name: "(\d+)",[\s\S]*?titleSubtitleConfig: \{[\s\S]*?maxCharsPerLine: (\d+),[\s\S]*?sourceTitle: "([^"]+)",[\s\S]*?lines: \[([\s\S]*?)\],[\s\S]*?\},[\s\S]*?\},[\s\S]*?isSystem: true/g; let match; while ((match = templateRegex.exec(content)) !== null) { const id = match[1]; const name = match[2]; const maxCharsPerLine = parseInt(match[3]); const sourceTitle = match[4]; const linesContent = match[5]; // 提取行信息 const lines = []; const fontNames = []; const lineRegex = /\{[^}]*text: "([^"]+)"[^}]*fontName: "([^"]+)"[^}]*fontColor: "([^"]+)"[^}]*\}/g; let lineMatch; while ((lineMatch = lineRegex.exec(linesContent)) !== null) { lines.push({ text: lineMatch[1], fontName: lineMatch[2], fontColor: lineMatch[3] }); if (!fontNames.includes(lineMatch[2])) { fontNames.push(lineMatch[2]); } } templates.push({ id, name, maxCharsPerLine, sourceTitle, lines, fontNames }); } console.log('=== 模板标题字幕配置对比 ===\n'); templates.forEach(t => { console.log(`模板 ${t.name}:`); console.log(` - 每行字符数: ${t.maxCharsPerLine}`); console.log(` - 行数: ${t.lines.length}`); console.log(` - 字体: ${t.fontNames.join(', ')}`); t.lines.forEach((line, idx) => { console.log(` - 第${idx + 1}行: "${line.text}" (${line.fontName}, ${line.fontColor})`); }); console.log(''); }); // 找出相同的模板 console.log('\n=== 相同配置的模板组 ===\n'); const groups = {}; templates.forEach(t => { const key = `${t.maxCharsPerLine}-${t.lines.length}-${t.fontNames.join(',')}-${t.lines.map(l => `${l.text}:${l.fontName}:${l.fontColor}`).join('|')}`; if (!groups[key]) { groups[key] = []; } groups[key].push(t.name); }); Object.keys(groups).forEach(key => { if (groups[key].length > 1) { console.log(`模板 ${groups[key].join(', ')} 配置相同`); } });