L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Productivité · SKILL.md

novel-to-video

novel-to-video

文学作品到影视视频的自然语言工作流;生成链路统一使用 changdu CLI。支持漫剧和真人剧两种模式。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: novel-to-video description: 文学作品到影视视频的自然语言工作流;生成链路统一使用 changdu CLI。支持漫剧和真人剧两种模式。

文学作品到影视视频工作流(changdu 版)

核心任务

将小说/故事/剧本转换为完整视频,严格按技能链路执行,不跳步。

必须学习的技能

  • novel-reader:读取与提取角色/场景/道具
  • text-storyboard:生成文字分镜
  • generate-film-video-prompt:补强视频提示词
  • storyboard-to-seedance-prompt:分镜转视频提示词(含防穿帮约束规则)
  • character-design:角色设计提示词
  • jimeng-skill:统一生成入口(内部统一走 changdu CLI)
  • asset-management:素材资产管理(真人剧必需)
  • video-review:连贯性审查与修复(步骤 7.5)

两种制作模式

开始前先与用户确认制作模式:

模式画风视频生成方式适用场景
漫剧模式赛璐璐/动漫/非写实--image 传入参考图动漫风格短剧
真人剧模式写实/3D写实--asset 传入入库素材真人风格短剧

全局要求

  • 开始前先确认画风、比例(默认 16:9)和制作模式。
  • 漫剧模式必须使用非写实描述(赛璐璐、线稿平涂、动漫设定稿)。
  • 真人剧模式需先使用 asset-management 技能将素材入库。
  • 所有图像与视频生成都通过 changdu 执行。

工作流(严格顺序)

步骤 1-4:通用(两种模式相同)

  1. 读取文本:使用 novel-reader 提取角色、场景、道具。
  2. 文字分镜:使用 text-storyboard 输出 单集制作/EPXXX/文字分镜.txt。
  3. 生成角色图(Seedance 2.0 最佳实践):
    • 每个角色生成面部特写(大头照)+ 全身像两张独立图片
    • 禁止使用三视图/多视图作为人物参考(FAQ V-1/V-7:会导致ID漂移和双胞胎)
    • 面部特写应占画面80%以上,避免过多背景干扰
    • 执行 changdu text2image ... --output 角色/角色名_face.jpg
    • 执行 changdu text2image ... --output 角色/角色名_fullbody.jpg

步骤 3.5:生成角色音色参考视频

为每个有台词的角色生成一段 5 秒的音色参考视频,用于后续所有 clip 的音色锚定:

changdu multimodal2video \
  --image 角色/<角色名>_face.jpg --image 角色/<角色名>_fullbody.jpg \
  --prompt "将图片1中的[2-3个核心特征]定义为[角色名]。图片2为[角色名]全身参考。[风格声明]。[角色名]缓缓转身,从正面到侧面再到背面,展示全身形象。她开口说道{[代表性台词]},[音色特征描述]。保持无字幕,避免画面生成字幕,不要水印,不要logo。" \
  --ratio 16:9 --duration 5 --wait \
  --output 角色/<角色名>_voice_ref.mp4

要点:

  • 台词选取该角色在剧中的代表性台词(1-2 句即可)
  • --duration 5 足够包含转身 + 说话
  • 视频用于提取音色特征,同时也可作为角色形象参考
  • 生成后上传到 TOS 获取 URL,记录到 assets.json 的 voice_ref_url 字段
changdu upload-tos --file 角色/<角色名>_voice_ref.mp4

步骤 3.6:生成妆造变化的参考资产

如果 novel-reader 提取到角色在剧中有妆造变化(换装、变妆、受伤等),需要为每种不同的妆造分别生成完整的参考资产:

# 为角色的某个特定妆造生成面部特写
changdu text2image \
  --prompt "[角色基础外貌描述],[该妆造的具体变化描述],面部特写,纯白背景" \
  --resolution_type 2k \
  --output 角色/<角色名>_<妆造名>_face.jpg

# 生成该妆造的全身像
changdu text2image \
  --prompt "[角色基础外貌描述],[该妆造的具体变化描述],全身站姿,纯白背景" \
  --resolution_type 2k \
  --output 角色/<角色名>_<妆造名>_fullbody.jpg

# 生成该妆造的音色参考视频
changdu multimodal2video \
  --image 角色/<角色名>_<妆造名>_face.jpg --image 角色/<角色名>_<妆造名>_fullbody.jpg \
  --prompt "将图片1中的[核心特征]定义为[角色名]。图片2为全身参考。[风格声明]。[角色名]缓缓转身展示全身形象,开口说道{[代表性台词]}。保持无字幕,不要水印,不要logo。" \
  --ratio 16:9 --duration 5 --wait \
  --output 角色/<角色名>_<妆造名>_voice_ref.mp4

要点:

  • 每种妆造都需要独立的 face + fullbody + voice_ref 三件套
  • 在 assets.json 中用 looks 数组管理,标注每种妆造适用的集数/场号
  • 生成 clip 时,根据当前集数选择正确的妆造参考图传入 --image
  • 在 prompt 的主体定义行中标注当前使用的妆造,如「图片1为[角色名]([妆造名]造型)面部参考」

在 assets.json 中记录:

{
  "characters": {
    "<角色名>": {
      "default_look": {
        "face_file": "角色/<角色名>_face.jpg",
        "fullbody_file": "角色/<角色名>_fullbody.jpg",
        "voice_ref_video": "角色/<角色名>_voice_ref.mp4",
        "voice_ref_url": "<TOS_URL>"
      },
      "looks": [
        {
          "name": "<妆造名称>",
          "episodes": ["EP005-EP008"],
          "description": "<外观变化描述>",
          "face_file": "角色/<角色名>_<妆造名>_face.jpg",
          "fullbody_file": "角色/<角色名>_<妆造名>_fullbody.jpg",
          "voice_ref_video": "角色/<角色名>_<妆造名>_voice_ref.mp4",
          "voice_ref_url": "<TOS_URL>"
        }
      ]
    }
  }
}
  1. 生成场景图:
    • 先产出对应 *.prompt.txt
    • 再执行 changdu text2image ... --output 场景/xxx.jpg

步骤 4.5:生成场景360度参考视频

为每个主要场景生成一段 5 秒的360度缓慢旋转视频,展示完整空间布局。此视频在后续 clip 生成时作为 --ref-video 传入,帮助模型理解空间关系和人物站位:

changdu multimodal2video \
  --image 场景/<场景名>.jpg \
  --prompt "[风格声明]。镜头在[场景名]内做360度缓慢环绕旋转,依次展示[关键物品A]位置、[关键物品B]、[关键物品C]、[入口/出口位置]。镜头运动平稳流畅,展示完整的空间布局和物品摆放位置。保持无字幕,不要水印,不要logo。" \
  --ratio 16:9 --duration 5 --wait \
  --output 场景/<场景名>_360.mp4

要点:

  • 以场景参考图为输入,生成环绕展示全空间的视频
  • prompt 中明确描述空间中的关键物品和它们的相对位置
  • --duration 5 足够展示一个完整的环绕旋转
  • 生成后上传到 TOS 获取 URL,在 clip 生成时通过 --ref-video 传入
  • 在 clip 的 prompt 中加入「参考视频N中的场景空间布局,保持人物站位一致」
changdu upload-tos --file 场景/<场景名>_360.mp4

在 assets.json 中记录场景视频:

{
  "scenes": {
    "<场景名>": {
      "image": "场景/<场景名>.jpg",
      "video_360": "场景/<场景名>_360.mp4",
      "video_360_url": "<TOS_URL>"
    }
  }
}
  1. 生成道具参考图:
    • 从 novel-reader 提取的道具信息中,为每个重要道具生成参考图
    • 道具图要求:纯白背景、清晰展示道具外观(形状、颜色、材质、尺寸)、多角度(正面+侧面)
    • 执行 changdu text2image ... --output 道具/xxx.jpg
changdu text2image \
  --prompt "纯白背景,产品展示图。[道具外观描述:形状、颜色、材质、尺寸、独特标记]。正面和侧面两个角度展示,无文字无水印。" \
  --resolution_type 2k \
  --output 道具/<道具名>.jpg

要点:

  • 道具图必须是纯白背景、清晰的产品展示风格
  • prompt 中写清道具的形状、颜色、材质、尺寸、独特标记等视觉细节
  • 在后续 clip 的 prompt 中,用 道具名@图片N 绑定
  • 记录到 assets.json 的 props 字段
{
  "props": {
    "<道具名>": {
      "image": "道具/<道具名>.jpg",
      "description": "[道具外观描述]"
    }
  }
}

步骤 5:校验资产

确认以下资产都已生成,否则禁止进入视频阶段:

  • 每个角色的面部特写 + 全身像 + 音色参考视频
  • 有妆造变化的角色:每个妆造的面部特写 + 全身像 + 音色参考视频
  • 每个主要场景的参考图 + 360度旋转视频
  • 每个重要道具的参考图

步骤 5.5:【仅真人剧】素材入库

将角色和场景图片入库到 Assets:

# 创建素材组
changdu asset-group-create --name "项目名-角色组"

# 入库每个角色(面部特写和妆造分开上传)
changdu asset-create --file ./角色/女主_面部.jpg --group-id <组ID> --type Image --name "女主-面部"
changdu asset-create --file ./角色/女主_三视图.jpg --group-id <组ID> --type Image --name "女主-妆造"

# 入库场景
changdu asset-create --file ./场景/会议室.jpg --group-id <组ID> --type Image --name "会议室"

记录每个素材的 Asset ID,后续视频生成时使用。

步骤 6:生成每个 clip(顺序生成,尾帧衔接)

调用 storyboard-to-seedance-prompt 产出 视频_ClipXXX.prompt.txt。

步骤 6.5:提示词优化(生成前质量把关)

在生成视频之前,先用 prompt-optimize 对所有 prompt 文件进行预检和自动优化:

# 1) 检查模式:扫描结构/画质/运镜/动作问题
changdu prompt-optimize --dir ./单集制作/EP001/ --check

# 2) 自动优化:追加画质约束、面部稳定、范围边界(输出到新目录确认无误后覆盖)
changdu prompt-optimize --dir ./单集制作/EP001/ --output-dir ./单集制作/EP001/optimized/ --style '电影写实'

# 3) 确认无误后用优化版替换原文件
cp ./单集制作/EP001/optimized/*.prompt.txt ./单集制作/EP001/

prompt-optimize 基于 Seedance 2.0 提示词指南,自动检查并修复:

  • 缺失的主体定义(应使用「将图片N中的X定义为主体」格式)
  • 精确时间戳标记(Seedance 2.0对精确时间支持不稳定,应用自然语言过渡)
  • 三视图/多视图引用(不建议使用,应改用面部特写+全身照)
  • 抽象情绪词(应替换为具体身体信号)
  • 运镜堆叠(15秒内不超过3种运镜)
  • 高强度动作词(Seedance 偏好缓慢连续动作)
  • 缺失的范围边界声明(防止叙事泄漏)
  • 弱字幕/水印约束(应使用「保持无字幕,避免画面生成字幕,不要水印,不要logo」)
  • 缺失的动作过渡词(紧接着/随后/顺势)
  • 冗余的自定义meta标签(过多会干扰模型理解)
  • 特殊字符 --(Seedance不解析该符号之后的内容)

关键原则:视频必须按 Clip 顺序逐个生成,前一个 clip 的尾帧自动作为下一个 clip 的首帧,保证角色和场景的连贯性。

推荐方式:sequential-generate 一键命令

漫剧模式(传图片文件 + 音色参考 + 场景视频):

changdu sequential-generate \
  --prompt-dir ./单集制作/EP001/ \
  --image 角色/女主_face.jpg --image 角色/女主_fullbody.jpg --image 场景/会议室.jpg \
  --ref-video <会议室_360_TOS_URL> \
  --ref-audio <女主_voice_ref_TOS_URL> \
  --ratio 16:9 --duration 15 \
  --prompt-header "将图片1中的[特征]定义为女主。图片2为女主全身参考。图片3为场景参考。参考视频1中的场景空间布局,保持人物站位一致。" \
  --output-dir ./单集制作/EP001/

真人剧模式(传图片 + 场景视频 + 音色参考):

changdu sequential-generate \
  --prompt-dir ./单集制作/EP001/ \
  --image 角色/女主_face.jpg --image 角色/女主_fullbody.jpg --image 场景/场景.jpg --image 道具/U盘.jpg \
  --ref-video <场景_360_TOS_URL> \
  --ref-audio <女主_voice_ref_TOS_URL> \
  --ratio 16:9 --duration 15 \
  --prompt-header "将图片1中的[特征]定义为女主。图片2为女主全身参考。图片3为场景参考。图片4为U盘道具参考。参考视频1中的场景空间布局,保持人物站位一致。" \
  --output-dir ./单集制作/EP001/

音色锚定说明:--ref-audio 传入步骤 3.5 生成的角色音色参考视频的 TOS URL,Seedance 会从中提取音色特征。同时在 prompt 中用 采用音频1的[音色特征描述]的音色 引用该音频(如"采用音频1的低沉坚韧青年女声的音色"),双重锚定确保音色一致性(参考 Seedance FAQ A-3)。多角色场景可传入多个 --ref-audio,在 prompt 中用 音频1、音频2 分别指代。

场景视频说明:--ref-video 传入步骤 4.5 生成的场景360度旋转视频的 TOS URL。在 prompt 中声明「参考视频N中的场景空间布局,保持人物站位一致」,帮助模型理解空间关系。注意:如果同时使用 --ref-video 做前段尾段衔接(sequential-generate 的 continuity-mode ref_video),场景视频和衔接视频会共用 --ref-video 槽位(最多 3 段),需在 prompt 中分别说明每个视频的语义角色。

该命令自动完成:

  1. 扫描目录内 视频_ClipXXX.prompt.txt 文件(按编号排序)
  2. 按顺序逐个生成,每个 clip 启用 return_last_frame
  3. 将前一 clip 的尾帧 URL 作为下一 clip 的 first_frame_url
  4. 可选从前一视频中抽取关键帧作为额外参考(默认开启)
  5. --ref-audio 会自动附加到每个 clip 的 reference_audio,保持全集音色一致

手动方式(按需单个生成)

# 第1个 clip
changdu multimodal2video \
  --image 角色/女主.jpg --image 场景/会议室.jpg \
  --prompt "图1是女主,图2是场景。$(cat 视频_Clip001.prompt.txt)" \
  --ratio 16:9 --duration 15 --wait --output 视频_Clip001.mp4 \
  --return-last-frame
# 输出中包含「尾帧URL: https://...」

# 第2个 clip:用上一 clip 的尾帧URL
changdu multimodal2video \
  --image 角色/女主.jpg --image 场景/会议室.jpg \
  --prompt "图1是女主,图2是场景。$(cat 视频_Clip002.prompt.txt)" \
  --ratio 16:9 --duration 15 --wait --output 视频_Clip002.mp4 \
  --return-last-frame --first-frame-url <上一clip输出的尾帧URL>

步骤 7:拼接成片

使用 clip-concat 拼接全部 clip,推荐 --audio-fadein 0.3 消除 Seedance 启动底噪同时保留原声(台词、音效):

changdu clip-concat \
  --input-dir ./单集制作/EP001/ \
  --output ./单集制作/EP001/完整版.mp4 \
  --audio-fadein 0.3

注意:不要使用 --strip-audio,否则会丢失 Seedance 生成的角色台词和音效。仅在后期需要全量配音配乐时才使用 --strip-audio。

步骤 7.5:连贯性审查与修复

调用 video-review 技能对视频进行审查。穿帮修复 = 修改 prompt + Seedance 重新生成,不使用 FFmpeg 调色/转场。

  1. 提取关键帧:对每个 clip 提取首帧/中帧/尾帧到 analysis/ 目录
  2. 识别穿帮:逐帧对比相邻 clip 衔接处,检查角色外貌、道具、场景一致性
  3. 修复(只有两种方式):
    • REGEN:修改 prompt 强化约束块 → changdu clip-regen 用 Seedance 重新生成
    • TRIM:叙事泄漏 → changdu clip-trim --trim-tail Xs 裁剪
  4. 重新拼接 → changdu clip-concat
# 穿帮修复:修改 prompt 后重新生成第4个 clip
changdu clip-regen \
  --clip 4 --prompt-dir ./单集制作/EP001/ \
  --asset <角色ID> --asset <场景ID> \
  --prompt-header '图片1是男主面部,图片2是场景。' \
  --ratio 16:9 --duration 15

# 叙事泄漏:裁剪 clip 尾部
changdu clip-trim \
  --input 视频_Clip003.mp4 \
  --output 视频_Clip003.mp4 \
  --trim-tail 2.0

# 重新拼接
changdu clip-concat \
  --input-dir ./单集制作/EP001/ \
  --output ./单集制作/EP001/最终版.mp4 \
  --audio-fadein 0.3

Seedance 2.0 提示词最佳实践

基于官方提示词指南和 FAQ,撰写视频提示词时遵循以下规则:

参考图分工原则

每张参考图只承担一种职责,禁止混用:

图片职责用途示例
面部特写锁定角色五官ID角色_face.jpg,放图片1(最高优先级)
全身妆造锁定服装/体态角色_fullbody.jpg,放图片2
场景空间锁定环境/空间布局场景.jpg
道具参考锁定道具外观道具/<道具名>.jpg
站位草稿表达人物空间关系站位草稿.jpg(可选)

禁止将人物图、场景图、站位草稿、道具图混在同一张图片中。空间关系优先通过参考图/参考视频表达,减少复杂文字描述。

提示词格式

将图片1中的[2-3个核心特征]定义为[角色名]。图片2为[角色名]全身参考。图片3为[场景名]场景参考。图片4为[道具名]道具参考(如有)。参考视频1中的场景空间布局,保持人物站位一致(如有场景视频)。

[风格声明,如:电影写实风格 / 日本动漫cel-shaded风格]

[场景描述]。[镜头类型]角色名@图片N[动作],采用音频N的[音色特征]的音色说{台词原文}。紧接着[下一动作]。随后[下一动作]。最后[结束动作]定格。

本段仅展示上述动作,不展示后续剧情。视频全程不要在同一画面中复制相同人物,不要多人同脸。保持无字幕,避免画面生成字幕,不要水印,不要logo,不要BGM。

台词全链路保留:剧本中的角色对白必须经过 text-storyboard(原文保留)→ storyboard-to-seedance-prompt(转写为 {} 格式)完整传递到最终 prompt 中。禁止在任何环节将台词概括为"低语道歉""质问"等动作描述。

关键规则

  1. 主体定义:每次引用参考图中的角色,必须用「将图片N中的X定义为主体」格式绑定
  2. @图片N 绑定不可省略:每次角色出镜都必须用 角色名@图片N 格式标注(如 女主@图片1),绝不能只写角色名。道具出现时同理(如 信物@图片4)。这是 Seedance 2.0 核心规则
  3. 描述顺序:镜头 → 主体 → 空间 → 音频,按事件发生顺序描述
  4. 自然语言过渡:使用「紧接着/随后/顺势」连接动作,不使用精确时间戳
  5. 简洁优先:避免冗长meta标签,直接描述画面内容
  6. 参考图规范:面部特写放图片1(最高优先级),全身照放图片2,场景放图片3,道具放后续编号
  7. 台词格式:使用 {} 包裹台词内容。台词必须从剧本原文完整保留,经过 text-storyboard → storyboard-to-seedance-prompt 全链路不得丢失。示例:剧本 女主低声说:"对不起" → 文字分镜保留原文 → Seedance prompt 写为 女主@图片1低声说{对不起}
  8. 音色锚定:当角色有音色参考音频时,台词前加 采用音频N的[音色特征描述]的音色,如 采用音频1的温柔低沉女声的音色说{对不起}。必须包含具体音色特征描述词(低厚温润/清冽有力/沙哑低沉等),不要只写"采用音频N的音色"——加上特征描述能显著提升音色参考准确性(参考 FAQ A-3)
  9. 特殊符号:音乐用 (),音效用 <>,字幕用 【】,禁止使用 --
  10. 反双胞胎:多角色同画面时,在 prompt 末尾追加「视频全程不要在同一画面中复制相同人物,不要多人同脸」
  11. 场景视频参考:有360度场景视频时,在 prompt 中声明「参考视频N中的场景空间布局,保持人物站位一致」,通过 --ref-video 传入

常见问题防范

问题防范措施
ID漂移(换脸)面部特写单独裁剪作为参考图,放图片1最前面;禁止使用三视图/多视图
双胞胎不用三视图;每次提及角色时用 @图片N 标注;多角色场景加"不要多人同脸"
参考图混用每张图只承担一种职责(面部/全身/场景/道具),禁止混在一张图中
风格漂移在提示词开头明确风格,如「2D日漫风格」;参考图先转目标风格再生视频
生成字幕加「保持无字幕,避免画面生成字幕」;输入图片/视频去除已有文字
生成水印/logo加「不要水印,不要logo」
音色不准加音色特征描述词(如"低厚温润中年男声");台词风格与参考音频风格一致
站位漂移用场景360度视频做 --ref-video,prompt 中声明保持站位一致
道具不一致生成道具参考图,在 prompt 中绑定 道具名@图片N

推荐目录结构

项目名/
├── 角色/
│   ├── <角色名>_face.jpg                    # 面部特写(占画面80%)
│   ├── <角色名>_fullbody.jpg                # 全身参考(含服装道具)
│   ├── <角色名>_voice_ref.mp4               # 音色参考视频(5秒,转身+说台词)
│   ├── <角色名>_<妆造名>_face.jpg           # 妆造变化:该造型面部特写(如有)
│   ├── <角色名>_<妆造名>_fullbody.jpg       # 妆造变化:该造型全身(如有)
│   └── <角色名>_<妆造名>_voice_ref.mp4      # 妆造变化:该造型音色参考(如有)
├── 场景/
│   ├── <场景名>.jpg                          # 场景参考图
│   └── <场景名>_360.mp4                      # 场景360度旋转视频
├── 道具/
│   └── <道具名>.jpg                          # 道具参考图(纯白背景)
├── assets.json                               # 记录角色/场景/道具/妆造的完整资产映射
└── 单集制作/
    └── EP001/
        ├── 文字分镜.txt
        ├── 视频_Clip001.prompt.txt
        ├── 视频_Clip001.mp4
        └── ...

断点续做

  • 先扫描目录,定位已完成到哪一步。
  • 从缺失产物的第一步继续,不重复覆盖已完成成果。
  • 真人剧模式:检查 assets.json 中已入库的素材 ID,跳过已入库素材。
Skills enregistrées