20 lines
1.6 KiB
TypeScript
20 lines
1.6 KiB
TypeScript
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 };
|
||
}
|