摘要
市面上绝大多数 AI 漫剧方案都卡在同一个痛点:换场景、换镜头之后角色直接变脸,一集十几分钟的漫剧,人工反复修图、重跑镜头,耗时十几个小时。很多工作室不惜租云 GPU 集群来做批量生产,成本居高不下。本文落地一套基于 ComfyUI + 本地 LLM Agent + Wan2.2-ReMixV3.0 的无人值守流水线,在 8G 显存消费级显卡上实现长剧集自动生成,剧本输入之后,Agent 自动拆分分镜、调度角色特征、切换场景、批量渲染、配音加字幕,全程无需人工盯守。内置角色特征锁定机制,跨场景、跨镜头人设统一,配套完整调度脚本、显存回收指令、自动审片脚本,输出成片直接符合红果短剧竖屏规范,全流程离线运行,没有云端风控、没有次数限制。
话不多说,先上资源,边看边做,事半功倍:链接:https://pan.quark.cn/s/6422b249063a
一、行业痛点:为什么长剧集漫剧很难稳定量产
短镜头测试看着效果很好,一旦做一集完整短剧,就会接连翻车:
- 切换场景(室内→雨夜街道→车内),IPAdapter 参考图每次重新编码,人物五官、脸型发生偏移;
- 连续渲染多个镜头,显存持续堆积,模型不主动释放,跑 3-5 个镜头直接 OOM 崩溃;
- 分镜、提示词、配音、字幕是割裂的,每一步都要人手动操作,没法自动化串联;
- 没有智能重试机制,某一个镜头渲染失败,整条流水线卡死,需要人工排查重启;
- 提示词没有根据场景自动适配,光影、画风跳变严重,一集里面画风杂乱。
本方案核心思路:Agent 智能驱动流水线 + 角色特征全局缓存 + 模型动态加载卸载 + 失败自动重试。Agent 读取剧本,自动根据场景调整提示词,复用已经缓存好的角色 embedding,渲染完成自动释放显存,镜头出错自动重试,实现无人值守跑完整集。
硬件基线
- GPU:RTX 3060 / RTX4050 8G 显存
- 内存:最低 16G,推荐 32G
- 系统:Windows10/11
- 依赖组件:ComfyUI、Wan2.2-ReMixV3.0、Ollama(本地大模型 Agent)、IPAdapter、FFmpeg、SoundTTS 本地语音模型
二、ComfyUI Agent 模式启动脚本(显存自动回收)
新建comfy_agent_auto_release.bat,低显存专属启动参数,开启权重自动卸载:
@echo off chcp 65001 set CUDA_VISIBLE_DEVICES=0 set PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True,max_split_size_mb:128 set COMFYUI_VRAM_MODE=lowvram set COMFYUI_AUTO_UNLOAD=1 set COMFYUI_FP8=1 python main.py --enable-agent-api pause
参数解释
expandable_segments:True:PyTorch 动态显存分片,减少一次性显存抢占;COMFYUI_AUTO_UNLOAD=1:单个任务结束之后,自动把闲置模型从显存释放到内存;--enable-agent-api:开启 ComfyUI 外部 API 接口,给本地 Agent 调用。
三、本地 Agent 剧本解析 + 分镜自动生成脚本(核心)
Agent 读取 txt 剧本,自动切分镜头、识别出场角色、匹配对应角色缓存文件,生成结构化分镜 JSON,自动补充运镜、光影提示词,不用人工一条一条写分镜。
import json import os from ollama import chat SCRIPT_PATH = "./script/episode01.txt" SHOT_OUTPUT = "./shot_auto.json" # 角色缓存映射表,角色名绑定特征文件 CHAR_MAP = { "女主": "./character_cache/girl.bin", "男主": "./character_cache/boy.bin", "配角": "./character_cache/support.bin" } prompt_template = """ 你是短剧分镜工程师,输入剧本文本,输出标准JSON数组。 要求: 1. 一条对话/动作对应一条镜头; 2. 识别当前出场角色,填入角色名称; 3. 根据场景自动生成画面提示词,9:16竖屏漫剧,写实画风; 4. 输出时长(单镜头24帧); 5. 只输出JSON,不要额外解释。 字段:shot_id,role_name,scene,prompt,duration """ def parse_script_to_shot(script_text): resp = chat(model="qwen3:8b", messages=[ {"role":"system","content":prompt_template}, {"role":"user","content":script_text} ]) return resp["message"]["content"] if __name__ == "__main__": with open(SCRIPT_PATH,"r",encoding="utf-8") as f: content = f.read() res = parse_script_to_shot(content) shot_data = json.loads(res) # 绑定角色特征路径 for shot in shot_data: if shot["role_name"] in CHAR_MAP: shot["char_emb_path"] = CHAR_MAP[shot["role_name"]] with open(SHOT_OUTPUT,"w",encoding="utf-8") as f: json.dump(shot_data,f,ensure_ascii=False,indent=2) print(f"分镜自动生成完成,保存至 {SHOT_OUTPUT}")
四、带失败重试的批量渲染调度脚本
自动遍历分镜任务,提交 ComfyUI 渲染,渲染失败自动重试 2 次,渲染成功写入标记文件,断电、闪退之后再次运行可以从断点继续跑。
import requests import json import os import time COMFY_API = "http://127.0.0.1:8188/prompt" SHOT_FILE = "./shot_auto.json" OUTPUT = "./output/episode01" MAX_RETRY = 2 os.makedirs(OUTPUT,exist_ok=True) def submit_prompt(workflow): try: r = requests.post(COMFY_API,json=workflow,timeout=300) return r.json() except Exception as e: print("任务提交异常:",e) return None if __name__ == "__main__": with open(SHOT_FILE,"r",encoding="utf-8") as f: shot_list = json.load(f) for shot in shot_list: flag = os.path.join(OUTPUT,f"{shot['shot_id']}.ok") if os.path.exists(flag): print(f"镜头{shot['shot_id']}已完成,跳过") continue retry = 0 success = False while retry <= MAX_RETRY and not success: print(f"开始渲染镜头{shot['shot_id']},重试次数:{retry}") # 这里填入你预调好的Wan2.2工作流,替换prompt和角色embedding路径 workflow_payload = { "prompt":{ "6":{"inputs":{"text":shot["prompt"]}}, "12":{"inputs":{"emb_path":shot["char_emb_path"]}} } } ret = submit_prompt(workflow_payload) if ret: open(flag,"w",encoding="utf-8").write("done") success = True else: retry +=1 time.sleep(10) if not success: print(f"镜头{shot['shot_id']}多次渲染失败,标记待人工处理") open(os.path.join(OUTPUT,f"{shot['shot_id']}.fail"),"w")
五、本地 TTS 批量配音 + SRT 字幕自动生成脚本
不用在线配音接口,本地离线生成语音,同时自动生成字幕文件,直接给 FFmpeg 混流使用:
from tts import local_tts import srt shot_json = "./shot_auto.json" audio_dir = "./audio" sub_list = [] os.makedirs(audio_dir,exist_ok=True) with open(shot_json,"r",encoding="utf-8") as f: shots = json.load(f) start = 0.0 for shot in shots: text = shot["prompt"] audio_path = os.path.join(audio_dir,f"{shot['shot_id']}.wav") local_tts.generate(text, audio_path) duration = shot["duration"] / 12 sub = srt.Subtitle(index=shot["shot_id"], start=srt.Timedelta(seconds=start), end=srt.Timedelta(seconds=start + duration), content=text) sub_list.append(sub) start += duration srt_content = srt.compose(sub_list) with open("./subtitle.srt","w",encoding="utf-8") as f: f.write(srt_content)
六、FFmpeg 一键拼接混流成片指令(适配短剧平台)
镜头视频、配音、字幕全部就绪之后,执行命令,自动拼接、叠加字幕,输出竖屏 H.264 成片:
ffmpeg -y -f concat -safe 0 -i video_list.txt -filter_complex "amix=inputs=1[a];subtitles=subtitle.srt:force_style='Fontname=SimHei,Fontsize=26,PrimaryColour=&Hffffff&OutlineColour=&H000000&Outline=2'" -map 0:v -map "[a]" -c:v libx264 -preset medium -crf 24 -vf "scale=720:1280,fps=24" -c:a aac -b:a 128k episode_final.mp4
video_list.txt 示例
file './output/episode01/shot1.mp4' file './output/episode01/shot2.mp4' file './output/episode01/shot3.mp4'
七、跨场景角色一致性优化方案(重点)
很多人只在单镜头用 IPAdapter,跨场景很容易崩脸,这套方案的核心优化点:
- 角色特征向量只提取一次,保存 bin 文件,全剧所有镜头共用;
- 提示词里面固定写入角色基础特征,例如:“女主,黑色长直发,鹅蛋脸,浅杏色连衣裙,五官不变”;
- 光影参数交给 Agent 自动适配:夜晚降低亮度、雨天增加蓝色冷调、室内烛光暖调;
- Wan 视频节点开启帧间特征复用,前后帧做时序约束,减少画面闪烁。
推荐 Wan2.2-ReMixV3.0 参数
- 采样器:DPM++ 2M SDE Karras
- 采样步数:24
- 分辨率:576×1024(8G 首选)
- Guidance:6.5~7.5
- 精度:FP8 量化权重
八、自动画质质检 + 异常过滤脚本
批量渲染完成自动筛查模糊、人脸崩坏、大面积畸变镜头,自动把失败镜头单独归档,减少人工审片工作量:
import cv2 import glob import os def calc_blur(img): gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) return cv2.Laplacian(gray, cv2.CV_64F).var() if __name__ == "__main__": img_paths = glob.glob("./output/episode01/*.png") bad = [] for p in img_paths: im = cv2.imread(p) score = calc_blur(im) if score < 100: bad.append(p) print("检测到画质异常镜头:") for b in bad: print(b) os.rename(b, b.replace(".png","_bad.png"))
九、整套流水线部署避坑
- Ollama 本地大模型优先用 Qwen3 8B 量化版,显存占用低,解析分镜足够稳定;
- 不要同时加载多个视频大模型,脚本控制模型按需加载,渲染完立刻释放;
- 做长剧集建议一集拆成多个小段渲染,不要一次性渲染几十条镜头;
- 输出成片 crf 不要低于 22,码率太高平台会二次压缩,画质反而变差;
- 所有模型优先 FP8/Q4 量化版本,原版 FP16 权重在 8G 显卡很容易爆显存。
十、资源包说明
整套资源包含调好的 ComfyUI 工作流 json、角色特征提取脚本、Agent 分镜解析代码、批量调度、TTS 配音脚本、FFmpeg 批处理指令、男女频短剧提示词模板,拿到之后直接导入即可启动无人值守漫剧生产线,不用自己调试节点和参数。个人创作者、小工作室可以脱离云 GPU,靠本地显卡稳定批量出短剧成片。