使用这个技能把故事想法或分镜脚本转换成视频:先根据故事自动拆分剧情节点并估算时长,再生成多段 SeeDance 短视频,用参考图和尾帧续接维持人物一致性,最后把所有片段合成为一个 MP4 文件。
last_frame_url,优先用它作为续接参考。
return_last_frame,让下一段可以从上一段结尾继续。
generate_audio。如需无声视频,用户必须明确要求。
manifest.json,这样长任务失败后可以续跑,不会丢失已经完成的片段。
--confirm-each,每段生成后暂停,确认满意再继续下一段。
更详细的规划规则见 references/long_video_workflow.md。
使用 scripts/seedance_long_video.py 执行可重复的长视频任务。
根据故事自动创建分镜计划,并自动估算总时长:
python scripts/seedance_long_video.py plan-from-story --story story.txt --output story_plan.json
检查 story_plan.json,必要时修改人物设定、声音设定、镜头和每段动作。确认无误后标记为已审批:
python scripts/seedance_long_video.py approve-plan --plan story_plan.json
也可以直接传入故事文本:
python scripts/seedance_long_video.py plan-from-story --story "一个女孩在雨夜收到一封来自未来的信..." --output story_plan.json
如果用户明确要求接近某个时长,可以加入时长约束:
python scripts/seedance_long_video.py plan-from-story --story story.txt --output story_plan.json --target-duration 90
创建一份空白初始分镜计划:
python scripts/seedance_long_video.py init-plan --output story_plan.json --segments 8 --duration 60
不调用 API,只校验并预览请求体:
python scripts/seedance_long_video.py render --plan story_plan.json --config config.json --out-dir renders --dry-run
正式渲染并合成:
python scripts/seedance_long_video.py render --plan story_plan.json --config config.json --out-dir renders --final-output final.mp4
如果任务中断,重新运行同一条 render 命令即可续跑。脚本会读取输出目录里的 manifest.json,跳过已经成功下载的片段。
使用以下结构:
{
"project": "midnight-library",
"target_duration": 42,
"duration_policy": "auto_from_story",
"ratio": "9:16",
"resolution": "1080p",
"generate_audio": true,
"watermark": false,
"camera_fixed": false,
"approved": false,
"seed": 12345,
"reference_image": "C:/path/to/character.png",
"character_bible": "同一位中国女性,28 岁,黑色短波波头,橄榄色羊毛外套,左眼下方有一处小疤。",
"style_bible": "电影感写实惊悚风格,柔和实景光,浅景深。",
"audio_bible": "生成自然环境声、动作声和轻微配乐;人物表达默认中文语气化对白。",
"negative_prompt": "不要改变脸、不要改变服装、不要出现额外人物、不要出现文字叠加。",
"segments": [
{
"id": "s01",
"duration": 7,
"story_beat": "她在午夜后走进寂静的图书馆。",
"start_state": "站在木门外,手里拿着一把黄铜钥匙。",
"end_state": "站在图书馆里面,注意到远处门缝下透出蓝光。",
"camera": "视线高度的缓慢推进镜头。"
}
]
}
audio_bible 中。
--confirm-each。
end_state 应该成为下一段的 start_state。
共 1 个版本