produce-mv

MV制作技能 (Produce Music Video)

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "produce-mv" with this command: npx skills add zhaihao118/micro-drama-skills/zhaihao118-micro-drama-skills-produce-mv

MV制作技能 (Produce Music Video)

概述

本技能用于自动化生成完整MV(音乐视频)作品的全套制作文档和Seedance视频生成任务。支持两种输入模式:

  • 从歌词/剧本创作:根据用户提供的歌词或MV剧本,自动生成完整的分镜设计和视频生成任务

  • 从已有素材导入:读取用户指定文件夹下的角色参考图片、场景图片等,结合剧本生成视频任务

MV特点(与短剧的区别)

维度 短剧(produce-anime) MV(produce-mv)

结构 25集 × 上下两部分 按歌曲段落分段(通常8-20段)

驱动 剧情驱动 音乐/歌词节奏驱动

编号 DM-XXX MV-XXX

子目录 episodes/EP01-EP25 segments/SEG01-SEGxx

每段时长 固定15s/part 固定15s/segment

总时长 固定12分30秒 取决于歌曲长度(通常3-5分钟)

对话 中文人物对话 歌词(可含念白/独白)

视觉风格 统一风格 支持多风格交替(如现实/幻想切换)

素材来源 自动生成所有角色图 支持导入用户已有素材

完整工作流程(4个阶段)

阶段 技能 产出

  1. MV制作 produce-mv

mv_script.md, character_bible.md, storyboard_config.json, video_index.json

  1. 媒体生成 generate-media

角色参考图 + 场景参考图 + 分镜图

  1. 任务生成 produce-mv (第七步) seedance_project_tasks.json(使用 (@文件名) 引用图片)

  2. 任务提交 submit-anime-project

批量推送到 Seedance API

视觉风格预设

项目支持从 /data/dongman/.config/visual_styles.json 读取视觉风格预设。MV特别支持多风格交替(如现实风格A + 幻想风格B交替)。

⚠️ 风格选择交互:在开始制作前,使用 ask_questions 工具让用户选择视觉风格。MV可以选择:

  • 单一风格:全片统一

  • 双风格交替:如"现实世界"用风格A,"幻想世界"用风格B(在 metadata.json 的 visual_styles 数组中记录)

执行流程

当用户要求制作MV时,按以下步骤顺序执行:

第一步:初始化项目

  • 读取 /data/dongman/projects/index.json 获取当前作品编号

  • MV项目使用 MV-XXX 编号(与短剧 DM-XXX 区分)

  • 如 index.json 中无 MV 项目,从 MV-001 开始

  • 在 /data/dongman/projects/ 下创建新作品目录,命名规则:{MV编号}_{作品名称拼音缩写}/

  • 创建作品目录结构:

projects/ ├── index.json # 所有作品索引(全局,DM+MV共用) └── MV-001_xxxx/ # 单部MV作品目录 ├── metadata.json # 作品元数据 ├── script/ │ └── mv_script.md # 完整MV分镜剧本 ├── characters/ # 角色设计 │ ├── character_bible.md # 角色圣经 │ └── ref_index.json # 角色参考图索引 ├── scenes/ # 场景设计 │ ├── scene_bible.md # 场景圣经 │ └── ref_index.json ├── props/ # 道具设计 │ ├── prop_bible.md # 道具圣经 │ └── ref_index.json ├── assets/ # 外部导入素材(用户提供) │ └── README.md # 素材说明 ├── segments/ # 各段内容(每段15s) │ ├── SEG01/ │ │ └── storyboard_config.json # 本段故事板配置(含9宫格分镜) │ ├── SEG02/ │ │ └── storyboard_config.json │ └── ... (SEG01-SEGxx) ├── seedance_project_tasks.json # [阶段3·媒体生成后] 全MV Seedance任务 └── video_index.json # 视频编号管理索引

第二步:读取/导入素材(可选)

如用户指定了素材文件夹路径,执行素材导入:

2.1 扫描素材文件夹

接受用户指定的文件夹路径(绝对路径或相对于workspace的路径)

扫描以下类型的文件:

- 图片:.png, .jpg, .jpeg, .webp

- 剧本:.md, .txt

- 音频:.mp3, .wav(记录路径,不处理音频内容)

2.2 素材分类与导入

角色参考图:

  • 文件名含 角色名 或 character 的图片 → 复制到 characters/

  • 自动更新 characters/ref_index.json

  • 如用户明确指定"xx.png是角色A的参考图",按指定映射

场景参考图:

  • 文件名含 scene 或 场景 的图片 → 复制到 scenes/

  • 自动更新 scenes/ref_index.json

道具参考图:

  • 文件名含 prop 或 道具 的图片 → 复制到 props/

  • 自动更新 props/ref_index.json

剧本文件:

  • .md 或 .txt 文件 → 读取内容作为MV剧本输入

其他素材:

  • 复制到 assets/ ,记录到 assets/README.md

2.3 交互确认

用 ask_questions 让用户确认素材映射:

  • "检测到以下文件,请确认用途:"

  • 列出文件名及推测的用途(角色图/场景图/其他)

  • 让用户调整映射

无素材模式:如用户未指定素材文件夹,则所有角色/场景参考图在阶段2(generate-media)中自动生成。

第三步:读取/创作MV剧本

模式A:从已有剧本读取

如果用户提供了MV剧本文件(如 notes/mv reffiles/MV剧本:凡人歌的赛博神话.md ),读取并解析:

  • 解析剧本表格/段落,提取:

  • 每个分镜的序号

  • 歌词/听觉节奏(对应时间线)

  • 画面内容(视觉呈现描述)

  • 镜头运用(Camera)

  • 画面风格 & 色调

  • 根据段落数量计算Seedance分段数(每段15秒)

  • 将剧本适配为标准 mv_script.md 格式

模式B:从歌词创作

如果用户只提供歌词(或歌曲名,由AI创作剧本),按以下步骤:

  • 分析歌词结构(前奏、主歌、副歌、间奏、尾声等)

  • 根据歌曲节奏设计视觉叙事

  • 确定风格方向(写实/幻想/混合)

  • 生成完整MV分镜剧本

生成 script/mv_script.md

《歌曲名》MV 完整分镜剧本

作品信息

  • 歌曲名:[歌曲名称]
  • 艺术家/创作者:[名称]
  • 歌曲时长:[X分X秒]
  • MV类型:[叙事型/概念型/表演型/混合型]
  • 视觉风格:[风格描述]
    • 风格A(如适用):[描述]
    • 风格B(如适用):[描述]
  • 核心概念:[一句话概括MV核心视觉概念]
  • 目标受众:[目标群体]
  • 总段数:[X段 × 15秒 = 总时长]

歌曲结构分析

段落时间范围类型情绪
前奏0:00-0:15instrumental压抑/悬念
主歌10:15-0:45verse叙述/平静
副歌10:45-1:15chorus爆发/激昂
............

世界观/视觉概念设定

[200-300字描述MV的视觉世界观]

分镜脚本

分镜01:[段落标题]

  • 时间:0:00-0:15(对应Segment SEG01)
  • 歌词/音频:[对应歌词或音乐描述]
  • 画面内容:[100字详细视觉描述]
  • 镜头运用:[镜头类型+运动方式]
  • 画面风格:[风格A/B + 色调描述]
  • 出场角色:[角色列表]
  • 使用场景:[场景ID列表]
  • 使用道具:[道具ID列表]
  • 情感基调:[情绪关键词]
  • AI绘图关键词(英文):[用于生成分镜图的Prompt]

分镜02:[段落标题]

...(按歌曲结构分段)

导演备注

[关于视觉叙事、卡点设计、转场技巧、色彩隐喻等总体执行建议]

第四步:角色/场景/道具设计

4.1 角色设计 characters/character_bible.md

如果已从素材文件夹导入了角色参考图,角色设定基于已有图片描述:

MV角色设定集

主角

角色1:[名字/代号]

  • 角色定位:[主角/配角/群演]
  • 外貌特征:[详细描述]
  • 服装设计
    • 风格A造型:[现实世界服装]
    • 风格B造型:[幻想世界服装](如适用)
  • 角色弧光:[在MV中的情感/状态变化]
  • 参考图来源:[imported/generated]
    • 导入文件:[原始文件名](如为导入)
  • AI绘图关键词(英文):[Prompt]

群演/配角

...

4.2 场景设计 scenes/scene_bible.md

MV场景设定集

场景1:[场景名称]

  • 场景ID:scene_01
  • 场景类型:[现实/幻想/过渡]
  • 场景描述:[详细描述]
  • 出现段落:SEG01, SEG03, SEG05...
  • 色调/氛围:[色调描述]
  • 参考图来源:[imported/generated]
  • AI绘图关键词(英文):[Prompt]

4.3 道具设计 props/prop_bible.md

MV道具设定集

道具1:[道具名称]

  • 道具ID:prop_01
  • 道具描述:[外观/材质/尺寸]
  • 象征意义:[在MV中的视觉象征]
  • 出现段落:SEG02, SEG08, SEG15
  • 参考图来源:[imported/generated]
  • AI绘图关键词(英文):[Prompt]

素材优先原则:如果用户已导入某角色/场景/道具的参考图,则 character_bible.md / scene_bible.md / prop_bible.md 中对应条目的 参考图来源 标记为 imported ,不再通过 generate-media 重复生成。

第四步B:资产完整性检查与补全

完成第四步角色/场景/道具设计后,必须执行资产完整性检查,确保所有在分镜中被引用的资产都有对应的参考图或生成计划。

检查逻辑

def check_asset_completeness(project_dir): """检查所有资产是否完整,返回缺失清单""" missing = {"characters": [], "scenes": [], "props": []}

# 1. 解析角色圣经,检查每个角色是否有参考图
characters = parse_character_bible(project_dir / "characters/character_bible.md")
for char in characters:
    ref_path = project_dir / f"characters/{char['name']}_ref.png"
    if not ref_path.exists():
        missing["characters"].append(char)

# 2. 解析场景圣经,检查每个场景是否有参考图
scenes = parse_scene_bible(project_dir / "scenes/scene_bible.md")
for scene in scenes:
    ref_path = project_dir / f"scenes/{scene['id']}_ref.png"
    if not ref_path.exists():
        missing["scenes"].append(scene)

# 3. 解析道具圣经,检查每个道具是否有参考图
props = parse_prop_bible(project_dir / "props/prop_bible.md")
for prop in props:
    ref_path = project_dir / f"props/{prop['id']}_ref.png"
    if not ref_path.exists():
        missing["props"].append(prop)

return missing

补全策略

资产缺失时,按以下优先级补全:

优先级 补全方式 适用场景 说明

1 用户手动提供 用户有现成素材 通过 ask_questions 询问用户是否有可用素材

2 自动生成 无现成素材 调用 generate-media 技能的对应阶段自动生成

3 标记待生成 批量处理模式 在 ref_index.json 中标记 status: "pending" ,统一在阶段2生成

补全执行流程

汇总缺失资产清单:

⚠️ 资产完整性检查结果:

  • 角色参考图缺失:3个(主角、配角A、配角B)

  • 场景参考图缺失:2个(scene_01 出租屋、scene_03 地铁站)

  • 道具参考图缺失:1个(prop_01 AR眼镜)

交互确认补全方式: 使用 ask_questions 让用户选择补全策略:

  • 选项A:「立即自动生成所有缺失资产」→ 直接调用 generate-media 补全

  • 选项B:「我稍后手动提供部分素材」→ 标记为 pending ,继续后续步骤

  • 选项C:「跳过缺失资产,仅用已有素材」→ 在 prompt 中不引用缺失资产的 (@xx_ref.png)

自动补全角色参考图(选项A时):

  • 从 character_bible.md 读取缺失角色的 AI绘图关键词(英文)

  • 调用 Gemini 图片模型生成角色参考图

  • 保存到 characters/{角色名}_ref.png

  • 更新 characters/ref_index.json ,标记 source: "generated"

自动补全场景参考图(选项A时):

  • 从 scene_bible.md 读取缺失场景的 AI绘图关键词(英文)

  • 生成四宫格合成图(正面/左45°/右45°/背面)

  • 保存到 scenes/{场景ID}_ref.png

  • 更新 scenes/ref_index.json ,标记 source: "generated"

自动补全道具参考图(选项A时):

  • 从 prop_bible.md 读取缺失道具的 AI绘图关键词(英文)

  • 生成三视图合成图(正面/侧面/俯视)

  • 保存到 props/{道具ID}_ref.png

  • 更新 props/ref_index.json ,标记 source: "generated"

更新 ref_index.json:

补全后的 ref_index.json 示例:

{ "主角": { "source": "imported", "original_file": "hero_front.png", "ref_file": "characters/主角_ref.png", "status": "ready" }, "配角A": { "source": "generated", "ref_file": "characters/配角A_ref.png", "status": "ready", "generated_date": "2026-02-23" }, "群演B": { "source": "pending", "ref_file": null, "status": "pending", "reason": "用户选择稍后提供" } }

分镜引用时的缺失处理

在第七步生成 Seedance 任务时,如某资产仍为 pending 状态:

  • 不在 prompt 头部声明该资产的 (@xx_ref.png) 引用

  • 不加入 referenceFiles 数组

  • 在 prompt 的镜头描述中,改用纯文字描述替代图片引用(降级方案)

  • 在任务的 tags 中追加 "incomplete_refs" 标记,便于后续排查

⚠️ 重要:资产补全是 MV 制作的关键步骤。缺失参考图会直接影响 Seedance 视频生成的角色一致性和场景准确性。建议优先选择「立即自动生成」,确保所有资产就绪后再进入分镜图生成和任务提交阶段。

第五步:逐段生成故事板配置

5.1 确定段数

根据歌曲时长计算段数:

  • 总段数 = ceil(歌曲总秒数 / 15)

  • 例:4分钟歌曲 = 240秒 = 16段

5.2 生成 storyboard_config.json (每段1个)

对每个 Segment(SEG01-SEGxx),生成 segments/SEGxx/storyboard_config.json :

{ "video_id": "MV-001-SEG01", "project_type": "mv", "segment": 1, "total_segments": 16, "segment_title": "段落标题", "duration_seconds": 15, "fps": 24, "resolution": "1920x1080", "aspect_ratio": "16:9", "style": "music_video", "visual_style": { "style_id": 1, "style_name": "Cinematic Film", "camera": "...", "film_stock": "...", "filter": "...", "focal_length": "...", "aperture": "...", "prompt_suffix": "..." }, "active_visual_mode": "style_a", "subtitle": false,

"music_sync": { "time_range_in_song": "0:00-0:15", "lyrics": "对应歌词文本(可含多句)", "music_section": "intro", "tempo": "slow", "emotion_curve": "building" },

"scene_refs": ["scene_01"], "prop_refs": [], "character_refs": ["主角"],

"atmosphere": { "overall_mood": "段落氛围总描述", "color_palette": ["#色值1", "#色值2", "#色值3"], "lighting": "光影描述", "weather": "天气/环境" },

"video_prompt": "English prompt for AI video generation of this segment (15s), 16:9 aspect ratio.",

"bgm": { "description": "本段音乐特征", "mood": "音乐情绪关键词", "instruments": "主要乐器", "dynamics": "力度变化(渐强/渐弱/突强等)" },

"storyboard_9grid": [ { "grid_number": 1, "time_start": 0.0, "time_end": 1.67, "scene_description": "画面描述(50字,含人物动作、表情、光影)", "lyrics_at_grid": "本格对应的歌词(如有)", "camera": { "type": "远景|中景|近景|特写", "movement": "固定|推|拉|摇|移|跟|环绕|航拍", "angle": "平视|俯视|仰视|主观", "special": "子弹时间|延时摄影|手持晃动 等(可选)" }, "characters": [ { "name": "角色名", "action": "动作描述", "expression": "表情", "position": "画面位置(左/中/右)" } ], "visual_mode": "style_a|style_b", "transition": { "type": "cut|dissolve|match_cut|glitch|shatter|none", "description": "转场描述(如有)" }, "atmosphere": "本格氛围描述", "sfx": "音效描述", "ai_image_prompt": "English prompt for this grid's image: character, composition, lighting, mood, 16:9 aspect ratio. [visual_style.prompt_suffix will be appended automatically]" }, { "grid_number": 2, "time_start": 1.67, "time_end": 3.33, "...": "同上结构" }, { "grid_number": 3, "time_start": 3.33, "time_end": 5.0, "...": "同上" }, { "grid_number": 4, "time_start": 5.0, "time_end": 6.67, "...": "同上" }, { "grid_number": 5, "time_start": 6.67, "time_end": 8.33, "...": "同上" }, { "grid_number": 6, "time_start": 8.33, "time_end": 10.0, "...": "同上" }, { "grid_number": 7, "time_start": 10.0, "time_end": 11.67, "...": "同上" }, { "grid_number": 8, "time_start": 11.67, "time_end": 13.33, "...": "同上" }, { "grid_number": 9, "time_start": 13.33, "time_end": 15.0, "...": "同上" } ] }

与短剧storyboard的关键差异:

  • 增加 music_sync 节:记录歌词、音乐段落类型、节奏信息

  • 增加 active_visual_mode :标识当前段使用的视觉风格模式

  • 增加 lyrics_at_grid :每格对应的歌词

  • 增加 visual_mode :每格的视觉风格(支持格间风格切换)

  • 增加 transition :转场类型描述(MV转场更丰富)

  • 无 part_a / part_b 划分:MV每段即一个完整的15s片段

9宫格分镜布局(与短剧一致,3行×3列,16:9比例):

| 格1 (0.0-1.67s) | 格2 (1.67-3.33s) | 格3 (3.33-5.0s) | | 格4 (5.0-6.67s) | 格5 (6.67-8.33s) | 格6 (8.33-10.0s) | | 格7 (10.0-11.67s) | 格8 (11.67-13.33s) | 格9 (13.33-15.0s) |

第六步:生成视频编号管理索引

生成 video_index.json :

{ "project_id": "MV-001", "project_type": "mv", "project_name": "作品名称", "song_title": "歌曲名", "total_segments": 16, "created_date": "2026-02-23", "status": "scripted", "videos": [ { "segment": 1, "segment_title": "段落标题", "video_id": "MV-001-SEG01", "duration": 15, "music_section": "intro", "time_in_song": "0:00-0:15", "status": "script_ready", "files": { "storyboard_config": "segments/SEG01/storyboard_config.json" } }, { "segment": 2, "video_id": "MV-001-SEG02", "...": "..." } ], "editing_guide": { "total_segments": 16, "total_videos": 16, "duration_per_segment_seconds": 15, "total_duration_seconds": 240, "grids_per_segment": 9, "total_grids": 144, "recommended_export_format": "MP4 H.264", "recommended_resolution": "1920x1080", "recommended_fps": 24, "post_production_note": "最终剪辑时需配合原曲音轨对齐每段节奏" } }

更新全局索引

更新 /data/dongman/projects/index.json ,MV项目与DM项目共存:

{ "last_updated": "2026-02-23", "total_projects": 4, "next_id": "DM-004", "next_mv_id": "MV-002", "projects": [ { "project_id": "DM-001", "...": "..." }, { "project_id": "DM-002", "...": "..." }, { "project_id": "DM-003", "...": "..." }, { "project_id": "MV-001", "project_type": "mv", "project_name": "凡人歌", "song_title": "XWOW-凡人歌", "directory": "MV-001_frc/", "segments": 16, "status": "scripted", "created_date": "2026-02-23", "video_count": 16 } ] }

第七步:生成 Seedance 任务(⚠️ 媒体生成后执行)

前置条件:必须先运行 generate-media 技能,确保以下文件已生成:

  • 角色参考图:characters/{角色名}_ref.png (或从素材导入)

  • 场景参考图:scenes/{场景ID}_ref.png (或从素材导入)

  • 道具参考图:props/{道具ID}_ref.png (或从素材导入)

  • 分镜参考图:segments/SEGxx/{project_id}-SEGxx_storyboard.png

在项目根目录生成 seedance_project_tasks.json (任务数 = 段数)。

7.1 seedance_project_tasks.json 格式

{ "project_id": "MV-001", "project_type": "mv", "project_name": "凡人歌", "song_title": "XWOW-凡人歌", "total_tasks": 16, "created_date": "2026-02-23", "tasks": [ { "prompt": "(@MV-001-SEG01_storyboard.png) 为9宫格分镜参考图,(@主角_ref.png) 为角色「主角」的参考形象。\n\n从镜头1开始,不要展示多宫格分镜参考图片。分镜图制作成电影级别的高清影视级别的视频。严禁参考图出现在画面中。每个画面为单一画幅,独立展示,没有任何分割线或多宫格效果画面。(Exclusions); Do not show speech bubbles, do not show comic panels, remove all text, full technicolor.排除项: No speech bubbles(无对话气泡),No text(无文字), No comic panels(无漫画分镜),No split screen(无分屏),No monochrome(非单色/黑白),No manga effects(无漫画特效线).正向替代:Fullscreen(全屏),Single continuous scene(单一连续场景).表情、嘴型、呼吸、台词严格同步。去掉图片中的水印,不要出现任何水印。没有任何字幕。\n\nMV-001-SEG01 「段落标题」。歌词:[对应歌词]。 氛围:氛围描述。 场景参考 (@scene_01_ref.png)。\n\n镜头1(0.0s-1.67s): ...\n镜头2(1.67s-3.33s): ...\n...\n镜头9(13.33s-15.0s): ...", "description": "MV-001 SEG01 「段落标题」 MV分镜→视频", "modelConfig": { "model": "Seedance 2.0 Fast", "referenceMode": "全能参考", "aspectRatio": "16:9", "duration": "15s" }, "referenceFiles": [ "segments/SEG01/MV-001-SEG01_storyboard.png", "characters/主角_ref.png", "scenes/scene_01_ref.png" ], "realSubmit": false, "priority": 1, "tags": ["MV-001", "SEG01"] } ] }

7.2 prompt 构建规则(MV版)

头部声明:列出分镜图和角色参考图

  • (@{project_id}-SEGxx_storyboard.png) 为9宫格分镜参考图

  • (@{角色名}_ref.png) 为角色「{角色名}」的参考形象 (仅列出本段出场角色)

标准排除指令(与短剧一致,每个prompt必须包含):

从镜头1开始,不要展示多宫格分镜参考图片。分镜图制作成电影级别的高清影视级别的视频。严禁参考图出现在画面中。每个画面为单一画幅,独立展示,没有任何分割线或多宫格效果画面。(Exclusions); Do not show speech bubbles, do not show comic panels, remove all text, full technicolor.排除项: No speech bubbles(无对话气泡),No text(无文字), No comic panels(无漫画分镜),No split screen(无分屏),No monochrome(非单色/黑白),No manga effects(无漫画特效线).正向替代:Fullscreen(全屏),Single continuous scene(单一连续场景).表情、嘴型、呼吸、台词严格同步。去掉图片中的水印,不要出现任何水印。没有任何字幕。

段落信息行 + 歌词 + 场景/道具内联引用:

{video_id} 「{segment_title}」。歌词:{lyrics}。 氛围:{atmosphere.overall_mood}。 场景参考 (@{场景ID}_ref.png)。道具参考 (@{道具ID}_ref.png)。

逐镜头描述(9条,与短剧结构一致):

镜头N(time_start-time_end): 第X段第N格:{scene_description}。{camera.movement}{camera.type}{camera.angle}。歌词:{lyrics_at_grid}。{atmosphere}。 音效:{sfx}。 (@{角色名}_ref.png){角色名}{action},表情{expression}。

  • MV中无对话,改为歌词同步描述

  • 如有风格切换,在转场格注明 [风格切换: A→B]

  • 每个角色提及时都用 (@{角色名}_ref.png) 前缀

referenceFiles 构建规则(与短剧一致):

  • 分镜参考图:segments/SEGxx/{project_id}-SEGxx_storyboard.png

  • 角色参考图:characters/{角色名}_ref.png (按出场顺序,去重)

  • 场景参考图:scenes/{场景ID}_ref.png (如有)

  • 道具参考图:props/{道具ID}_ref.png (如有)

素材导入详细规范

导入流程

用户指定文件夹路径 ↓ 扫描文件夹(递归/非递归可选) ↓ 按文件类型分类 ↓ ask_questions 让用户确认映射 ↓ 复制/链接文件到项目目录 ↓ 更新 ref_index.json

支持的素材类型

素材类型 扩展名 导入目标 说明

角色参考图 .png/.jpg/.jpeg/.webp characters/ 重命名为 {角色名}_ref.png

场景参考图 .png/.jpg/.jpeg/.webp scenes/ 重命名为 {scene_id}_ref.png

道具参考图 .png/.jpg/.jpeg/.webp props/ 重命名为 {prop_id}_ref.png

MV剧本 .md/.txt script/ 读取内容,转为 mv_script.md

其他素材 * assets/ 原名保留

素材映射交互示例

检测到以下文件:

  1. hero_front.png → 角色参考图(推测角色名:hero)
  2. city_night.jpg → 场景参考图
  3. keyboard_glow.png → 道具参考图
  4. mv_script.md → MV剧本

请确认或调整映射。

ref_index.json 格式(素材导入后)

{ "主角": { "source": "imported", "original_file": "hero_front.png", "ref_file": "characters/主角_ref.png", "import_date": "2026-02-23" } }

metadata.json 格式

{ "project_id": "MV-001", "project_type": "mv", "project_name": "凡人歌", "project_name_en": "FanRenGe", "directory": "MV-001_frc/", "song_title": "XWOW-凡人歌", "song_artist": "XWOW", "song_duration_seconds": 240, "genre": "摇滚 / 赛博朋克", "mv_type": "叙事型+概念型", "visual_style": { "mode": "dual", "style_a": { "name": "灰暗现实主义", "description": "拥挤、压抑的现代都市,冷灰/暗蓝色调,手持镜头,颗粒感", "style_id": null, "prompt_suffix": "handheld camera, film grain, desaturated cold tones, blue-grey color palette, urban isolation" }, "style_b": { "name": "东方赛博神话", "description": "宏大数字神话空间,鎏金色/霓虹蓝,平稳大气镜头,失重感", "style_id": null, "prompt_suffix": "epic cyber mythology, golden and neon blue palette, weightless atmosphere, digital particles, majestic scale" } }, "target_audience": "青年 / 科技从业者", "total_segments": 16, "segment_duration_seconds": 15, "total_duration_seconds": 240, "core_concept": "凡人之躯,比肩神迹——平凡程序员在代码世界中创造传奇", "status": "scripted", "created_date": "2026-02-23", "video_count": 16, "imported_assets": { "characters": 0, "scenes": 0, "props": 0, "other": 0 } }

双风格模式说明:当 visual_style.mode 为 "dual" 时,style_a 和 style_b 分别描述两种交替使用的视觉风格。每个 segment 的 storyboard_config.json 通过 active_visual_mode 字段指定使用哪种风格,每格通过 visual_mode 字段可进一步控制格级别的风格切换。

编号规则

作品编号

  • MV格式:MV-XXX (XXX为三位数字,从001递增)

  • 示例:MV-001 , MV-002 , MV-003

  • 与短剧 DM-XXX 序列独立计数

视频编号

  • 格式:{作品编号}-SEG{段号两位}

  • 示例:MV-001-SEG01 , MV-001-SEG16

段号编号

  • 格式:SEG{两位数字} ,从 SEG01 开始

  • 段数根据歌曲时长动态确定

内容创作规范

MV剧本要求

  • 音乐同步:每段的视觉节奏必须与音乐段落(前奏/主歌/副歌/间奏/尾声)匹配

  • 情感曲线:副歌部分的画面必须配合最强烈的视觉变化,与音乐爆点同步

  • 视觉叙事:即使是概念型MV也需要有基本的视觉叙事线(情绪弧线)

  • 卡点设计:鼓点/重拍处应对应画面硬切或关键动作

  • 转场设计:MV转场比短剧更丰富(匹配剪辑/故障效果/空间碎裂等)

  • 色彩隐喻:不同情绪段落使用不同色调,形成视觉对比

  • 15秒约束:每段聚焦一个音乐段落的核心视觉表达

分镜要求

  • 时长:每段固定15秒

  • 格数:固定9格(3×3布局,16:9比例)

  • 每格约 1.67秒

  • 9格之间需要有视觉连续性和音乐节奏逻辑

  • 如有风格切换,在对应格标注 visual_mode 和 transition

  • 歌词同步:每格标注对应的歌词(lyrics_at_grid )

故事板配置要求

  • JSON格式,可被程序直接解析

  • 包含 music_sync 节(歌曲时间映射)

  • 包含 storyboard_9grid (9宫格分镜)

  • 包含AI图像生成的英文Prompt

  • subtitle 字段始终为 false

与 generate-media 技能的兼容

generate-media 技能已支持 DM 项目,MV 项目需要以下适配(兼容已有逻辑):

目录结构适配:

  • DM 项目:episodes/EPxx/

  • MV 项目:segments/SEGxx/

  • generate-media 需同时检查两种目录结构

角色/场景/道具参考图(资产补全感知):

  • 已导入的资产(ref_index.json 中 source: "imported" ,status: "ready" )→ 跳过生成

  • 已生成的资产(source: "generated" ,status: "ready" )→ 跳过生成

  • 标记待生成的资产(status: "pending" )→ 执行生成

  • 无 ref_index.json 或条目不存在 → 按 bible 文件中的 AI 绘图关键词正常生成

  • 生成完成后更新 ref_index.json ,将 status 改为 "ready" ,source 标记为 "generated"

分镜图片命名:

  • DM 项目:{project_id}-EPxx-{A|B}_storyboard.png

  • MV 项目:{project_id}-SEGxx_storyboard.png (无A/B划分)

配置文件路径:

  • DM 项目:episodes/EPxx/storyboard_config.json → 读取 part_a / part_b

  • MV 项目:segments/SEGxx/storyboard_config.json → 直接读取根级 storyboard_9grid

generate-media 兼容检测逻辑

detect project type

metadata_path = PROJECT_DIR / "metadata.json" if metadata_path.exists(): with open(metadata_path) as f: metadata = json.load(f) project_type = metadata.get("project_type", "drama") else: project_type = "drama"

if project_type == "mv": CONTENT_DIR = PROJECT_DIR / "segments" dir_prefix = "SEG" else: CONTENT_DIR = PROJECT_DIR / "episodes" dir_prefix = "EP"

与 submit-anime-project 技能的兼容

submit-anime-project 读取 seedance_project_tasks.json ,该文件格式与短剧一致,无需额外适配。唯一区别是:

  • MV任务的 tags 中包含 SEGxx 而非 EPxx

  • MV任务无 A /B 标签

  • 提交逻辑完全复用

运行指令

用户可以通过以下方式触发本技能:

  • "制作一个MV"

  • "生成MV"

  • "produce music video"

  • "制作音乐视频"

  • "用这个剧本做MV" + 指定剧本文件

  • "根据这首歌的歌词做MV" + 提供歌词

  • "读取xx文件夹的素材做MV"

可附带参数:

  • 歌曲名/歌词:如 "为《凡人歌》制作MV"

  • 剧本文件路径:如 "使用 notes/mv reffiles/MV剧本.md"

  • 素材文件夹路径:如 "读取 /path/to/assets/ 下的角色图"

  • 视觉风格:如 "赛博朋克风格"、"双风格:现实+幻想"

  • MV类型:如 "叙事型MV"、"概念型MV"

如用户未指定素材来源,则所有素材通过 generate-media 自动生成。

执行检查清单

阶段1:MV制作完成后自查

  • index.json 全局索引已更新(含MV项目)

  • metadata.json 作品元数据已创建(project_type: "mv" )

  • mv_script.md 完整MV分镜剧本已生成

  • character_bible.md 角色设计已完成

  • scenes/scene_bible.md 场景设计已完成

  • props/prop_bible.md 道具设计已完成(如有)

  • 所有导入素材已正确复制到对应目录

  • 各 ref_index.json 已记录导入素材信息

  • 资产完整性检查已执行(第四步B)

  • 缺失资产已补全或标记为 pending (含用户确认)

  • 每个角色在 ref_index.json 中 status 为 ready 或 pending

  • 每个场景在 ref_index.json 中 status 为 ready 或 pending

  • 每个道具在 ref_index.json 中 status 为 ready 或 pending

  • SEG01-SEGxx 所有段目录均已创建

  • 每段包含 storyboard_config.json

  • 每段配置包含 music_sync 节(歌词/音乐段落同步信息)

  • 所有视频编号遵循 MV-XXX-SEGxx 命名规则

  • video_index.json 已生成

  • 所有配置标注 subtitle: false

  • 段落之间视觉叙事连贯,与音乐节奏同步

阶段3:媒体生成后,Seedance任务生成自查

  • 资产补全二次校验:所有 ref_index.json 中 status: "pending" 的条目已处理

  • 角色参考图已存在:characters/{角色名}_ref.png (导入或生成),或已确认跳过

  • 场景参考图已存在:scenes/{场景ID}_ref.png (导入或生成),或已确认跳过

  • 道具参考图已存在:props/{道具ID}_ref.png (导入或生成),或已确认跳过

  • 分镜参考图已存在:segments/SEGxx/{project_id}-SEGxx_storyboard.png

  • 项目根目录 seedance_project_tasks.json 已生成

  • 每条任务的 prompt 使用 (@文件名) 格式引用参考图

  • 每条任务的 prompt 包含标准排除指令

  • 每条任务的 prompt 包含歌词同步信息

  • 每条任务的 prompt 包含逐镜头描述(9条)

  • 每条任务的 referenceFiles 列出所有引用的图片路径

输出示例

阶段1完成后报告:

✅ MV制作完成!

📋 作品信息

  • 作品编号:MV-001
  • 歌曲:《XWOW-凡人歌》
  • MV类型:叙事型+概念型
  • 视觉风格:双风格交替
    • 风格A「灰暗现实主义」:冷灰/暗蓝,手持镜头,颗粒感
    • 风格B「东方赛博神话」:鎏金/霓虹蓝,史诗感,失重感
  • 总段数:16段(每段15秒)
  • 总时长:4分钟

📁 项目目录:/data/dongman/projects/MV-001_frc/

📊 生成内容统计

  • MV分镜剧本:1份
  • 角色设定:X个角色
  • 场景设定:X个场景
  • 道具设定:X个道具
  • 导入素材:X个(角色X + 场景X + 道具X)
  • 故事板配置:16份(每段1份,含9宫格分镜)
  • 视频总数:16个
  • 总分镜格数:144格(16段 × 9格)

🎬 视频编号范围 MV-001-SEG01 ~ MV-001-SEG16

📂 每段文件

  • storyboard_config.json → 故事板配置(含9宫格分镜 + 音乐同步)

⏭️ 下一步

  1. 运行 generate-media 技能生成参考图 + 分镜图
  2. 运行本技能第七步生成 seedance_project_tasks.json
  3. 运行 submit-anime-project 技能提交任务

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

generate-media

No summary provided by upstream source.

Repository SourceNeeds Review
General

produce-anime

No summary provided by upstream source.

Repository SourceNeeds Review
General

submit-anime-project

No summary provided by upstream source.

Repository SourceNeeds Review
General

image-gen

Generate AI images from text prompts. Triggers on: "生成图片", "画一张", "AI图", "generate image", "配图", "create picture", "draw", "visualize", "generate an image".

Archived SourceRecently Updated