这次我们来看的不是一个新模型,也不是某个开源框架,而是一个很具体的创作需求:COC跑团做预告PV。最近社团内部要发一条《奈亚的面具:序章》的跑团预告,标题也拟好了,叫“我们团真的太有特‘色’了”。这里的“色”可以理解成视觉色彩,也可以理解成角色个性和团的整体风格非常鲜明。问题在于,团队里没有人会画画,也没有人会剪复杂的动态视频。所以这件事的终点很明确:在不依赖专业美术和影视团队的条件下,把一页半的角色设定和跑团梗概,变成一条能发出去的预告片。
这条PV的制作链路,本质上是一条AI工具流水线,涉及角色立绘生成、图生视频、TTS配音、字幕压制和剪辑合成。整个过程没有什么高不可攀的门槛,最常见的组合方式是“Stable Diffusion系本地部署 + TTS语音合成 + 剪辑软件”,大部分工具都能在消费级显卡上跑,部分环节甚至可以直接用CPU推理完成。本文会把这条流水线拆开,从素材准备、模型选择、批量出图、动态化、配音到最终发布检查,全部过一遍。适合跑团主持人、玩家社群的内容运营,以及所有想在低成本条件下做TRPG宣传素材的技术型玩家。
另外提醒一句:从制作到发布,要特别注意“奈亚的面具”这个模组本身的版权边界。模组文本、官方美术图、NPC设定都属于原作者和发行方。粉丝向非商业PV可以做,但不能把整本模组内容搬上来,更不能拿去做收费或引流变现。下面的所有操作都默认是“自用素材 + 原创美术 + 非商业发布”的范围。
1. 核心能力速览
先给出这条预告PV制作流水线的全貌,后面每一道工序都会单独展开。
| 工序 | 可选工具/模型类型 | 硬件门槛 | 批量/接口能力 | 说明 |
|---|---|---|---|---|
| PV脚本整理 | 大语言模型(本地或在线) | 无特殊要求 | 可批量改写多段文案 | 将跑团随笔改成可配音的短视频脚本 |
| 角色立绘 | Stable Diffusion WebUI / ComfyUI | 4G以上显存可试,建议8G以上 | 支持API批量出图 | 需要配合角色参考图保持一致 |
| 立绘动态化 | 图生视频模型 / AnimateDiff / 在线视频生成 | 本地要求较高,在线服务则无门槛 | 通常按单条任务处理 | 每次生成的镜头不宜过长 |
| 配音 | 开源TTS / 在线TTS / 音色克隆 | CPU可运行部分模型,低显存也能跑 | 可脚本批量生成干音 | 涉及真人音色时必须获得本人授权 |
| 字幕与剪辑 | 剪映 / Pr / ffmpeg | 普通电脑即可 | 支持字幕批量导入 | 最后一步,完成成片压制 |
| 音频/视频素材管理 | 目录结构 + 批处理脚本 | 普通电脑即可 | 强烈建议脚本化 | 避免几十个素材手忙脚乱 |
从整个流程看,最卡硬件的环节是本地图像生成和视频生成。如果团队没有现成显卡,也可以全部改用在线平台,代价是排队、限额和费用。更稳妥的做法是:立绘和视频走在线方案,配音和剪辑走本地方案,两边都尽量保留接口化批处理能力。
2. 适用场景与使用边界
2.1 这套流程适合谁
首先是TRPG玩家社群。无论你是GM想给新团做个预告,还是某个跑团节目组需要季播宣传物料,这套流程都能在1到2天内出一条60秒左右的完整PV。它不需要你会画画,也不需要你懂分镜,关键是能把“角色特征”“团风”“模组氛围”翻译成提示词和镜头描述。
其次是做AI内容生产测试的人。跑团PV是一个很典型的“多模态组合任务”,涉及图、文、声、画,而且需要批量处理。它比单纯生成一张图有意思得多,也比单纯跑一个TTS更能验证工具链的稳定性。你可以把它当成一次小规模的AI内容流水线实战。
2.2 不适合什么场景
如果目标是做一条“完全手绘风格、讲究精确分镜、达到商业动画水准”的预告,那这套AI辅助流程不适合。AI生成的角色一致性仍然需要花时间和参考图做约束,很难像专业美术那样随时调整角度、表情和动作。如果想用真实跑团录像剪辑,那也不属于本文讨论范围,本文讲的是“以AI生成立绘/动态素材为核心”的预告PV路线。
2.3 版权、肖像和隐私边界
这是最容易踩坑的部分。
- 模组版权:“奈亚的面具”是Chaosium出版的经典战役模组,国内玩家讨论和二创很常见,但发布预告PV时,不应直接搬运模组原文、官方地图、官方立绘。正确做法是:只使用模组名称和大致氛围,台词由玩家原创。
- 角色版权:如果角色是某位玩家的原创PC,做成PV前最好和玩家确认授权。
- 声音授权:如果打算克隆某位主持人的音色来做旁白,必须获得对方明确同意。不建议使用陌生人的音色素材。
- AI内容标识:多数视频平台要求AI生成内容进行标识,发布前要按平台规则勾选或说明。
- 肖像权:不要用真人照片直接作为角色的底图。
3. 素材准备与前置条件
3.1 从跑团文档中提炼PV脚本
先准备一份可以“被消费”的文本素材。通常包括:
- 跑团结团动机,也就是这一团为什么组起来。
- 每个PC的角色卡摘要,包括职业、外貌特征、标志性道具、口头禅。
- 模组序章的关键事件清单,比如“调查员收到一封神秘邀请函”。
- 团里的名场面或梗,比如某位PC的经典失败动作。
建议把这些内容整理成一个纯文本文件,每行对应PV里的一句或一段文案,方便后续TTS批量处理。如果文案比较口语化,也可以先丢给本地大语言模型润色,但最终要经过人工确认,不要拿第一版就直接配音。
3.2 角色立绘与场景素材
预告PV最常见的形式是“角色立绘 + 场景背景 + 少量动态效果 + 字幕台词”。所以需要准备:
- 每个PC的半身立绘,建议统一比例,比如2:3或者9:16。
- 场景背景,如旧日支配者的祭坛、昏暗的旅店、迷雾中的街道。
- 道具特写,比如发光的面具、泛黄的书信、老式打字机。
如果按传统工作流,这些东西需要请画师。走AI路线时,它们的生成成本会大幅降低,但整理成本依然存在,所以建议建一个清晰的素材目录。
3.3 音频素材
音频分两类。一类是TTS生成的干音,也就是角色台词。另一类是环境音和BGM,比如钟声、风声、打字机声、古典悬疑配乐。BGM可以去免费音效网站找,注意查看授权条款,不要拿商业配乐库的曲目直接做公开视频。
3.4 本地工具链检查清单
在开始操作前,按下面清单检查环境。
| 检查项 | 要求 | 说明 |
|---|---|---|
| 操作系统 | Windows 10/11、Ubuntu 20.04+ | 本地部署Stable Diffusion系列工具,Windows下调试更方便 |
| Python | 3.10 或 3.11 | 绝大多数图像/视频/TTS项目都在这个区间 |
| GPU驱动 | NVIDIA驱动已安装 | 新版PyTorch对驱动版本有最低要求 |
| CUDA/PyTorch | 按模型要求安装 | 不强制手动装CUDA,装PyTorch时会带对应运行库 |
| 磁盘空间 | 至少预留40G | 模型文件、临时素材、输出视频都会占空间 |
| 端口占用 | 7860、7861、8188等 | WebUI默认端口,冲突时需要换端口 |
如果只是用在线工具,那只需要浏览器和足够的网络带宽。但本地部署能更好地解决隐私和批量成本问题。
4. 技术选型:不同团怎么办
不用一开始就把所有工具都装上。建议先想清楚团队条件和目标效果,再决定技术路线。
4.1 零基础路线:在线AI生成 + 剪辑软件
如果你没有显卡,也不打算学复杂部署,那就用在线AI绘画和在线图生视频。典型链路是:
在线绘画生成角色立绘 -> 图生视频工具让立绘产生轻微动态 -> 在线TTS生成旁白 -> 剪映合成字幕和BGM这条路线优点是没有安装成本,缺点是排队、限额、以及角色一致性可能不如本地可控。对于一条60秒的粉丝向PV来说完全够用。
4.2 本地图像生成:Stable Diffusion 系
如果手头有8G显存以上的NVIDIA显卡,推荐在本地跑Stable Diffusion WebUI或ComfyUI。这样做的直接好处是可以批量出图、接入角色参考图、反复调整提示词而不产生额外费用。
启动本地WebUI的思路如下,具体命令以你下载的整合包或官方仓库说明为准:
# 假设已经把项目克隆到本地 cd stable-diffusion-webui python launch.py --xformers --api其中--api参数会开启API服务,方便后面脚本批量调用。端口默认是7860,浏览器访问http://127.0.0.1:7860即可打开Web界面。
4.3 动态化:图生视频 / AnimateDiff
本地图生视频方案主要有两类。一类是ComfyUI里的AnimateDiff等节点,可以用一张立绘生成一小段几秒钟的动态镜头;另一类是独立的视频生成模型或者在线视频生成服务。
从使用成本看,在线图生视频更容易上手,但要控制单次生成时长,通常几秒钟一个镜头。本地AnimateDiff对显存要求比较高,建议第一次先用小分辨率测试。
4.4 配音:TTS 与音色克隆
配音是整条PV里最能出效果的一环。跑团预告PV通常需要一个沉稳的旁白声,再加上角色台词可以切换不同音色。比较稳妥的做法是:
- 旁白用普通的开源TTS,做低音调处理。
- 每个NPC的台词单独生成,再在剪辑软件里做EQ和混响。
- 如果团队中有声音表现力强的成员,直接录音比任何TTS都好,不要为了用AI而用AI。
4.5 剪辑合成
最后用剪映或Pr把所有素材拼起来。剪映对字幕导入比较友好,可以先把TTS生成的文本转成字幕文件,再批量调整时间轴。这里推荐的做法是:先确定配音轨,再根据配音节奏摆放画面,而不是先摆画面再配音。
5. 角色立绘批量生成与一致性控制
做跑团预告PV时,最影响观感的是角色形象不一致。同一个PC,上一秒金色短发,下一秒变成棕色卷发,整个预告就毁了。所以立绘生成要分两步:先固定角色设定,再批量出不同动作和表情。
5.1 写角色提示词
提示词里要包含这几类信息:
- 角色外貌:发型、发色、眼睛颜色、服饰。
- 世界观基调:COC风格、旧日报纸、昏暗烛光、洛氏恐怖。
- 角色状态:严肃、紧张、恐惧、冷静。
- 画面控制:半身像、统一背景色、高质量插画。
下面是一个通用模板:
masterpiece, best quality, 1girl, golden short hair, blue eyes, suit, holding a letter, investigator, 1920s attire, dark room, candlelight, horror atmosphere, upper body portrait, looking at viewer, tense expression Negative prompt: lowres, bad anatomy, bad hands, extra fingers, watermark, text实际写提示词时,可以按角色卡替换描述。注意跑团PV不需要特别复杂的物理逻辑,重点是角色气质和氛围统一。
5.2 用API批量出图
在WebUI搭建好之后,可以不需要手动一张张点生成,直接调用API。以WebUI常见接口为例,批量脚本大致长这样:
python generate_characters.py --input characters.json --output ./outputs对应Python脚本的调用逻辑可以写成:
import json import requests # 提示:接口路径和参数以当前WebUI版本为准 api_url = "http://127.0.0.1:7860/sdapi/v1/txt2img" with open("characters.json", "r", encoding="utf-8") as f: characters = json.load(f) for char in characters: payload = { "prompt": char["prompt"], "negative_prompt": "lowres, bad anatomy, extra fingers, watermark", "width": 768, "height": 1024, "steps": 25, "batch_size": 4, "cfg_scale": 7 } resp = requests.post(api_url, json=payload, timeout=600) data = resp.json() for idx, img_b64 in enumerate(data["images"]): img_data = base64.b64decode(img_b64) filepath = f"{char['name']}_{idx}.png" with open(filepath, "wb") as f: f.write(img_data) print(f"已生成: {filepath}")注意:base64模块要先导入,时间超时要结合本机推理速度调整。批量出图时不要一次开太多任务,不然显存会直接打满。
5.3 保持角色一致性
常用的方法有两种。一是“参考底图+图生图”,把第一张最满意的角色图作为底图,后续用低重绘幅度生成不同表情。二是在ComfyUI里挂ControlNet或角色参考模型,通过参考图约束人物特征。这两种方案都需要自己跑一下才能找到合适的参数,没有固定的万能值。
5.4 素材目录管理
推荐这样规划目录:
pv_project/ ├── scripts/ # 批量生成脚本 ├── characters/ # 每个角色一个子目录 │ ├── alice/ │ ├── bob/ │ └── keeper/ ├── scenes/ # 场景背景和道具图 ├── audio/ │ ├── tts/ # 干音 │ └── bgm/ # 配乐 ├── video_clips/ # 图生视频小片段 └── output/ # 最终成片命名建议用“角色名_动作_序号”这种格式,避免最后剪辑时找不到素材。
6. 把立绘变成动态素材
预告PV全部用静态图会显得比较平。大多数人会选择让立绘在画面中有轻微浮动、眨眼、扭头、镜头推拉等效果。
6.1 生成动态素材的几种方式
| 方式 | 说明 | 适用情况 |
|---|---|---|
| 在线图生视频 | 上传立绘,输入动态描述,生成短视频片段 | 低门槛,适合快速出效果 |
| ComfyUI + AnimateDiff | 本地生成短动画,控制和自由度更高 | 有显卡和一定ComfyUI基础 |
| Live2D/手动骨骼动画 | 让立绘像游戏形象一样动态表现 | 需要较多手工调参 |
| 剪辑软件关键帧 | 对静态图做位移、缩放、模糊 | 最稳定,不消耗显存 |
对跑团PV来说,不需要每个角色都有一大段动态。建议只做三个部分:开场角色特写、谜之面具道具特写、结束时所有角色的快速剪影闪过。每段3到5秒就够了。
6.2 图生视频提示词模板
在线图生视频一般会要求输入一个动作描述,不要写太复杂,一个动作对应一段视频。参考方向:
a person slowly turning head, candlelight flickering, subtle smokea golden mask on a desk, light reflections, slow zoom in生成后先预览几遍,画面崩坏就直接删掉重来,不要硬留。本地模型生成视频时,分辨率、步数和帧数都会明显影响显存占用,先用小尺寸测试,再按实际效果放大。
6.3 画面节奏
预告PV节奏建议是“悬念引入 -> 角色出场 -> 冲突预告 -> 主题口号”。拿“奈亚的面具”举例:
- 开场:黑屏字幕,背景是打字机声音。出现“1925年,纽约”字样。
- 角色出场:每个调查员依次出现,每人一句性格介绍。
- 冲突预告:画面切到面具道具,旁白说“有些东西,不该被看见”。
- 结尾:快切所有角色,停在标题“奈亚的面具:序章”。
这段分镜不需要特别专业,但足够让观众了解团队风格。
7. 配音与音频处理
7.1 TTS文本准备
每个角色的台词建议单独存成文本文件,并按“角色名_集数_序号”命名。不要把所有台词挤在一个txt里,否则后面批量处理TTS时很难定位。
台词要写清楚停顿和语气。大多数TTS对逗号、句号、省略号比较敏感,可以预先把长句断开。比如:
夜色降临。黑暗里的低语,从未停止。 你收到了一封没有署名的邀请函。 ——那上面,印着一张金色的面具。7.2 多角色音色
开源TTS模型很多,比如ChatTTS、CosyVoice、GPT-SoVITS等。它们对音色控制、多音字和长文本的支持各有不同,具体用哪个要看项目文档。可以先给旁白和NPC各生成一段测试音频,听一下语气是否符合预期。
如果选音色克隆方案,必须满足两个前提:采样素材来自本团队成员或已获授权,并且只在本项目内使用。不要拿网上找到的配音博主素材来做克隆。
7.3 批量生成干音
假设你本地或云端有一个TTS服务,可以用脚本批量提交文本。注意:这不是某个特定项目的固定接口,只是通用示例,实际要以你部署的TTS服务文档为准。
import requests tts_url = "http://127.0.0.1:9880/tts" lines = [ ("keeper_01", "夜色降临,黑暗里的低语从未停止。"), ("alice_01", "我总觉得这封信来路不明。"), ("bob_01", "面具?又是面具。"), ] for name, text in lines: payload = {"text": text, "speaker": "keeper" if name.startswith("keeper") else "npc"} resp = requests.post(tts_url, json=payload, timeout=120) if resp.status_code == 200: with open(f"audio/tts/{name}.wav", "wb") as f: f.write(resp.content) print(f"完成: {name}") else: print(f"失败: {name}, {resp.status_code}")命令行下也可以用ffmpeg对生成的干音做响度统一、静音裁剪和格式转换:
ffmpeg -i input.wav -af "silenceremove=start_periods=1:start_threshold=-50dB, loudnorm=I=-16:LRA=11:TP=-1.5" -ar 44100 output.wav7.4 音频后期
TTS干音往往比较平。剪辑软件里可以给旁白加一点混响、压低背景音乐、提升人声频段。跑团PV的音频目标是“听得清楚、气氛吓人”,不需要搞太复杂。
8. 接口 API 与批量任务设计
这条流水线最大的工程价值,是可以把立绘生成、TTS、字幕导出都脚本化。哪怕这一版只做一条PV,也建议先搭一套半自动脚本,方便后续更新。
8.1 建立素材清单配置文件
把角色、台词、场景、输出路径集中到一个 JSON 文件里。这样做的好处是:渲染完发现某个角色立绘不好看,只需要改配置,不需要改代码。
{ "project": "masks_of_nyarlathotep", "characters": [ { "name": "alice", "prompt": "investigator woman, 1920s dress, golden hair, tense", "negative_prompt": "lowres, watermark", "images": 4 } ], "tts": { "url": "http://127.0.0.1:9880/tts", "speaker": "narrator" }, "output": "./output" }8.2 任务队列与失败重试
批量生成素材时,最常见的失败原因是显存不足和网络超时。建议在脚本里加入日志与重试机制:
import time def generate_with_retry(payload, max_retry=3): for attempt in range(max_retry): try: resp = requests.post(api_url, json=payload, timeout=600) if resp.status_code == 200: return resp.json() except Exception as e: print(f"第{attempt + 1}次失败: {e}") time.sleep(10) return None失败的任务可以统一写入fail.log,不要直接覆盖已生成的文件。对于一条PV来说,素材量不算大,但如果你是多视频系列,这套队列能省下大量盯工时间。
8.3 字幕导出
TTS文本本身就是字幕内容。如果TTS每句台词对应一个音频片段,就可以把台词文本按时间轴排列生成SRT字幕。手动在剪映里拖时间轴也可以,但长视频更建议用脚本先排好。
9. 资源占用与性能观察
本地跑这套流程时,需要重点观察三个时间段:立绘生成时、视频生成时、视频压制时。
9.1 显存占用
具体数字要结合模型和分辨率,没法给出一个固定值。但可以给出观察方法:
- 打开任务管理器或
nvidia-smi,查看GPU显存占用。 - 立绘生成时,如果分辨率从512x768提升到768x1024,显存占用可能翻倍。
- 视频生成阶段通常比单张图片高很多,建议先在低分辨率下测试。
- 如果出现“CUDA out of memory”,优先降低分辨率、降低批次、减少视频帧数。
使用nvidia-smi观察:
nvidia-smi -l 2这条命令每2秒刷新一次显存信息,可以看到进程占用情况。
9.2 CPU推理和GPU推理的差异
TTS和一些小模型用CPU推理是可以接受的,但立绘和视频生成用CPU会很慢。如果显卡不支持CUDA,又不想在线服务,那只能降低分辨率、减少步数,并做好“一张图等几分钟”的心理准备。更合理的策略是:图像和视频交给在线平台或远程GPU,TTS和字幕留在本地。
9.3 降低显存占用的几个技巧
- 关掉其他占用显存的程序。
- 图像模型打开
--medvram或--lowvram启动参数(以具体项目文档为准)。 - 降低batch size,一次生成1张而不是4张。
- 视频生成时缩短帧数,比如只用8到12帧。
- 把部分在线工具作为备用方案,本地不够就跑在线。
10. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| WebUI启动后网页打不开 | 端口被占用或启动失败 | 查看启动日志,检查7860端口 | 换端口,如--port 7861 |
| 批量出图过程中显存溢出 | 分辨率/批次过大 | 用nvidia-smi观察显存 | 降低分辨率或批次,使用低显存模式 |
| 角色立绘人物五官崩坏 | 提示词冲突或模型能力不足 | 查看负面提示词和采样步数 | 换大模型,减少负面词冲突,增加步数 |
| 同一角色特征不一致 | 没有角色参考图 | 检查每张图种子和参考图 | 用图生图或角色参考模型固定特征 |
| TTS生成音调呆板 | 文本缺少标点和语气词 | 检查台词文本断句 | 增加逗号、句号、问号,分短句生成 |
| 图生视频生成结果和原图差异大 | 运动幅度太大或重绘幅度过高 | 降低运动描述强度 | 改成轻微动作,或多生成几次筛选 |
| 视频压制后音画不同步 | 音频采样率或帧率设置不一致 | 查看成片帧率和音轨时长 | 统一为25fps,44100Hz |
| 发布时提示AI内容未标识 | 平台要求 | 查看平台AI内容声明规则 | 按规则在投稿页面标识AI生成内容 |
11. 最佳实践与发布检查
最后整理几条对跑团预告PV最实用的建议。
第一,发布前一定要把“模组原文和AI生成长文”分开。预告PV的台词不要直接大段引用《奈亚的面具》原文,而是在模组氛围基础上写原创口播稿。标题保留“奈亚的面具:序章”用于表明粉丝向创作,不影响原创内容判断。
第二,AI生成内容不要拿来直接冒充真人或官方创作。角色立绘如果用真人照片做底图,必须得到照片本人同意。配音如果用真人音色克隆,同样要授权,最好在视频简介里说明部分内容由AI生成。
第三,批量脚本要保留。做PV不是一次性的活,跑团系列可能会出第二集、第三集。把角色提示词、台词文本、素材目录全部整理好,下一期只需要替换文案和微调提示词,产出速度会快很多。
第四,每次发布前做一份效果复核清单:
- 角色名字是否和人物对得上。
- 字幕是否有错别字和敏感词。
- NPC台词语气是否符合人设。
- 音频里是否有爆音或环境噪音。
- 是否加了模组原作者和粉丝向声明。
- 是否按平台要求标记AI辅助生成内容。
- BGM和音效是否具备商用授权。
这条PV能做出来的本质,是把跑团过程中的角色魅力和团队氛围转成可传播的影像。工具只是辅助,真正让观众觉得“这团真有特色”的,还是剧本里那些只有你们团才有的名场面。下次再有人问“没有美术怎么做跑团PV”,直接把这篇流程丢过去,照着跑一遍就好。