优化全能创作部分优化脚本
This commit is contained in:
@@ -948,6 +948,35 @@ _CAPTION_FIELD_INLINE_RE = re.compile(rf"[,,;;、]?\s*{_CAPTION_WORDS}\s*[
|
||||
_CAPTION_CLAUSE_RE = re.compile(rf"[,,;;、]?\s*[^,,;;。\n]*{_CAPTION_WORDS}[^,,;;。\n]*[。]?")
|
||||
|
||||
|
||||
_SPEECH_LINE_RE = re.compile(
|
||||
r"^(\s*)(口播|旁白|台词|对白|解说)\s*[::]\s*(.+)$"
|
||||
)
|
||||
_SPEECH_AUDIO_ONLY_PREFIX = "人声(仅音频,由人物口型与配音表达,不出现在画面上):"
|
||||
|
||||
|
||||
def rewrite_speech_as_audio_only(prompt: str) -> str:
|
||||
"""把「口播:/旁白:/台词:」改写成「人声(仅音频…)」抬头。
|
||||
|
||||
全能创作 / 自由创作的 video_prompt 常按秒级分镜写「口播:…」。
|
||||
裸摆口播原文时,出片模型极易把这段可见文本烧成画面字幕 —— 专业创作
|
||||
已用同一抬头(_segment_script_text);这里对所有入口统一改写。
|
||||
已带「仅音频」抬头的行不重复包一层。
|
||||
"""
|
||||
out: list[str] = []
|
||||
for line in (prompt or "").split("\n"):
|
||||
if "仅音频" in line and "人声" in line:
|
||||
out.append(line)
|
||||
continue
|
||||
m = _SPEECH_LINE_RE.match(line)
|
||||
if m:
|
||||
indent, _kind, speech = m.group(1), m.group(2), m.group(3).strip()
|
||||
if speech:
|
||||
out.append(f"{indent}{_SPEECH_AUDIO_ONLY_PREFIX}{speech}")
|
||||
continue
|
||||
out.append(line)
|
||||
return "\n".join(out)
|
||||
|
||||
|
||||
def strip_caption_directives(prompt: str) -> str:
|
||||
"""把正文里所有会让模型联想到「画面文字」的字样抹掉 —— 无论它是要求加字幕还是声明没有字幕。
|
||||
模型不区分肯定否定,看到「字幕」这个词本身就更容易画出来,所以一律清掉,
|
||||
@@ -966,15 +995,18 @@ def strip_caption_directives(prompt: str) -> str:
|
||||
|
||||
|
||||
def enforce_no_embedded_captions(prompt: str) -> str:
|
||||
"""所有视频入口(专业创作 / 一键成片 / 自由创作 / 视频复刻 / 提炼改写)最终汇入这里:
|
||||
先洗掉正文里的字幕字段,再把最高优先级的无字幕禁令置于提示词第一行。
|
||||
"""所有视频入口(专业创作 / 一键成片 / 自由创作 / 视频复刻 / 提炼改写 / 全能创作)最终汇入这里:
|
||||
先把「口播:」改写成仅音频抬头,再洗掉字幕字段,最后挂最高优先级无字幕禁令。
|
||||
首镜最容易被模型自动加标题,所以不能再把禁令放在长提示词末尾。"""
|
||||
# 顺序要紧:先摘掉可能已存在的规则本身,再洗正文,最后统一拼回去。
|
||||
# 反过来的话,清洗器会把规则里「不要字幕…」那半句也当成字幕字样吃掉 → 摘不干净 → 规则拼两遍
|
||||
# (重复 = 负面词频翻倍 = 更容易出字幕,正是本次要根治的毛病)。
|
||||
base = (prompt or "").replace(NO_EMBEDDED_CAPTIONS_REQUIREMENT, "").replace(NO_EMBEDDED_CAPTIONS_TAIL, "")
|
||||
base = base.replace(OPENING_SHOT_DIRECTIVE, "")
|
||||
base = rewrite_speech_as_audio_only(base)
|
||||
base = strip_caption_directives(base).strip()
|
||||
# 首帧最容易被模型自动加标题页 → 规则放开头;末位权重高 → 结尾补一句中性的正面复述。
|
||||
# 口播改写后再挂洁净规则,避免「口播:」原文被模型烧成字幕。
|
||||
return f"{NO_EMBEDDED_CAPTIONS_REQUIREMENT}\n{base}\n{NO_EMBEDDED_CAPTIONS_TAIL}".strip()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user