1. 从零搭建AI漫剧生产线的整体思路
1.1 为什么选择开源工具而不是商业平台
做AI漫剧这件事,我一开始也走过弯路。最早图省事,直接用在线平台生成,结果发现三个致命问题:一是角色一致性根本没法保证,第二集主角的脸就变了;二是分镜节奏完全不可控,平台给你什么你就得用什么;三是批量生产的时候成本高得离谱,一条三分钟的漫剧光生成费用就够吃一顿火锅了。
后来我转向开源工具链,核心逻辑就一条:把创作控制权拿回自己手里。开源工具的好处在于,每个环节你都能调参、能替换、能二次开发。角色脸崩了?换模型、调LoRA权重。分镜节奏不对?自己写提示词模板。成本太高?本地部署,电费就是全部开销。
这套思路的核心是把漫剧生产拆成五个独立环节:剧本生成、角色设计、分镜绘制、动态化处理、后期合成。每个环节用一个专门的开源工具,环节之间用标准格式(JSON、PNG序列、WAV音频)衔接。这样做的好处是,任何一个环节出问题,你只需要替换那一个工具,不用推倒重来。
1.2 五环节工具链的选型逻辑
我实测下来,目前最稳的组合是这样的:
| 环节 | 推荐工具 | 核心作用 | 替代方案 |
|---|---|---|---|
| 剧本生成 | Ollama + 本地大模型 | 生成分集大纲、台词、旁白 | Text Generation WebUI |
| 角色设计 | Stable Diffusion WebUI | 生成角色三视图、表情包 | ComfyUI |
| 分镜绘制 | ComfyUI | 批量生成分镜图、保持角色一致 | InvokeAI |
| 动态化 | EbSynth + RIFE | 图片转动态、补帧 | Deforum |
| 后期合成 | Shotcut + Audacity | 剪辑、配音、字幕、音效 | Kdenlive |
选Ollama而不是直接用在线API,是因为漫剧剧本往往需要反复修改,本地跑没有次数限制,而且可以针对特定风格微调。Stable Diffusion WebUI和ComfyUI的分工也很明确:前者适合单张精修和角色设计,后者适合批量生产和流程自动化。
注意:这套工具链对硬件有基本要求。显卡至少8GB显存,推荐12GB以上。内存建议32GB,因为ComfyUI批量处理时很吃内存。如果硬件不够,可以把动态化环节放到云端,但剧本和角色设计一定要本地跑,这两步需要大量试错。
1.3 漫剧和普通AI视频的本质区别
很多人把AI漫剧和AI视频混为一谈,其实两者在生产逻辑上完全不同。普通AI视频追求的是“像真实拍摄”,所以重点在光影、材质、运动模糊。漫剧的核心是“漫画感”,它要求的是:
- 线条清晰:描边要干净,不能有噪点
- 色彩块面化:阴影用色块而不是渐变
- 角色一致性极高:同一角色在不同分镜里必须长得一样
- 表情夸张:情绪表达要比真人更强烈
这就决定了漫剧的工具链不能照搬视频生成那套。比如在ComfyUI里,漫剧工作流必须加入Lineart预处理和Flat Color后处理节点,否则生成出来的图会带有太多写实纹理,失去漫画味。
2. 剧本生成:用本地大模型写出合格的分集脚本
2.1 模型选择和量化方案
剧本生成这块,我试过不少模型。最终稳定在Qwen2.5-14B-Instruct的4bit量化版本上。为什么选这个尺寸?7B模型写出来的台词太水,缺乏戏剧冲突;32B模型推理太慢,改一版要等好几分钟,创作节奏全断了。14B是一个甜点,生成一集剧本大约30秒,质量也够用。
量化方案用GGUF格式的Q4_K_M,这个量化等级在质量和速度之间平衡得最好。实测下来,14B Q4_K_M在12GB显存的卡上跑,上下文长度8192时占用约9GB显存,留有余量给系统。
部署命令很简单:
ollama pull qwen2.5:14b-instruct-q4_K_M ollama run qwen2.5:14b-instruct-q4_K_M如果你用的是Text Generation WebUI,加载模型时记得勾选flash_attention和cache_8bit,这两个选项能显著降低显存占用。
2.2 漫剧剧本的特殊提示词结构
写漫剧剧本和写小说不一样,它需要同时输出画面描述和台词。我总结了一个三段式提示词模板,实测出片率很高:
你是一个漫剧编剧。请按照以下格式输出第X集剧本: 【场景】用一句话描述地点和时间 【画面】用三句话描述分镜画面,每句话对应一个分镜 【台词】角色名:台词内容 【旁白】可选的旁白内容 要求: 1. 每集包含6-8个分镜 2. 台词要口语化,每句不超过20字 3. 画面描述要包含角色表情和动作 4. 结尾留悬念这个模板的关键在于限制分镜数量。新手最容易犯的错误是让AI自由发挥,结果生成出20多个分镜,后期根本做不完。6-8个分镜刚好对应2-3分钟的成片,节奏也舒服。
2.3 角色设定表的维护技巧
多集漫剧最大的坑是角色性格漂移。第一集主角是个高冷剑客,第三集突然变成话痨,观众直接出戏。解决办法是维护一个角色设定表,每次生成剧本时把它塞进系统提示词里。
我的角色设定表长这样:
{ "角色名": "林霜", "年龄": "18", "性格": "外冷内热,说话简短,偶尔毒舌", "口头禅": "麻烦", "外貌": "银发,左眼有疤,黑色劲装", "背景": "被师门驱逐的剑修" }生成剧本时,把这段JSON转成自然语言描述,放在提示词最前面。实测下来,角色一致性从60%提升到90%以上。另外一个小技巧是,每生成三集就回头检查一次,如果发现性格偏移,就在提示词里加一句“注意:林霜不会说超过15个字的句子”。
实操心得:本地模型生成剧本时,温度值建议设在0.7-0.8之间。太低会重复套路,太高会胡言乱语。如果发现生成内容开始循环,把重复惩罚调到1.1,立刻就能拉回来。
3. 角色设计:用Stable Diffusion锁定角色形象
3.1 角色三视图的生成流程
角色设计是整个链条里最需要耐心的环节。我的做法是先用Stable Diffusion WebUI生成一张满意的角色立绘,然后以这张图为基准,用ControlNet生成三视图。
具体步骤:
- 用文生图生成角色正面立绘,提示词里加入
character sheet, front view, full body, white background - 挑一张最满意的,固定种子
- 开启ControlNet,加载OpenPose模型,用正面图提取骨骼
- 修改提示词为
side view或back view,生成侧面和背面 - 用Inpaint修复三视图之间的细节差异
这里的关键是固定种子。同一个种子加上相同的提示词,生成的角色脸型基本一致。如果换了种子,脸就完全变了。
3.2 LoRA训练:让角色真正稳定下来
三视图只能保证静态一致,一旦角色做出不同表情、穿上不同服装,脸还是会崩。终极解决方案是训练一个角色LoRA。
训练数据准备:用三视图加上不同表情、不同角度的生成图,凑够20-30张。然后用kohya_ss训练,参数如下:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| network_dim | 32 | LoRA秩,越高越精细但越容易过拟合 |
| network_alpha | 16 | 通常设为dim的一半 |
| learning_rate | 1e-4 | 学习率,太高会崩 |
| batch_size | 2 | 显存不够就设1 |
| epochs | 10 | 20张图训练10轮足够 |
| resolution | 768 | 漫剧角色768够用 |
训练时间在12GB显存的卡上大约40分钟。训练完成后,在生成分镜时加载这个LoRA,权重设0.7-0.8,角色一致性直接拉满。
3.3 表情包的批量生成方案
漫剧需要大量表情:喜、怒、哀、惊、羞、狠。一个个生成太慢,我的做法是用ComfyUI搭一个批量工作流:
- 输入:角色LoRA + 基础提示词
- 表情列表:
happy, angry, sad, surprised, shy, fierce - 批量节点:每张图生成4个变体
- 输出:自动按表情命名保存
这个工作流跑一次能出24张表情图,耗时约15分钟。生成后人工筛选,每个表情留2-3张最好的,存进角色素材库。后续做分镜时直接调用,不用每次重新生成。
注意:训练LoRA时,打标非常关键。不要用自动打标,手动写标签,把角色特征(发色、瞳色、服装)和可变特征(表情、动作、背景)分开。这样训练出来的LoRA才能灵活控制。
4. 分镜绘制:ComfyUI批量出图的工程化实践
4.1 漫剧专用工作流搭建
ComfyUI是批量出图的神器,但默认工作流不适合漫剧。我改造了一套漫剧专用工作流,核心节点链是这样的:
Checkpoint加载 → LoRA加载 → CLIP文本编码 → KSampler → VAE解码 → Lineart预处理 → Flat Color后处理 → 保存其中Lineart预处理用的是AnimeLineArt模型,它能把写实纹理转成干净的漫画线条。Flat Color后处理是一个自定义节点,作用是把渐变阴影压成色块。这两个节点加上去,出图立刻就有漫画味了。
工作流搭建好后,用Load Image Batch节点批量读取分镜描述文件,用Text Concatenate节点把角色LoRA触发词和分镜描述拼在一起,然后Queue批量执行。一集8个分镜,大约5分钟出完。
4.2 分镜提示词的标准化模板
分镜提示词不能随便写,必须有固定结构。我的模板是:
[角色LoRA触发词], [角色名], [表情], [动作], [服装], [场景], [镜头类型], [画风标签] 画风标签固定为:anime screencap, flat color, clean lineart, cel shading 镜头类型:close-up, medium shot, wide shot, over-the-shoulder举个例子:
lin_shuang_lora, Lin Shuang, angry, drawing sword, black martial arts outfit, snowy mountain top, medium shot, anime screencap, flat color, clean lineart, cel shading这个模板的好处是可替换。做第二集时,只需要改表情、动作、场景三个字段,其他保持不变,角色和画风就锁死了。
4.3 批量出图时的显存优化
ComfyUI批量出图最容易爆显存。我的优化方案是:
- 开启
--lowvram模式,虽然慢一点但稳定 - 把
batch_size设为1,用队列而不是批处理 - 每生成5张图自动清理一次显存,用
Clean VRAM节点 - 分辨率控制在768x1024,漫剧不需要4K
实测下来,12GB显存跑768x1024的图,队列模式可以连续出50张不崩。如果显存更小,可以把分辨率降到512x768,出图后再用Real-ESRGAN放大。
实操心得:ComfyUI的
KSampler里,steps设25-30就够了,再高收益很小。CFG设7-8,太高颜色会过饱和。sampler用dpmpp_2m,scheduler用karras,这个组合出图最稳。
5. 动态化处理:让静态分镜动起来
5.1 EbSynth的键帧插值方案
静态分镜直接剪辑会像PPT,必须做动态化。EbSynth是目前最实用的方案,原理是:你只需要画几张关键帧,它自动把中间帧补出来。
操作流程:
- 从ComfyUI导出的分镜图里,挑出动作幅度最大的几张作为关键帧
- 在EbSynth里加载关键帧和原始序列
- 调整
Patch Size参数,漫剧建议设21,太大细节丢失,太小会有噪点 - 导出补帧后的序列
一个3秒的镜头,原本需要72张图,用EbSynth只需要画6张关键帧,其余66张自动生成。效率提升10倍以上。
5.2 RIFE补帧让动作更顺滑
EbSynth补出来的帧率通常是12fps,看起来有点卡。用RIFE补到24fps或30fps,动作就顺滑了。
RIFE的用法很简单:
python inference_video.py --video input.mp4 --output output.mp4 --exp 2--exp 2表示2倍补帧,12fps变24fps。如果原片是24fps,用--exp 2补到48fps,再抽帧到30fps,效果更好。
5.3 口型同步的简化处理
漫剧不需要精确口型同步,但嘴巴完全不动也很奇怪。我的简化方案是:在角色说话时,用After Effects或Shotcut给嘴巴区域加一个轻微的缩放动画,幅度5%左右,频率跟台词节奏走。观众的大脑会自动补全口型,完全不会觉得违和。
如果追求更精细的效果,可以用Wav2Lip,但那个对硬件要求高,而且漫剧风格下容易显得突兀。我的建议是,除非特写镜头,否则用简化方案就够了。
注意:EbSynth处理时,关键帧之间的动作幅度不要太大。如果两个关键帧之间角色移动超过画面宽度的30%,补出来的中间帧会糊。解决办法是把长镜头拆成多个短镜头,每个镜头单独处理。
6. 后期合成:剪辑、配音、字幕一条龙
6.1 Shotcut剪辑的工程化设置
Shotcut是开源剪辑软件里最稳的。我的工程设置:
- 分辨率:1920x1080
- 帧率:30fps
- 色彩空间:Rec.709
- 音频采样率:48000Hz
导入素材后,按分镜顺序排列。每个镜头的时长根据台词长度定,一般一句台词2-3秒。镜头之间加Cross Dissolve转场,时长0.3秒,不要太长,否则节奏拖沓。
6.2 配音方案:本地TTS还是真人录音
配音有两个选择:本地TTS或真人录音。我的建议是主角用真人录音,配角用TTS。主角声音是漫剧的灵魂,TTS再自然也缺少情感层次。配角用TTS完全够用,还能省不少成本。
本地TTS推荐ChatTTS,它对中文的支持很好,而且可以控制语气。安装:
pip install chattts生成配音时,把台词按角色分组,每个角色用不同的音色参数。ChatTTS支持oral、laugh、break等控制标记,在台词里插入这些标记,生成出来的配音会自然很多。
6.3 字幕和音效的批量处理
字幕用Aegisub做,支持批量导入台词文件。我的做法是把剧本里的台词导出成ass格式,时间轴跟配音对齐,然后统一设置样式:字体用思源黑体,大小48,描边2px,底部居中。
音效是提升漫剧质感的关键。我整理了一个常用音效库:
| 场景 | 音效 | 来源 |
|---|---|---|
| 拔剑 | 金属摩擦声 | Freesound |
| 打斗 | 拳风、撞击 | Freesound |
| 环境 | 风声、雨声、鸟鸣 | Freesound |
| 情绪 | 心跳、耳鸣、闪回 | Freesound |
Freesound上的音效都是CC协议,免费用。下载后按场景分类,剪辑时直接拖进去。
实操心得:Shotcut导出时,用
H.264编码,码率设8M,音频用AAC,码率192k。这个配置在B站和抖音上都能直接上传,画质和文件大小平衡得最好。
7. 常见问题排查与避坑指南
7.1 角色脸崩的三种情况和解决办法
脸崩是最高频的问题,我遇到过的有三种:
情况一:不同分镜脸型不一致。原因是LoRA权重太低或提示词里角色特征描述不够。解决办法是把LoRA权重提到0.85,并在每个分镜提示词里重复角色核心特征(发色、瞳色、疤痕)。
情况二:表情变化时脸变形。原因是训练LoRA时表情样本太少。解决办法是补训,专门收集20张不同表情的图,用较低学习率(5e-5)再训5轮。
情况三:侧脸和正脸差异大。原因是训练数据里侧脸样本不足。解决办法是在三视图阶段就生成足够的侧脸和半侧脸,训练时按角度分层采样。
7.2 批量出图时的显存溢出排查
显存溢出通常发生在连续出图20张以后。排查步骤:
- 打开任务管理器,观察显存占用曲线
- 如果呈阶梯状上升,说明有节点没释放显存
- 在ComfyUI里加入
Clean VRAM节点,每5张清理一次 - 如果还不行,把
--lowvram改成--medvram,牺牲速度换稳定
另一个隐藏原因是图片分辨率。768x1024的图占用显存是512x768的2.25倍。如果显存紧张,先降分辨率,出图后再放大。
7.3 动态化后画面抖动的处理
EbSynth补帧后画面抖动,通常是关键帧选取有问题。解决办法:
- 关键帧之间的动作幅度控制在20%以内
- 在EbSynth里把
Patch Size从21降到15 - 补帧后用
Deshake滤镜做一次稳定
如果抖动依然明显,说明原始分镜的构图变化太大,需要重新生成分镜,让镜头运动更平缓。
7.4 音频视频不同步的修复
音视频不同步通常发生在补帧之后。原因是补帧改变了视频时长,但音频没变。修复方法:
- 在Shotcut里,右键视频轨,选择
Detach Audio - 手动拖动音频轨,对齐口型
- 如果偏差太大,用
Time Remap功能调整视频速度
预防措施是:先补帧,再配音,最后剪辑。顺序对了,同步问题少90%。
8. 从单集到系列:规模化生产的经验
8.1 素材库的标准化管理
做单集的时候,素材随便放桌面就行。做系列的时候,必须有标准化的目录结构:
project/ ├── characters/ # 角色LoRA和素材 │ ├── lin_shuang/ │ │ ├── lora.safetensors │ │ ├── expressions/ │ │ └── outfits/ ├── scripts/ # 剧本 │ ├── ep01.json │ └── ep02.json ├── storyboards/ # 分镜 │ ├── ep01/ │ └── ep02/ ├── audio/ # 配音和音效 ├── output/ # 成片 └── workflows/ # ComfyUI工作流这个结构的好处是,做第二季的时候,角色LoRA和工作流直接复用,只需要换剧本和分镜。
8.2 工作流模板的复用和微调
ComfyUI工作流可以导出成JSON,下次直接加载。我的做法是维护三个模板:
- 角色设计模板:用于生成新角色
- 分镜批量模板:用于日常出图
- 表情包模板:用于补充表情素材
每次做新一集,加载分镜批量模板,改一下提示词文件路径,点运行就行。微调的地方只有LoRA权重和采样步数,其他参数不动。
8.3 产能估算和排期建议
根据我的实测数据,一集3分钟漫剧的产能如下:
| 环节 | 耗时 | 备注 |
|---|---|---|
| 剧本生成 | 30分钟 | 含修改 |
| 角色设计 | 2小时 | 仅第一集需要 |
| 分镜绘制 | 1小时 | 8个分镜 |
| 动态化 | 1.5小时 | EbSynth+RIFE |
| 配音 | 1小时 | 真人+TTS混合 |
| 剪辑合成 | 1.5小时 | 含字幕音效 |
| 合计 | 约7.5小时 | 第一集 |
| 后续集 | 约5小时 | 角色复用 |
按这个产能,全职做的话一周能出2-3集。兼职的话,一周一集比较现实。
最后分享一个小技巧:把ComfyUI的工作流和Ollama的提示词模板都存成文本文件,用Git管理。每次修改都提交一次,这样如果新版本效果变差,可以随时回滚到上一个稳定版本。我靠这个习惯避免了好几次“改崩了找不回来”的惨剧。