export function tvstarOutputRequirements(goal: string) { const ratioRequests = [...goal.matchAll(/\b(21|16|9|4|3|1)\s*[::]\s*(9|16|3|4|1)\b|竖屏|纵向|portrait|横屏|横向|landscape|方形|正方形|square/gi)]; const lastRatio = ratioRequests.at(-1); const ratio = lastRatio?.[1] ? `${lastRatio[1]}:${lastRatio[2]}` : /竖屏|纵向|portrait/i.test(lastRatio?.[0] || "") ? "9:16" : /方形|正方形|square/i.test(lastRatio?.[0] || "") ? "1:1" : "16:9"; if (!["21:9", "16:9", "9:16", "1:1", "4:3", "3:4"].includes(ratio)) throw Error("当前成片不支持所要求的画幅比例"); const explicitResolutions = [...goal.matchAll(/\b(480|720|1080)\s*p\b/gi)]; if (/\b[24]\s*k\b|超高清|4K高清/i.test(goal) && !explicitResolutions.length) throw Error("TVstar 自动成片目前最高支持 1080P;2K/4K 请使用独立视频高清功能"); const resolution = explicitResolutions.at(-1) ? `${explicitResolutions.at(-1)![1]}p` : "720p"; const audibleBrief = goal .replace(/(?:不要|无需|不需要|禁止)(?:静音|无声)/g, "有声") .replace(/(?:不要|无需|不加|不需要|不含|禁止)[^,,。;;\n]{0,8}(?:配乐|音乐|音效|旁白|对白|台词|bgm)/gi, ""); const audioRequests = [...audibleBrief.matchAll(/(无声|静音|不要(?:任何)?(?:声音|音频)|不含(?:任何)?(?:声音|音频)|silent|no audio)|配乐|音乐|音效|旁白|对白|台词|声音|有声|bgm|soundtrack|voiceover/gi)]; const audioRequest = audioRequests.at(-1); return { ratio, resolution, generateAudio: audioRequest ? !audioRequest[1] : undefined }; }