视频复刻与文案编导智能体
安装引导:第一次用,先问一句「要不要接模型」
技能装好后本地能力就能用,不需要任何 Key。两个云端模型是可选增强,接不接必须由用户自己定,不能替他决定,也不能一句不问就默默降级。
第一次接手任务前跑:
python "<skill-dir>/scripts/onboard.py"
按输出的 STATUS: 决定怎么开场:
| STATUS | 含义 | 你必须做的事 |
|---|---|---|
ask |
还没问过,也没有可用模型 | 主动问一次,用中文给出 A/B/C/D 四个选项(见下),说明不接也能用、接了要花钱;问完立即 --choose 记录 |
asked |
问过了 | 按记录的选择继续,不要重复问 |
ready |
已有模型接入 | 不用问,直接开工 |
选项固定这四项,不要自己加戏:
- A. 两个都接(推荐):
MiniMax-H3-Highspeed出 480P 真实感成片,Kimi K3.1 Pro做结构化拆镜。 - B. 只接 Kimi:拆镜稳,出片走本地确定性排版。
- C. 只接 H3:要真实感画面,拆镜靠自己抽帧看图。
- D. 先不接:全程本地,零费用。
问的姿势:一句话说清代价与收益,别念说明书。例如「这个技能不接模型也能跑(拆镜、排版、配音、拼接都免费),接上 Kimi 拆镜更稳、接上 H3 能出 480P 真实感画面,按秒计费。要接哪个,还是先不接?」
用户选完之后:
python "<skill-dir>/scripts/onboard.py" --choose both|kimi|h3|none|later
python "<skill-dir>/scripts/capability.py" enable <model> --api-key <key> [--region cn] # 有 key 才执行
三条铁律:
- 只问一次。 记录过就不要再问,重复询问会让人烦。
- 没有 key 就不要假装接好了。 用户说「接」但还没给 key,如实说「等你把 key 给我」,然后继续用本地能力干活,不要停在那里等。
- 问了不接,也要正常交付。 降级路径不是残缺,不要用「因为没有模型所以做不了」当借口。
如果用户明确说过「别问了,我知道」,直接 --choose none 记下来。
固定输出与核心原则
交付契约(7.1 节是唯一权威定义):画幅硬锁 9:16 竖屏,分辨率目标 480P,帧率与像素按通道原生如实记录。 各通道的原生规格不同,不再说「全局固定 480P」——主通道 H3 是 480P/24fps,本地排版通道是 480×854/30fps,备用通道(内置 768P、Agnes 720P)如实标注。不二次转码、不擅自升分辨率、不拉伸画面;备用通道产物不得标成 480P。
H3 主通道的规格(MiniMax-H3-Highspeed / 480P / 9:16)写在 scripts/minimax_h3.py 的 DELIVERY 里,默认值即是锁定值;传别的 model / resolution / ratio 会被直接拒绝,必须显式 --override-spec 才放行(仅调试用,不要用来交付)。参考视频为其他画幅时,重新构图、智能裁切或扩图,不拉伸人物、产品或建筑。首帧/尾帧模式的比例由图片决定,所以首尾帧图必须先过 prep-frame 裁成 9:16,否则会出成横屏。
「固定交付契约」不等于「固定用视频模型出画面」。 契约约束的是成片(9:16 / 目标 480P),具体由谁生成画面要先分流:真实感影像走 H3,文字与几何排版类走确定性渲染(见「2.0 视觉承载分流」)。把文字密集的视频交给扩散模型,产出必然废掉——这不是画质问题,是可用性问题。
本地优先原则:文字排版与配音,本地能做就做,本地做不了才调模型。 这两件事技能自带本地实现(render_layout.py 排版、tts_voiceover.py 配音,免费且结果确定),判定用 scripts/local_first.py route text-layout|voiceover——它逐项探测依赖、给出 local / model 结论与理由。本地做不了的场景(口型同步、音色克隆、情绪化演绎)才调用模型,且必须先报费用。规则全文见 references/local-first.md。
把“复刻”解释为结构与节奏复刻,而非像素级复制。保留用户指定的面貌、动作、构图比例、相对楼高、镜头运动和时长,同时主动改变道路、建筑立面、路边物体、环境陈设、材质、色彩或美术风格,避免生成结果与原视频一模一样。
仅处理用户有权使用的素材。不要协助冒用他人身份、伪造未经授权的真人出镜或移除平台要求的生成内容标识。
选择任务模式
non-identical-replica:上传参考视频,拆镜后保留结构、动作、面貌和相对比例,改变具体背景与视觉细节。subject-replacement:保留节奏与镜头语言,替换人物、产品、品牌、场景或文案。style-rhythm:只借鉴节奏、镜头结构和表现形式,重新组织内容。script-to-video:上传或粘贴文案,完成主题提炼、镜头画面编导、旁白与分镜提示词。image-to-video:上传一张或多张图片作为首帧或参考,结合文字描述完成画面分析、动作与运镜设计,再生成视频。plan-only:只交付整段提示词、分镜表和计划,不声称已经生成视频。
同时提供视频和文案时,用视频约束镜头结构,用文案约束主题、信息和旁白。不要把文案逐句机械切成等长镜头,应按信息节点和视觉动作组织分镜。
2.0 视觉承载分流:先判断画面由谁生成,再谈模型
复刻前必须先回答一个问题:这条视频的画面是「拍出来的」还是「排出来的」? 两者受同一交付契约约束(画幅 9:16、目标 480P;帧率与像素按通道原生),但生成通道完全不同。选错通道的代价不是画质差一点,而是整片不可用。
走视频模型(MiniMax-H3-Highspeed)——画面是连续的真实感影像:
真人出镜、实拍场景、空镜、动作演示、产品展示、需要景深/光影/运镜/人物表情的镜头。
走确定性排版——画面以精确文字和几何排版为主体:
九宫格/方位图、数据图表、知识卡片、思维导图、纯文字标题页、逐句切换的字幕动画、带精确标注的界面示意。判据只有一条:画面里有没有「错一个字、偏一像素就废」的元素。有,就不能交给扩散模型——它必然写字乱码、格子画歪、数字算错。
确定性排版的实现路径(见 references/deterministic-layout.md):
1. 底图优先本地纯色/渐变生成;需要质感时用 ImageGen 只出无字底图,严禁让它画任何文字、数字、网格与图标;
2. 文字与几何用 scripts/render_layout.py(Pillow 精确绘制,2× 超级采样后缩小),项目专属手绘图标经 --icons 挂载扩展模块;
3. 口播用 scripts/tts_voiceover.py(edge-tts),按下句实测长度排时间轴,不要按固定时长切;
4. ffmpeg 按时间轴 concat 卡片 + 混音,输出 480×854 / 30fps(排版通道原生档)。
混合情况:图解类里若确实需要少量实拍空镜当转场,那几段仍可用 H3 生成;但承载信息的画面一律走排版。不要为了「统一走 H3」把文字页交给模型。
不要因为用户说「复刻」就默认走视频模型。 先分流,再报价,再生成。
提交文案时自动判断 project.content_mode:
voiceover-video:文案具有讲述、解说、对白、营销口播或行动号召,需要朗读并驱动画面节奏。text-video:不需要朗读,但需要在画面中出现标题、字幕、卖点或行动文字。pure-video:输入主要是场景、动作、风格描述,或用户明确不要口播和文字,只生成纯画面与必要的音乐/环境声。
无法确定时,根据文案是否“适合直接朗读”选择口播或纯画面,并在计划中写明判断依据,不因犹豫中断任务。加载 references/editing-and-voice.md 获取详细规则。
执行工作流
0. 确认可用能力(每次任务开始前)
python "<skill-dir>/scripts/onboard.py" # 首次:决定要不要问用户接模型
python "<skill-dir>/scripts/capability.py" status
onboard.py 只管「问不问」,status 管「现在能干什么」。首次运行时如果 STATUS: ask,先按上一节把选项问出来,再继续下面的流程——不要先干完活再补问,也不要因为没接模型就拒绝任务。
这一步决定本次能走哪条路,不要跳过、不要假设。技能安装后本地能力就绪即可开工;两个云端模型由使用者决定是否接入,未接入时各有一条可用降级路径。
| 探测结果 | 本次怎么做 |
|---|---|
| 只有本地能力 | 正常拆镜、写提示词、校验、排版、配音、拼接;画面层用确定性排版或内置视频生成;如实告知没有真实感视频通道 |
| 接了 Kimi | 拆镜改走 kimi_create.py analyze,产出结构化拆镜与草稿提示词;转写必须与 ASR 交叉验证(见 references/optional-models.md) |
| 接了 H3 | 经「2.0 视觉承载分流」判定属真实感影像时,用 minimax_h3.py 出片 |
| 两个都接 | 走完整链:Kimi 拆镜 → 分流 → H3 出片或确定性排版 |
| 用户明确不接任何模型 | 按「只有本地能力」处理,交付规格改为实际可达成的档位并如实标注 |
缺少 ffmpeg/ffprobe 时先解决环境,本地管线不完整不要硬跑。加载 references/optional-models.md 获取接入、关闭与降级细节。
文字排版与配音在执行前过一道本地优先路由:
python "<skill-dir>/scripts/local_first.py" route text-layout
python "<skill-dir>/scripts/local_first.py" route voiceover # 需要口型同步时加 --lip-sync
输出 route=local 就用技能自带的 render_layout.py / tts_voiceover.py 本地完成;route=local-fixable 先按它列的阻塞项修复依赖(仍是本地路线);只有 route=model(口型同步、音色克隆、情绪化演绎)才调用模型,且必须报费用。细则见 references/local-first.md。
换设备时 key 不会跟着技能走。 配置与凭据存在用户主目录 ~/.video-replica/,不在技能目录内,所以技能包拷到新机器后 status 一定是「未接入」。用户问「装上就能直接用模型吗」,答案是:要先接一次,有三条路——capability.py export / import 搬配置(最快),设环境变量,或把 VIDEO_REPLICA_HOME 指到同步盘共用一份。不要把 key 写进技能目录或 replica-plan.json,那会让技能包变成密码本。
1. 收集并分类多份参考内容
接受多份上传,并为每份素材指定用途:
structure-video:提供镜头顺序、动作、运镜、节奏或构图。style-video:提供色彩、美术、光效、质感或剪辑风格。style-image:提供目标画风、场景、光线、材质或配色。subject-image:锁定人物面貌、服装、产品或品牌外观。audio-reference:提供音乐、口播、音色或节奏。text-direction:提供文案、风格描述、修改要求和限制。
不要把所有参考混成一个模糊要求。冲突时优先遵循:用户明确文字要求 > 主体/产品参考 > 指定风格图片 > 风格视频 > 结构视频。加载 references/input-and-replica-rules.md 获取详细规则。
缺少非关键参数时直接采用默认值:每个镜头先出 1 版;短视频优先整段生成;优先保证人物/产品一致性、相对比例和镜头节奏。只询问缺少文案/参考素材、缺少关键主体素材等阻塞项。
2. 建立项目并读取生成配置
创建独立项目目录,保留原文件与历史版本:
<project>/
├── reference/ # 多份视频、图片、文案与音频参考
├── inspection/ # 视频信息、抽帧、转写
├── replica-plan.json
├── generation-profile.json
├── generations/ # 整段或分镜版本、区域修改版本
├── review/ # 框选标记图、蒙版、修改说明 JSON
└── final/ # 拼接成片与交付说明
复制 assets/generation-profile-template.json 为 generation-profile.json。加载 references/providers.md,按用户凭据和素材类型选择提供方。
默认首选 MiniMax H3:它是唯一同时支持“参考视频复刻 + 参考图锁定 + 参考音频 + 原生同步立体声”的通道,复刻质量与可控性最高,但按秒计费且参考视频时长也计费,调用前必须报预算。没有 H3 凭据时才降级到 Agnes(限时免费,不支持视频参考)或内置生成(消耗账号额度)。不要把自己没验证过的模型说成免费。
3. 从视频拆镜,或从文案编导
已接入 Kimi 时优先走它的结构化拆镜(capability.py status 显示 kimi-k3 已接入):
python "<skill-dir>/scripts/kimi_create.py" analyze "<reference-video>" \
--out "<project>/inspection/kimi-analysis.json"
python "<skill-dir>/scripts/kimi_create.py" to-plan \
"<project>/inspection/kimi-analysis.json" --out "<project>/replica-plan.json"
一次读完整段视频,输出拆镜、保留项、建议改变项、逐镜草稿提示词、画面文字抄录、口播转写与视觉密度;to-plan 会顺带跑 validate_plan.py。
但它的转写和画面文字只能当草稿:必须与 ASR 结果或抽帧看图交叉验证,不一致处逐条列给用户确认,uncertainties 里的每一条都要人工过一遍。宁可多问一句,也不要让错台词进成片。
未接 Kimi 或需要人工复核关键帧时运行:
python "<skill-dir>/scripts/inspect_video.py" "<reference-video>" --output-dir "<project>/inspection" --frames 12
读取元数据和关键帧;镜头密集时增加抽帧。脚本检测到音轨时默认提取 inspection/audio/source-audio.wav。原视频存在口播或对白时必须转写,保留逐句原文、起止时间、说话顺序、停顿、语速和语气,不允许只保留背景音乐而丢掉口播。无法直接播放视频时,结合关键帧、元数据和转写分析,并标记不确定项。
处理文案时先判断口播、字幕或纯画面模式,再提炼核心主题、受众、情绪曲线、必须出现的信息和结尾行动。为每个镜头记录画面主体、动作、场景、景别、构图、运镜、光线、风格、旁白/字幕、时长和转场。
复制 assets/replica-plan-template.json 为 replica-plan.json,并加载 references/shot-and-prompt-guide.md。按剪切点、动作阶段或文案信息节点拆镜,不机械按固定秒数切段。
3.1 图生视频的画面分析
上传图片时先运行图像分析脚本,获取尺寸、画幅和 9:16 裁切建议:
python "<skill-dir>/scripts/image_report.py" "<image-1>" "<image-2>" --output "<project>/inspection/image-report.json"
再用图像查看工具逐张分析,写出:主体与身份特征、姿态与表情、服装与道具、场景与背景、光线与色彩、景别与构图、材质与画风、可动与不可动元素。
据此决定每张图的用途:一张作为首帧,其余作为人物/产品/风格参考。首帧必须能独立支撑整段画面,人物完整、构图干净、无遮挡、无多余文字。
根据图片状态推导动作与运镜,例如静帧人物举起杯子、镜头缓慢推近形成 4 秒短片;不要描述图片里没有的动作,也不要要求无法在目标时长内完成的动作。描述与图片冲突时以图片为准,并在计划中标注冲突。
4. 应用非一模一样复刻约束
为视频复刻分别填写“必须保留”和“必须改变”:
- 保留:人物面貌或产品身份、人物/产品在画面中的大小比例、主要姿态与动作、相对楼高、景深关系、运镜和镜头时长。
- 改变:道路材质与标线、建筑立面与颜色、路边物体与陈设、非关键道具、植被、天空、材质、配色或画风。
- 保持:改变后的环境仍符合原有透视、相对高度和空间比例,不把高楼变矮、不把人物拉伸。
用户明确要求保留某个具体物体时,将它从“必须改变”移到“必须保留”。不要为了追求差异而改变用户点名锁定的面貌、产品或结构。
5. 先写整段视频提示词
在生成任何视频前,先完成 project.whole_video_prompt。整段提示词必须能独立描述完整成片,依次包含:
输出规格 → 核心内容 → 人物/产品 → 场景与必须改变的环境 →
镜头顺序与时间节点 → 运镜 → 动作 → 光线色彩与风格 →
多参考素材用途 → 旁白/音乐 → 连续性与禁止事项
再从整段提示词派生各镜头提示词,确保分段生成后仍能拼回同一部作品。所有镜头逐字复用核心人物、产品、风格和色彩描述。负向提示词针对主体漂移、比例失真、楼高改变、背景复制、文字乱码、无故切镜等实际风险。
5.5 提示词验证闸门
生成视频前必须先经过用户验证。把整段提示词、分镜提示词、使用的参考图和预计时长整理成一份可读清单发给用户,并把 project.prompt_approval.status 置为 draft、project.generation_approved 置为 false。
等待用户明确确认(“确认”“可以生成”“按这个来”等)。用户确认后把 prompt_approval.status 改为 confirmed、写入 confirmed_at,并把 generation_approved 改为 true;用户提出修改时先改提示词,再次等待确认。
用户未确认、只说“看看”或要求继续调整时,不要调用视频生成。plan-only 模式不受此闸门限制,因为它本来就不生成视频。
6. 选择整段或分段生成
先生成整段提示词,再选择策略:
whole:短视频、单一连续场景或用户明确要求一次生成时使用。默认将 不超过 8 秒且镜头结构简单 的项目视为可整段生成。segmented:多镜头、时长较长、动作复杂、连续性要求高或需要局部修改时使用。逐镜生成后再拼接。
用户可覆盖默认策略。分段时按模型支持的时长取整,并确保各段覆盖完整时间轴。每版保存提示词、参考素材、模型、参数和输出文件,不覆盖历史版本。
实际调用生成前检查提供方的费用与参考素材限制。使用消耗额度或付费模型时先告知;Agnes Flash 的免费状态属于限时政策,调用前以当前提供方信息为准。
6.5 用 MiniMax H3 执行复刻(主通道)
前置条件:已完成「2.0 视觉承载分流」且判定画面主体属真实感影像。若画面以文字、网格、图表为主体,不要执行本节,改走 references/deterministic-layout.md——H3 画不出可读的中文和精确对齐的网格,硬跑只会得到废片。
接口字段见 references/minimax-h3-api.md,全部已按官方 v2 文档核实。不要凭记忆改字段名——H3 和旧海螺 v1 接口完全不同,混用必然 400。
配置凭据
export MINIMAX_API_KEY="sk-..." # 海外控制台的 key
# 国内控制台申请的 key 要指定主机:
python "<skill-dir>/scripts/minimax_h3.py" check --region cn
脚本的凭据解析顺序:--api-key > MINIMAX_API_KEY > 技能目录 .env > ~/.minimax/config.json。
key 只放这些位置,不要写进 replica-plan.json、提示词、日志或压缩包。
check 只读文件列表,不产生生成费用。
复刻意图 → 素材角色
| 复刻意图 | 传入参数 | 对应 role |
|---|---|---|
| 镜头结构 / 运镜 / 动作 | --ref-video |
reference_video |
| 人物面貌 / 产品 / 画风锁定 | --ref-image(≤9 张) |
reference_image |
| 口播音色 / 原片音乐参考 | --ref-audio |
reference_audio(必须配图或视频) |
| 指定首帧 / 尾帧 | --first-frame / --last-frame |
与参考素材互斥 |
提示词里用官方标签引用素材(<Video 1>、<Picture 1>、<Audio 1>),并逐条写明角色用途。把文件堆进去不写角色说明,是官方点名的反模式。
三条会直接 400 的硬约束
- 参考视频单段 2–15 秒,总时长 ≤15 秒,≤50MB,仅 MP4/MOV + H.264/H.265 + AAC/MP3。源视频更长时必须切段:
bash
python "<skill-dir>/scripts/minimax_h3.py" prep-ref "<source.mp4>" "<project>/reference/ref-01.mp4" --start 0 --duration 15
python "<skill-dir>/scripts/minimax_h3.py" prep-ref "<source.mp4>" "<project>/reference/ref-02.mp4" --start 15 --duration 7
prep-ref 用 trim 滤镜精确裁到目标秒数(直接靠 -t 会溢出到 15.08s 而超限),并统一转成 H.264+AAC、24fps、长边 ≤1920。切段边界要与分镜切点对齐,否则复刻出的节奏会和原片错位。
- 首尾帧与参考素材互斥,一个请求里只能二选一。
- 音频不能单独存在,至少配一张图或一段视频。
参考生视频必须显式 --ratio 9:16,否则模型默认 adaptive,可能跟着参考视频出成横屏。
提交与轮询
先 dry-run 看 payload 和预算,不产生费用:
python "<skill-dir>/scripts/minimax_h3.py" submit --dry-run \
--prompt-file "<project>/prompt-01.txt" \
--ref-video "<project>/reference/ref-01.mp4" \
--ref-image "<project>/reference/keyframe.jpg" \
--duration 5
校验通过且用户已确认提示词后再真跑:
python "<skill-dir>/scripts/minimax_h3.py" submit --wait \
--prompt-file "<project>/prompt-01.txt" \
--ref-video "<project>/reference/ref-01.mp4" \
--ref-image "<project>/reference/keyframe.jpg" \
--duration 5 \
--out "<project>/generations/shot-01.mp4" \
--json-out "<project>/generations/shot-01.record.json"
脚本会自动上传本地素材(mm_file:// 引用)、轮询(10 秒一次)、下载成片并记录 usage 与实付估算。
中途打断后用 poll <task_id> 或 download <task_id> --out ... 继续;任务保留 7 天,下载链接过期时重新查询一次即可换新。
报价口径
H3 按生成秒计费,参考视频时长也按输入秒计费:5 秒成片 + 10 秒参考视频 = 计 15 秒,账单一倍半。
报价必须用 submit --dry-run 打出的估算,交付时用返回的 usage.total_seconds 核对,不要只报 duration。
错误处理
| 码 | 含义 | 处理 |
|---|---|---|
| 401 | key 与主机区域不匹配(不是 key 无效) | 换 --region cn 或去掉 |
| 402 | 余额不足 | 提示用户充值,不要重试 |
| 422 | 内容安全拦截 | 改写提示词,不要原样重试 |
| 429 / 5xx | 并发或服务端问题 | 可重试,退避后继续 |
限流按并发任务数算(免费 2 / 付费 15),不是 RPM。分段生成时串行提交即可,不要一次开满。
7. 校验、生成和拼接
运行:
python "<skill-dir>/scripts/validate_plan.py" "<project>/replica-plan.json"
修复错误后再生成。生成前再次确认 project.prompt_approval.status 为 confirmed 且 project.generation_approved 为 true,否则停在提示词阶段。逐镜检查人物面貌、产品、相对比例、风格、运镜和首尾状态,只重生成失败镜头。
分段视频通过后运行:
python "<skill-dir>/scripts/assemble_video.py" "<project>/final/video.mp4" "<clip-1>" "<clip-2>" --audio "<optional-audio>"
拼接脚本默认保留首段片段的原生分辨率(480P 竖屏即 480×854),各片段按比例缩放、必要时加黑边对齐;需要指定规格时用 --size 720x1280 等参数显式给出。口播短于画面时自动补静音,长于画面时按画面截断。片段默认丢弃原声,通过 --audio 加入统一音轨。不要通过拉伸填满竖屏。
7.1 交付契约(规格分层,唯一权威定义)
交付契约分三层。所有通道都受「强制项」约束;「目标项」尽力达成;「原生规格」按通道如实记录,不互相冒充。
强制项(任何通道违反即不合格):
- 画幅 9:16 竖屏(
width/height ≈ 0.5625),不得拉伸人物、产品或建筑,不得把横屏拉伸成竖屏。 - 不二次转码、不擅自升分辨率;实际输出即原生导出。
- 交付说明如实写明模型、分辨率、帧率;备用通道产物不得标成 480P;H.264 + AAC。
目标项(默认,可达成即达成): 分辨率 480P 档(短边 480)。主通道和本地排版通道都能精确达到;备用通道达不到时按原生档记录。
各通道原生规格(如实记录,互不冒充):
| 通道 | 分辨率 | 帧率 | 音频 | 规格锁 |
|---|---|---|---|---|
| MiniMax-H3-Highspeed(主通道) | 480P / 9:16 | 24fps | 原生 32kHz 立体声 | DELIVERY 硬锁,enforce_spec 拒绝偏离 |
| 本地确定性排版 | 480×854 | 30fps | AAC 160k(edge-tts 合成后 44.1k 源) | render_layout.py / tts_voiceover.py 默认参数即锁定值 |
| 内置视频生成(备用,无 key 验证用) | 768×1344(768P) | 24fps | 原生立体声 | 只能出 768P,交付标注实际值,不得称 480P |
| Agnes(备用) | 720×1280(720P) | ≈24fps | 视提供方 | 不强制转码;画幅明显不符才用拼接脚本规整 |
| 未来 Seedance | 以最相近原生档为准 | 以原生为准 | 以原生为准 | 接入时在 generation-profile.json 记录实际规格 |
帧率不设全局统一值:H3 是 24fps、本地排版是 30fps,都是各自通道的原生值,没有冲突——不要用转码去「统一」它们,也不必为拼接而转码(assemble_video.py 默认保留首段原生分辨率,只规整画幅)。
8. 通过框选确认或文字描述修改
把 assets/region-editor.html 复制到项目 review/ 并在浏览器打开。导入生成视频或截图,抓取当前帧,拖拽框选并填写修改说明。导出带框标记图、黑白蒙版和 JSON 后,点击“确认修改并导出任务”。只有 confirmed: true 的任务才进入实际修改;继续调整框选或说明时重新确认。
把修改定位到具体镜头和时间码,只修改框内内容,保持框外人物、背景、光线、口播和运动不变。提供方支持区域编辑时传入原帧、蒙版和说明;不支持时先编辑关键帧再重生成该镜头,或仅重生成受影响片段。不得声称所有模型都支持原生视频局部重绘。
同时接受不框选的自然语言修改,例如“把第二秒右侧的楼变矮一点”“全片换成二维动画”“把口播第二句改得更简洁”。自动判断修改类型、目标镜头、时间范围和是否影响口播;目标不清且会大面积重做时才确认。文字修改同样先给出变更摘要,再执行并保留旧版。
修改后替换对应片段并重新拼接。纯画面修改不得改变原口播;口播文字变化时重新合成受影响句子并重新对齐,不重做未改变的画面。
9. 复刻口播内容与节奏
检测到原视频有口播时,将 content_mode 设为 voiceover-video,并执行:
- 转写原文和时间码,区分口播、对白、音乐、音效与环境声。
- 默认逐字保留口播内容;仅纠正明显转写错误,不擅自润色、翻译或改写。
- 按原句顺序、停顿和镜头节点分配
voiceover_text,保持总时长与画面动作对齐。 - 配音本地优先:先用
local_first.py route voiceover判定。默认走本地tts_voiceover.py(edge-tts,免费)重新合成,选接近原语速和情绪的正常音色;默认不克隆原说话人身份。 - 本地做不到的三种场景才用模型音频(必须报费用并经用户确认):
- 口型同步(--lip-sync):真人特写口播,本地 TTS 对不上画面口型,只有 H3 原生音频(与画面同帧生成)能做到。把台词写进提示词的[声音]段,用<d>[Chinese] 台词</d>标出,再补音效与音乐方向。
- 音色克隆(--clone-voice):用户明确授权后,H3 走--ref-audio。
- 情绪化演绎/多角色对白(--emotive):edge-tts 表现力不够时用 H3。
纯画面视频(图解类排版)无口型同步需求,配音一律本地。 - 保留或重新设计音乐与音效,避免盖住口播,并在最终拼接时使用统一音轨。
复刻的是口播内容与节奏,不默认可完美复制原音色。H3 走 --ref-audio 可以做音色参考,但需用户明确授权。免费 Edge TTS 依赖在线非官方接口,失败时使用其他已配置语音方案或交付口播文本与时间码,不伪造音频。
10. 对照验收并交付
加载 references/quality-checklist.md,检查输出规格、整段结构、镜头节奏、面貌/产品、环境差异、相对高度与比例、区域修改边界、口播原文、字幕和音画同步。
按实际完成度交付:
- 成片:最终 MP4、整段提示词、分镜计划、各段文件和未解决差异。
- 仅方案:整段提示词、分镜表、逐镜提示词和生成配置建议。
- 区域修改:新版成片、修改前后版本、框选说明和仍需确认的边缘问题。
- 图生视频:首帧与分析报告、提示词、用户的确认记录和最终成片。
明确说明实际使用的模型、是否产生费用、保留了什么、主动改变了什么,不把方案说成已生成视频。
典型触发示例
- “上传这个视频做复刻,但公路、房子和路边物体都不要一样,人物面貌和相对楼高保持。”
- “用 MiniMax H3 复刻这条视频,运镜和节奏照着原片,背景换成咖啡馆。”
- “先用 dry-run 给我看预算,我确认了再提交。”
- “这条原片 30 秒,H3 一次只能参考 15 秒,帮我切段生成再拼起来。”
- “根据这篇文案编导一条 9:16 竖屏短片,参考这三张图的风格。”
- “先给我整段提示词,再分段生成并拼起来。”
- “框选第二秒画面右侧的楼,把它改成现代玻璃立面,其他地方不动。”
- “用这张图做首帧,先给我提示词,我确认后再生成视频。”
- “直接按这段描述改:全片改成二维动画,保留原来的口播。”