ViMax 角色提取完整指南:让剧本人物在成片里始终"长同一张脸"
【免费下载链接】ViMax"ViMax: Agentic Video Generation (Director, Screenwriter, Producer, and Video Generator All-in-One)"项目地址: https://gitcode.com/GitHub_Trending/ai/ViMax
用 ViMax 把剧本变成视频时,最容易翻车的往往不是画面,而是人物。ViMax 角色提取(CharacterExtractor)负责在正式生图之前,先把剧本里每个人物整理成一份统一的外貌档案。后续每个镜头都参照这份设定,角色才不会"换脸"。
先说痛点 🎭:为什么"角色换脸"这么难解决
生成视频的工具,本质是逐个镜头出图。
同一场戏拆成多个镜头,模型每一帧都要重新画人。
问题就在这里:模型没有"记忆"。它不会记得上一帧 John 是短发,下一帧就可能画出长发。
换个说法,你写的是同一个角色,AI 却把它当成了几张不同的脸。
人多的剧本更糟。主角和配角长得太像,观众根本分不清谁是谁。
角色提取这一步到底在干什么
简单说,它是整条流水线里的"人事档案员"。
你把剧本交给它,它通读一遍,再把每个人物变成一张结构化的"档案卡"。
每张卡记四件事:怎么称呼这个人、在不在画面里、基本不变的静态特征、随时能换的动态特征。
这一步实现在 agents/character_extractor.py,位置很靠前,直接决定了后面所有画面的质量。
三条规则,决定它读剧本的水准
规则一:同一人只建一份档案
剧本里一个人常被叫很多名字:"John"、"那个高个男生"、"他"。
角色提取会识别出它们是同一个人,再挑最合适的名字当主标识。
遇到真实名人,它保留本名;角色没名字时,就用职业或特征代称,比如"咖啡师"。
规则二:没写全的,它替你合理补全
很多剧本对人物着墨不多,只写"一个中年男人"。
这时它会结合上下文,补上合理的五官、体型、穿搭,避免描述太空泛。
它还会刻意让不同角色长得不一样,降低"撞脸"概率。
注意:性格、人际关系这些它不碰,只写能真正画出来的视觉特征。
提取结果长什么样,存在哪
输出不是散乱的文字,而是固定结构,定义在 interfaces/character.py 的 CharacterInScene 里。
每个角色就是一个带字段的对象,核心字段有identifier_in_scene(称呼)、is_visible(是否出镜)、static_features(静态特征)、dynamic_features(动态特征)。
比如一个角色会是这样一段描述:叫 John,静态特征写"高挑运动型男生,短发",动态特征写"穿蓝色球衣"。
所有角色打包成一个列表,存到工作目录下的characters.json。下次跑同一条剧本,它直接读这个文件,不再重复调用模型。
上手指南:跑通你的第一次角色提取
第一步,把仓库克隆到本地:
git clone https://gitcode.com/GitHub_Trending/ai/ViMax第二步,打开configs/script2video.yaml,填上你的模型参数:
chat_model: init_args: model: google/gemini-2.5-flash-lite-preview-09-2025 model_provider: openai第三步,把main_script2video.py里的script换成你的剧本,然后运行它。
角色提取会自动触发,几秒后你就能在.working_dir/script2video目录里看到characters.json。
常见问题
能不能跳过提取、自己指定角色?
可以。流水线支持直接传入角色列表,就会跳过自动提取,改用你给的设定。
提取失败了怎么办?
它带了三重保险。最多自动重试三次。输出用容错解析器处理,模型多写个逗号也不会崩。结果还会落盘缓存。
收尾
想看到角色提取的真实效果,最省事的做法,是先用仓库自带的示例剧本跑一遍,再打开characters.json逐个核对人物档案。
发现哪个角色描述不到位,就回头补剧本细节。这一步的质量,直接决定后面每一帧画面里,人物是否"长得稳定"。🎬
【免费下载链接】ViMax"ViMax: Agentic Video Generation (Director, Screenwriter, Producer, and Video Generator All-in-One)"项目地址: https://gitcode.com/GitHub_Trending/ai/ViMax
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考