在实际做 AI 短剧样片时,真正卡住进度的往往不是模型会不会生成画面,而是同一张脸能不能在十几个分镜里保持不变,镜头拼起来后是不是还像同一条片子。MiniMax H3(海螺视频生成模型)在社区短剧实验中经常被当作核心生成引擎使用,配合参考模式、分镜模板和统一的后期拼接规则,可以把一个短剧样片从想法推进到可预览的长视频。这篇文章要记录的是一套以开源工具为主的短剧样片工作流:封面可以单独处理,其余从参考图准备、分镜拆分、提示词模板、逐镜头生成,到片段拼接、字幕合成,尽量在开源工具链里完成。

这里先明确一下,本文说的“工作流”是 AI 生成侧的流程,不是 Flowable、Activiti 里的任务编排。短剧制作的核心产出是画面序列,不是业务流程。你可以把 ComfyUI 当作工作台,把 MiniMax H3 的调用当作核心引擎,把参考图和提示词当作控制输入,最后用 FFmpeg 等工具完成合成。整个过程的核心目标是:让同一角色在多个镜头中保持身份一致,让每个镜头服从分镜规划,让最终成片具备可发布的基础质量。

1. 短剧样片制作,为什么人脸一致性和分镜控制排在最前面

1.1 短剧镜头与单条 AI 视频的本质区别

单条 AI 视频的生成逻辑很直接:输入一个主体,描述一个动作,生成一段画面,结束。它不需要考虑前后镜头之间的连续性,也不需要让同一个角色在不同场景里保持同样的长相。短剧不一样。

短剧哪怕只有一分钟,也会拆成若干镜头。一个角色可能先出现在室内,下一个镜头切到走廊,第三个镜头切回室内,第四次出现时可能换了角度和景别。观众判断“这还是不是同一个角色”,靠的就是人脸、发型、服装这些视觉特征。如果每个镜头都让模型自由发挥,结果通常是每个镜头都能看,连在一起却像换了一个人。

所以短剧样片的第一原则是:一致性优先于单镜头的惊艳程度。一个能锁住人脸的普通镜头,比一个虽然惊艳但和其他镜头接不上关系的高质量镜头更有用。

1.2 参考模式在短剧流程里解决什么问题

MiniMax H3 这类视频生成模型在社区里被用于短剧时,最常用的控制手段是参考模式,也就是 reference-to-video。它的作用是:给出角色参考图,让模型在生成新镜头时参考这张图里的人物外观。

参考模式解决的不是“复制一张脸”,而是“提取特征后重新驱动”。模型会把参考图里的人物身份、脸型、发色、服装这些信息作为条件,再按照提示词生成目标动作和场景。实际使用中,它的稳定性会受到参考图质量、提示词书写方式、模型版本等多方面影响,但它确实比完全无参考的文本生成更适合短剧分镜。

换句话说,没有参考模式,短剧就要靠“每镜头打一段很长的外貌描述”来硬撑一致性,效果很难稳定。有了参考模式,人物外观就从“靠文字想象”变成了“靠图片锁定”。

1.3 整套工作流的设计主线

结合社区里短剧向作品的常见做法,可以把流程拆成五段:

  1. 确定角色外观,准备一组高质量参考图。
  2. 把短剧脚本拆成分镜表,每个镜头明确角色、动作、景别、场景。
  3. 用提示词模板把分镜表翻译成模型输入。
  4. 逐镜头生成,并在生成后抽帧检查人脸一致性。
  5. 用 FFmpeg 等工具把合格片段拼接成长视频,统一画幅和色调。

这个顺序不能随意调换。如果跳过参考图准备,直接写提示词生成,后面所有镜头都会处于“散装”状态。如果跳过提示词模板,每个镜头都临时写,很容易漏掉关键信息,后续也难批量复用。

1.4 封面为什么要单独处理

标题里说“除封面全部由开源实现”,是因为封面通常要做单独的视觉设计、标题排版和信息提炼。它更多是平面设计工作,和视频生成链路不是一回事。封面可以用图像编辑工具单独出图,或者用开源图像生成模型配合排版完成。等视频链路稳定后,再把封面放到最后补齐,不影响主流程验证。

2. 环境准备:开源工具链怎么搭,MiniMax H3 怎么接入

2.1 整体工具链选型

短剧样片工作流并不需要复杂的系统,核心是几类开源工具的组合。下面的表格给出每个环节的工具和用途:

环节 工具 作用
节点式编排 ComfyUI 把参考图加载、模型调用、参数传递串成可视化流程
视频生成 MiniMax H3 负责生成每个分镜的短视频片段
参考图处理 Python + Pillow/OpenCV 裁剪、缩放、统一分辨率,去除多余背景
分镜提示词管理 JSON / Markdown 分镜表 统一记录和复用分镜参数
片段拼接 FFmpeg 统一编码参数,拼接长视频
字幕识别 faster-whisper / Whisper 给对白生成字幕文件
字幕烧录 FFmpeg 把 SRT 字幕写入视频画面

这套组合里,ComfyUI 负责图形化编排,FFmpeg 负责后期合成,参考图预处理的脚本可以写成 Python 工具。只要模型接入方式确定,这套链路在本地和云 GPU 环境都能跑。

2.2 MiniMax H3 的接入方式

MiniMax H3 的使用方式有几种选择,具体以当前模型发布信息和授权协议为准。常规可以关注三种:

接入方式 优点 风险或限制
官方平台 API 接入简单,模型版本由平台维护 依赖网络,可能有调用费用
本地部署 不依赖外部服务,适合批量实验 对显存和部署经验有要求,授权需确认
ComfyUI 节点集成 方便融入分镜流程,可视化调参 节点版本与模型版本需要匹配

社区里确实有关于本地部署、整合包、甚至 8GB 显存运行的讨论,也有人关心 AMD CPU 环境能否运行。这类分享通常基于特定环境,变化很快,落地前一定要自己实测。不要直接下载来历不明的整合包用于正式项目,既可能缺少依赖,也可能踩到模型授权问题。

一个更稳妥的做法是:先跑通官方或对应仓库提供的安装方式,确认模型能正常出片,再考虑是否做成 ComfyUI 节点流程。如果连单条视频都不会调用,直接上整合包只会让后续排查变得更加困难。

2.3 依赖安装注意事项

在 ComfyUI 里接入某个 MiniMax H3 节点时,通常会经历依赖安装步骤。下面是一段通用示例:

# 进入 ComfyUI 根目录后,先安装基础依赖
pip install -r requirements.txt

# 安装自定义节点依赖(按节点作者说明执行)
pip install -r custom_nodes/xxx_minimax_node/requirements.txt

这段命令的问题是:ComfyUI 的依赖版本经常变化,节点依赖和 ComfyUI 本身依赖可能冲突。报错“请安装缺失的包”时,不要直接装最新版,先看报错信息里要求的版本范围,再决定安装哪个版本。

关键检查点有三个:

  1. Python 版本是否在 ComfyUI 支持范围内。
  2. PyTorch 版本与显卡驱动是否匹配。
  3. 自定义节点目录里是否有对应的 Python 文件,ComfyUI 是否成功加载了节点。

建议在环境刚搭好时,先记录一份版本清单:Python 版本、ComfyUI 版本、节点版本、显卡驱动版本。后面排错会省很多时间。

2.4 环境验证:先跑一条短测试片

正式做分镜前,先做一次最小验证。目标是确认参考模式能正常工作,而不是一上来就生成几十个镜头。

python scripts/generate_preview.py \
  --reference refs/character.jpg \
  --prompt "角色站在房间中央,转头看向镜头,中景,固定镜头"

这段命令只是示意,实际脚本要按你选择的接入方式调整。验证时关注三个结果:

  1. 是否成功输出视频文件。
  2. 输出画面里的人物长相是否与参考图基本一致。
  3. 提示词中的动作是否真的出现。

如果这三项都正常,再进入分镜批量生成。如果连最小验证都通不过,不要继续扩大生成范围,先解决单镜头问题。

3. 分镜设计与参考模式:让同一张脸贯穿全片

3.1 参考模式不是复制粘贴,而是特征条件

社区里流传的 ref2va、全能参考模式,本质上都是 reference-to-video 的变体。你需要理解的是:参考图不是绿幕,不是抠图模板,模型不会把参考图原样贴到新镜头里。它更接近一种条件控制:模型从参考图里提取人物身份、发型、服装等特征,再根据提示词生成新的动作和场景。

所以使用参考模式时要有一个预期:参考图决定“他是谁”,提示词决定“他在哪里、在干什么”。两者的配合越紧密,出片越稳定。只给参考图、不写人物描述,往往会导致动作无法准确生成;只写人物描述、不给参考图,则会出现身份漂移。

3.2 参考图的选图标准

参考图质量直接决定参考模式的上限。选图时按下面几个维度检查:

维度 推荐要求 原因
脸部朝向 正脸或接近正脸 特征提取最完整,侧脸容易丢失信息
表情 中性表情 避免表情干扰后续角色表演
光线 均匀光,无强阴影 阴影会被当成特征带进新镜头
服装 符合角色设定,简单清楚 服装会直接影响生成结果
分辨率 不低于 1024×1024,裁剪后仍清晰 低清图会导致脸部和细节崩溃
画面杂质 无水印、无字幕、无多余人脸 杂质容易混进生成画面

一个常见错误是直接拿剧照或含有浓烈表情的图片作为参考图。结果生成出来的每一个镜头,角色都带着同一副表情,动作描写被表情盖住。建议准备一张“角色基础形象图”,用于全片一致性,再单独准备表情参考图给特写镜头。

3.3 分镜表:把脚本翻译成可执行清单

分镜表是连接剧本和模型的中间层。它不需要写得很文学,但必须把每个镜头的关键信息列全。下面是一个简化示例:

镜头号 景别 运镜 角色 场景 动作描述 参考图 生成状态
S01 中景 固定 男主 办公室 男主推开椅子站起来 refs/hero.jpg 待生成
S02 近景 缓慢推近 男主 办公室 男主看向窗外,眼神紧张 refs/hero.jpg 待生成
S03 全景 横移 女主 走廊 女主从走廊尽头走过来 refs/girl.jpg 待生成

分镜表里的动作描述要具体到“身体做什么、表情是什么、站位在哪个方向”。不要写“男主很生气”,要写“男主眉头紧锁,双手撑在桌上,身体前倾”。模型对动作动词的理解比对情绪名词的理解更直接。

3.4 每个镜头生成后的检查点

生成一个镜头后,不要只看视频整体,要抽帧检查人脸。推荐做法是:把生成的视频导出首帧、中帧、尾帧各一张,和参考图放在一起对比。

检查点包括:

  1. 脸型是否一致,有没有宽的变窄、圆的变尖。
  2. 发色和发型是否稳定,刘海方向有没有变化。
  3. 眼神是否正常,有没有出现瞳孔错位或面部扭曲。
  4. 服装颜色和大概款式是否和参考图一致。

如果人脸不合格,不要直接跳到下一个镜头。先判断问题出在哪:参考图不够清晰,提示词里写入了太多与人物无关的信息,还是模型本身的偶发失败。偶发失败可以直接重试,稳定的漂移则要回到参考图和提示词层面解决。

4. 提示词模板:把导演语言翻译成模型参数

4.1 为什么短剧必须用提示词模板

短剧往往有几十个镜头。如果每个镜头都临场写提示词,很容易出现两个问题:一是信息缺失,比如忘了写景别,模型自动给一个奇怪构图;二是风格漂移,镜头之间光照、景别、描述语言不一致。

提示词模板的作用是把“导演意图”固定成结构化的生成参数。每个镜头只替换模板里的变量,不变的部分(画幅、风格、人物基础描述)保持一致。这样既能提升生成稳定性,也能在镜头数量多时做批量管理。

4.2 一个可以落地的提示词结构

推荐把提示词按字段组织,然后用脚本拼成最终输入。示例 JSON 如下:

{
  "character": {
    "name": "男主",
    "gender": "male",
    "age": "young adult",
    "hair": "black short hair",
    "clothing": "dark gray suit",
    "expression": "serious"
  },
  "shot_type": "medium shot",
  "camera_movement": "fixed",
  "action": "push the chair away and stand up",
  "scene": "modern office, desk, window, daylight",
  "lighting": "soft natural light",
  "style": "realistic film style, cinematic color grading",
  "aspect_ratio": "16:9",
  "negative_prompt": "deformed face, distorted body, extra fingers, blurry, watermark, flickering"
}

字段含义:

字段 作用 注意事项
character 人物身份和外观锁 每次生成尽量保持一致
shot_type 景别 中景、近景、特写、全景不可缺失
camera_movement 运镜方式 固定镜头最容易稳定,运镜镜头要多重试
action 动作描述 放在句子主干,不要用复杂从句
scene 场景描述 越具体越稳定
lighting 光照 全片统一定一个基础光照,减少拼接跳变
style 风格 现实主义、电影感等,按短剧调性固定
negative_prompt 负面提示词 防止常见生成缺陷

实际使用中,如果模型支持中文提示词,就把字段翻译成中文。如果模型更支持英文,就用英文模板。关键是字段结构要固定,而不是每次都换一套表达方式。

4.3 角色一致性提示词模板

把上面的 JSON 拍平成一段提示词时,可以按这个顺序写:

[角色名],[年龄性别],[发型],[服饰],[表情状态]。
景别:[全景/中景/近景/特写]。
镜头:[固定/推近/拉远/环绕/横移]。
动作:[具体动作描述,使用动词开头]。
场景:[场景名+关键元素]。
光照:[自然光/黄昏/室内光]。
氛围:[紧张/悲伤/明朗/爽快]。
画幅:[16:9 或 9:16]。

示例:

男主,年轻男性,黑色短发,深灰色西装,表情严肃。
景别:中景。
镜头:固定。
动作:推开椅子站起来,转身看向窗外。
场景:现代办公室,办公桌,窗户,白天。
光照:柔和自然光。
氛围:紧张。
画幅:16:9。

这个模板的应用要点是:角色描述部分在全片固定,不要每镜都改。如果有人物设计发生变化,比如换装,先在参考图层面准备对应新形象,再在模板里改 clothing 字段。

4.4 战斗与高能镜头提示词模板

短剧里经常出现动作场面。动作戏提示词容易犯的错误是只写“打斗”,没有给模型提供可执行的动作逻辑。建议把动作拆成“起手-发生-结果”三段。

示例:

男主,年轻男性,黑色短发,深色运动外套。
景别:全景。
镜头:快速横移跟随。
动作:男主侧身闪避,挥拳击向对手,尘土扬起,衣摆飘动。
场景:废弃仓库,昏暗灯光,地面有灰尘。
光照:顶光+局部阴影。
氛围:激烈。
画幅:16:9。

动作戏镜头里,人物不要写太多表情细节,因为运动状态下,脸部特征本来就会模糊。更值得投入的是动作路径和镜头跟随方式。多试几次,选择动作连贯性最好的一条。

4.5 负面提示词的使用边界

负面提示词可以过滤掉一部分明显错误,但不是越长越好。常见负面描述如下:

deformed face, distorted body, extra fingers, missing fingers, blurry, low quality, watermark, text, flickering, color shift

注意两点:

  1. 负面提示词不要和正面提示词冲突。比如正面写了“电影感”,负面就不要写“电影感太强”这种模糊描述。
  2. 不同模型对负面提示词的敏感度不同。如果当前模型对负面提示词不敏感,硬写一堆反而浪费 token。

建议先跑三条测试,确定当前模型对负面提示词的响应方式,再正式使用。

5. 长时长视频制作:从单镜头到整条成片

5.1 短剧的“长”来自拼接,而不是一次性生成

MiniMax H3 单次生成时长有限,而且越长的视频,画面稳定性越难控制。短剧样片里的“长时长视频”,实际是多个分镜片段拼接的结果。这个思路决定了整个后期流程:先把每个分镜生成到可接受状态,再做统一拼接,而不是试图让模型一次输出几分钟的完整剧情。

拼接思路还有一个好处:单个镜头失败时,只需要重生成那一个镜头,不用动其他部分。

5.2 统一视频参数是拼接前必须先做的事

镜头之间的分辨率、帧率、编码格式不一致,是拼接后出现画质下降和跳变的常见原因。生成每个镜头后,用 ffprobe 查看参数:

ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height,r_frame_rate,duration \
  -of json output.mp4

把结果记录到一个参数表里:

镜头 宽 高 帧率 时长 编码
S01 1920 1080 30 5.2s h264
S02 1920 1080 30 6.1s h264

如果某些镜头参数不一致,先统一再拼接。最省事的办法是生成阶段就固定参数,不要生成后再转码。

5.3 用 FFmpeg 拼接片段

当所有片段参数一致时,可以使用 concat 直接拼接:

# 创建一个 list.txt,每行写一个文件路径
# file 'output/S01.mp4'
# file 'output/S02.mp4'

ffmpeg -f concat -safe 0 -i list.txt -c copy merged.mp4

-c copy 会直接复制流,不重新编码,速度很快。但前提是所有片段编码参数一致。如果参数不一致,直接 copy 拼接会出现花屏或音画不同步,必须重新编码:

ffmpeg -i S01.mp4 -i S02.mp4 -i S03.mp4 \
  -filter_complex "[0:v][1:v][2:v]concat=n=3:v=1[a]" \
  -map "[a]" -crf 18 -preset medium merged.mp4

重新编码会更耗时,但可以通过 -crf 控制质量。 crf 18 是视觉接近无损的常见选择, preset medium 是时间与画质的平衡值。

5.4 调色统一

短剧不同镜头的光照关键词写得不一致,生成的素材会有明显色差。最直接的补救办法是全局调色。FFmpeg 可以用滤镜做基础调整:

ffmpeg -i merged.mp4 -vf "eq=brightness=0.02:saturation=1.1" -crf 18 color_adjusted.mp4

这个命令里的 eq 滤镜调整亮度和饱和度。实际值要根据素材情况调试,没有万能参数。如果追求更高精度的调色,可以导入剪辑软件逐镜头匹配,但样片阶段先用 FFmpeg 统一整体风格就够了。

5.5 字幕与对白合成

短剧通常有对白。开源方案里,可以用 Whisper 对包含对白的音频做识别,生成 SRT 字幕文件:

whisper merged.mp4 --language zh --model medium -f srt

faster-whisper 速度更快,可以作为替代。字幕生成后,用 FFmpeg 烧录进视频:

ffmpeg -i merged.mp4 -vf "subtitles=sub.srt" -crf 18 output_final.mp4

中文字幕要注意字体问题。默认字幕滤镜可能缺少中文字体,导致中文无法显示。必要时需要指定字体文件:

ffmpeg -i merged.mp4 -vf "subtitles=sub.srt:force_style='FontName=Noto Sans CJK SC'" -crf 18 output_final.mp4

BGM 同样可以用 FFmpeg 混流,把音频文件叠加到视频轨道上。整体来说,字幕、BGM、对白合成都是后期环节,不会反向影响画面一致性,可以在成片阶段集中处理。

6. 高频问题排查:从报错到结果异常

6.1 常见问题速查表

问题现象 常见原因 检查方式 处理建议
人脸依然漂移 参考图特征弱,或提示词里人物信息被稀释 对比首帧、中帧、尾帧与参考图 换更清晰的参考图,强化人物描述,减少场景词占位
提示词里的动作没出现 动作动词放在从句里,或画面里有多个主体 检查提示词语法,确认动作是主干 把动作提前,写成“谁+做了什么+在哪”
生成时爆显存 分辨率、帧数、参考图尺寸过大 查看运行时的显存占用日志 降低单镜头分辨率或时长,分段生成
节点报错缺包 依赖版本不完整或冲突 看控制台报错提到的包名和版本 按报错安装对应版本,优先使用节点作者指定的版本
片段拼接处跳变 光照、色调、角色位置不连续 在剪辑时间线上逐帧查看切换点 固定每镜提示词里的光照关键词,统一风格描述
生成结果偶尔崩坏 模型随机性偏高 同一提示词多跑几次观察稳定性 记录种子或随机数,多批次选择稳定结果

6.2 参考模式失效时,优先排查参考图

很多“参考模式没有用”的反馈,最终都指向参考图质量。比如参考图只有半张脸,模型提取不到完整身份信息;参考图带水印,模型把水印当成画面元素;参考图人物表情夸张,导致动作镜头表情完全锁死。

排查顺序是:先换参考图,再改提示词。不建议同时改两个变量,否则很难定位问题。

6.3 网络与接口调用问题

如果选择 API 方式接入,请求失败时先看返回状态码。常见的请求超时、限流、参数错误,日志里通常有明确提示。检查方向包括:

  1. 请求参数是否符合模型版本要求。
  2. 是否有超时阈值设置。
  3. 调用频次是否触发平台限制。

这类问题属于接入层问题,和画面质量无关,处理起来比较直接:按错误信息调整参数或增加重试机制即可。

6.4 模型版本差异导致的提示词行为不一致

不同版本的生成模型对提示词的理解方式可能不同。同一套模板在旧版本上能稳定出片,换到新版本后可能风格、比例、运镜都变了。所以发布样片前,要记录模型版本号。版本升级后,不要直接用旧模板批量跑生产,先做一轮 5-10 条测试片,确认模板的兼容性。

7. 最佳实践与后续优化方向

7.1 发布前检查清单

样片接近完成时,按下面的清单过一遍:

  1. 分镜脚本是否覆盖了所有剧情,有没有缺镜头。
  2. 每个镜头的参考图是否确认,是不是同一个角色形象。
  3. 提示词模板是否按字段填写,景别、运镜、光照是否完整。
  4. 所有镜头是否统一分辨率、帧率、编码。
  5. 抽帧对比人脸一致性,重点镜头是否通过验收。
  6. 拼接后的样片是否存在明显跳变。
  7. 字幕、对白、BGM 是否已合成。
  8. 模型版本、节点版本、关键参数是否已记录。
  9. 模型授权和使用场景是否确认,是否允许样片对外发布。
  10. 源文件、分镜表、提示词模板、素材是否归档备份。

这套清单适用于第一轮样片,也适用于后续每一次版本迭代。把清单固定在项目文档里,可以避免发布前反复修改同一类问题。

7.2 学习环境与生产环境的差异

学习环境里跑通一个镜头,和生产环境做完整样片,是两套不同的关注点。

学习环境关注的是:模型能不能生成、提示词写什么、参考图怎么选。这时候不需要自动化,也不需要复杂的目录结构。把所有东西放在一个项目目录里,手动记录参数即可。

到了生产环境,需要额外补充:

  • 批量生成队列,避免人工一个镜头一个镜头点击。
  • 命名字段严格统一,比如 S01_hero_medium_fixed 。
  • 生成日志和参数快照,出现问题能回溯。
  • 成本统计和失败重试策略。
  • 素材的版本管理,防止覆盖。

不要把学习环境的临时做法直接搬到生产。样片阶段手工操作可以接受,量产时每一项手工操作都会变成时间黑洞。

7.3 后续可以优化的几个方向

第一个方向是批量脚本化。把分镜表和提示词模板做成 JSON,用 Python 读取后循环调用生成接口,自动保存每条结果。这样可以支撑几十甚至上百个镜头的批量实验。

第二个方向是自动化质检。短剧的分镜越多,人工检查成本越高。可以用简单的人脸特征对比脚本,对生成结果抽帧并与参考图做相似度打分,把明显不合格的镜头筛选出来。这里要注意合规使用人脸相关技术,仅用于自己的正版素材,不要引入非法数据源。

第三个方向是把拼接和字幕流程写成脚本。每次分镜表更新后,自动把已合格的镜头拼接起来,重新生成字幕和预览视频。这套流程在样片后期非常有用,能显著减少重复劳动。

第四个方向是关注模型版本迭代。MiniMax H3 这类模型更新后,参考模式的一致性表现、单镜头时长上限、提示词理解能力都有可能变化。迭代后建议先做一轮基准测试,用同一组参考图和提示词对比新旧版本的差异,再决定是否切换生产流程。

短剧样片制作最重要的技术判断是:不要让模型去“记”角色,而是让工作流替模型“记住”角色。参考图锁定身份,提示词模板锁定表演,分镜表锁定叙事,FFmpeg 锁定整体成片。这套思路不依赖某一次生成中不切实际的运气,也不依赖某个整合包里的隐藏黑科技。把每一个环节的控制权拿回自己手里,样片质量才是可稳定复现的。

Logo

火山引擎视频云技术社区,是面向 AI 音视频开发者的技术交流平台。这里汇聚源自抖音、豆包等亿级 DAU 产品的 RTC、直播、点播、AI 媒体处理、音视频互动技术,提供接入指南、最佳实践、性能调优、场景案例、Demo 代码、开源项目、白皮书和 API 文档。社区汇聚官方工程师与一线开发者,为 AI 视频通话、数字人、AI 视频处理等应用的开发与落地提供技术支持。

更多推荐