清明上河图视频生成项目
基于华为云码道(CodeArts)智能编码助手与Seedance 2.5视频生成模型,复刻清明上河图原貌,让千年古画"活"起来。
项目简介
本项目使用 AI 视频生成技术,将静态的清明上河图(或类似宋代市井风格画作)转化为动态视频,重现宋代汴京的市井繁华景象。通过精心设计的提示词(Prompt),让画面中的人物、船只、旗帜、炊烟等元素依次"苏醒",营造穿越时空回到宋代的沉浸式体验。
核心工作流:
古画图片 ──→ CodeArts 辅助编写脚本 ──→ Seedance 2.5 图生视频 ──→ 动态视频输出 ↑ 精心设计的提示词(Prompt)项目特点
- 图生视频 + 文生视频双模式:既能基于古画图片生成动态视频,也能纯文字描述生成宋代场景
- 预设提示词模板:内置 5 套针对清明上河图优化的提示词,开箱即用
- 批量分镜生成:通过 JSON 配置文件批量提交多分镜任务,一次性生成系列视频
- 任务管理:支持任务查询、失败重试、执行报告导出
- 面向教学:详细的实操步骤,适合大学生课堂演示与动手实践
目录结构
qingming-shanghe-tu-video/ ├── README.md # 本文档(实操指导) ├── requirements.txt # Python 依赖 ├── .env.example # 环境变量配置示例 ├── .gitignore # Git 忽略规则 ├── LICENSE # MIT 开源许可证 ├── src/ # 源代码 │ ├── generate_video.py # 核心视频生成脚本(文生/图生/模板/查询) │ ├── batch_generate.py # 批量生成脚本 │ └── prompts/ # 预设提示词模板 │ ├── qingming_panorama.json # 市井全景苏醒 │ ├── qingming_bridge.json # 拱桥穿越特写 │ ├── qingming_river.json # 河上船只航行 │ ├── qingming_street.json # 街市烟火 │ └── qingming_text_only.json # 纯文生视频全景 ├── examples/ # 示例 │ ├── run_examples.ps1 # PowerShell 一键演示脚本 │ └── batch_config.json # 批量生成配置示例 ├── docs/ # 补充文档 │ ├── api-reference.md # API 参数参考 │ └── troubleshooting.md # 常见问题排查 └── assets/ # 素材目录(放入古画图片) └── .gitkeep快速开始
第一步:环境准备
1. 安装 Python 3.10+
python--version# 如果未安装,前往 https://www.python.org/downloads/ 下载2. 安装依赖
cd qingming-shanghe-tu-video pip install-r requirements.txt第二步:获取 API Key
- 注册/登录 火山引擎控制台
- 进入方舟(Ark)平台:https://console.volcengine.com/ark
- 在左侧菜单找到「API Key 管理」→ 创建 API Key
- 在「模型广场」中找到 Seedance 视频生成模型,记录模型 ID(如
doubao-seedance-1-0-pro-250528)
第三步:配置环境变量
临时配置(当前窗口有效):
$env:VOLC_API_KEY="你的方舟API Key"$env:SEEDANCE_MODEL_ID="doubao-seedance-1-0-pro-250528"永久配置(推荐):
[Environment]::SetEnvironmentVariable("VOLC_API_KEY","你的方舟API Key","User")[Environment]::SetEnvironmentVariable("SEEDANCE_MODEL_ID","doubao-seedance-1-0-pro-250528","User")# 设置后重启 PowerShell 窗口生效验证配置:
$env:VOLC_API_KEY# 应显示你的 API Key$env:SEEDANCE_MODEL_ID# 应显示模型 ID第四步:准备素材
将清明上河图图片放入assets/目录:
# 例如将图片复制到 assets 目录Copy-Item"你的图片路径\qingming.webp"".\assets\"支持的图片格式:.jpg、.jpeg、.png、.webp、.bmp、.gif
第五步:生成视频
方式一:使用预设模板(推荐新手)
# 查看可用模板python src/generate_video.py templates# 使用"市井全景苏醒"模板生成视频python src/generate_video.py template qingming_panorama `--image./assets/qingming.webp `-o./output/panorama.mp4方式二:图生视频(自定义提示词)
python src/generate_video.py image `-p"镜头缓缓拉近石拱桥,桥上行人的衣袂在微风中飘动,河面波光粼粼,一艘木船从桥下穿过。色调保持古画暖黄质感。"`--image./assets/qingming.webp `-o./output/bridge.mp4 `--ratio 16:9 `--duration 10方式三:文生视频(不依赖图片)
python src/generate_video.py text `-p"宋代汴京清晨,薄雾笼罩河面,木船缓缓航行,河岸商铺幌旗招展,行人往来如织,炊烟袅袅,阳光穿透薄雾洒下暖色柔光,工笔画风格。"`-o./output/text_scene.mp4 `--ratio 16:9 `--duration 5方式四:批量生成(多分镜系列)
# 1. 编辑批量配置文件# 打开 examples/batch_config.json,按需修改提示词和图片路径# 2. 执行批量生成python src/batch_generate.py--config examples/batch_config.json# 3. 如果有任务失败,可以重试python src/batch_generate.py--config examples/batch_config.json--retry-failed方式五:一键演示(运行所有示例)
# 运行 PowerShell 演示脚本,依次执行所有示例.\examples\run_examples.ps1第六步:查看结果
生成的视频保存在output/目录:
lsoutput/# panorama.mp4 - 市井全景苏醒# bridge.mp4 - 拱桥穿越特写# text_scene.mp4 - 纯文生视频# scene_01_panorama.mp4 - 批量生成结果# ...命令参考
generate_video.py 命令一览
| 命令 | 说明 | 示例 |
|---|---|---|
text | 文生视频 | python generate_video.py text -p "描述" -o out.mp4 |
image | 图生视频 | python generate_video.py image -p "描述" --image img.jpg -o out.mp4 |
template | 模板生成 | python generate_video.py template qingming_panorama --image img.jpg -o out.mp4 |
templates | 列出模板 | python generate_video.py templates |
query | 查询任务 | python generate_video.py query -t cgt-xxxx |
常用参数
| 参数 | 说明 | 可选值 |
|---|---|---|
--prompt/-p | 视频描述提示词 | 任意中文/英文描述 |
--image | 本地图片路径 | .jpg.png.webp等 |
--image-url | 图片 URL | https://... |
--output/-o | 输出文件路径 | 任意.mp4路径 |
--ratio | 宽高比 | 16:9/9:16/1:1 |
--duration | 视频时长(秒) | 5/10(取决于模型支持) |
--watermark | 添加水印 | 无参数,加上即生效 |
提示词设计指南
好的提示词是生成高质量视频的关键。以下是针对清明上河图主题的设计要点:
1. 镜头运动
| 运镜方式 | 提示词写法 | 适用场景 |
|---|---|---|
| 缓推进 | “镜头缓缓向前推进” | 全景苏醒、整体展示 |
| 平移 | “镜头沿街道缓缓平移” | 街市长卷展示 |
| 仰拍上升 | “从桥下水面仰拍升至桥面” | 拱桥穿越特写 |
| 跟随 | “镜头跟随一艘木船前行” | 河上船只航行 |
2. 动态元素清单
提示词中应包含 3-5 个动态元素,避免过多导致画面混乱:
- 自然元素:水波荡漾、柳枝摇曳、炊烟升起、薄雾流动
- 人物动态:行走、奔跑、交谈、叫卖、划船、挑担
- 物体动态:船只航行、幌旗飘动、衣袂飘动
3. 色调控制
色调关键词: - 主色:米黄、赭石、土褐、暖黄 - 点缀:青、蓝、红、绿 - 水面:淡蓝灰、淡青灰 - 光线:柔和暖阳、清晨薄雾、明暗交错4. 提示词模板结构
{"title":"模板标题","description":"模板说明","mode":"image","prompt":"完整的视频描述提示词...","ratio":"16:9","duration":10,"watermark":false}华为云码道(CodeArts)在项目中的角色
本项目从构思到实现,全程使用华为云码道(CodeArts)智能编码助手辅助开发:
| 环节 | CodeArts 的作用 |
|---|---|
| 需求分析 | 通过对话式交互,梳理项目需求、确定技术方案 |
| 代码编写 | 自动生成 API 调用脚本、批量生成脚本、提示词模板 |
| 提示词设计 | 根据古画画面分析结果,生成针对性的视频提示词 |
| 调试优化 | 语法检查、错误排查、参数调整 |
| 文档生成 | 自动编写 README、API 参考文档、故障排查指南 |
| 项目管理 | 项目目录结构规划、Git 配置文件生成 |
体验 CodeArts:访问华为云码道控制台,创建智能编码会话,即可开始 AI 辅助开发。
课堂演示建议
演示流程(约 30 分钟)
| 时间 | 内容 | 操作 |
|---|---|---|
| 5 min | 项目背景介绍 | 讲解清明上河图与 AI 视频生成 |
| 5 min | 环境配置演示 | 现场配置 API Key、安装依赖 |
| 10 min | 核心功能演示 | 运行图生视频、展示生成过程 |
| 5 min | 提示词讲解 | 分析提示词设计要点 |
| 5 min | 学生动手实践 | 修改提示词、尝试生成 |
学生实践任务
- 基础任务:使用预设模板生成一段清明上河图动态视频
- 进阶任务:修改提示词,改变镜头运动方向和动态元素
- 挑战任务:设计 3 个分镜提示词,用批量生成脚本制作系列视频
- 创意任务:选择其他古画(如千里江山图),编写提示词生成动态视频
评估标准
| 维度 | 评分要点 |
|---|---|
| 功能完成 | 视频成功生成并能播放 |
| 提示词质量 | 描述具体、动态元素丰富、色调控制合理 |
| 创意性 | 镜头设计有新意、场景选择独特 |
| 技术理解 | 能解释 API 调用流程、参数含义 |
常见问题
Q: 提示词应该用中文还是英文?Seedance 模型支持中英文提示词。本项目的预设模板使用中文,因为中文能更精确地描述中国古画的意境和色调。你也可以尝试英文提示词对比效果。
Q: 视频生成需要多长时间?通常 5 秒视频需要 1-3 分钟,10 秒视频需要 2-5 分钟,具体取决于模型负载。脚本默认轮询超时为 600 秒(10 分钟),可通过环境变量SEEDANCE_POLL_TIMEOUT调整。
本地图片会转为 base64 编码发送,建议图片大小不超过 10MB。过大的图片可能导致请求超时。如图片过大,可先用工具压缩。
Q: 生成失败怎么办?- 检查 API Key 和模型 ID 是否正确
- 查看错误信息中的 HTTP 状态码和响应内容
- 参考
docs/troubleshooting.md排查 - 网络 问题可适当增加轮询超时
将--ratio参数改为9:16即可:
python src/generate_video.py image-p"..."--image img.jpg-o out.mp4--ratio 9:16更多问题请参考 docs/troubleshooting.md。
技术栈
| 技术 | 说明 |
|---|---|
| Python 3.10+ | 编程语言 |
| requests | HTTP 请求库 |
| Seedance 2.5 | 字节跳动视频生成模型(火山引擎方舟平台) |
| 华为云码道 CodeArts | AI 智能编码助手(项目开发工具) |
贡献指南
欢迎提交 Issue 和 Pull Request:
- Fork 本仓库
- 创建特性分支:
git checkout -b feature/new-prompt - 提交更改:
git commit -m "添加新提示词模板" - 推送分支:
git push origin feature/new-prompt - 创建 Pull Request
欢迎贡献的内容:
- 新的提示词模板(不同古画、不同镜头风格)
- 代码优化与 Bug 修复
- 文档翻译与改进
- 新功能建议(如视频拼接、配乐等)
致谢
- 清明上河图:北宋画家张择端绘制的传世名画,本项目的灵感来源
- 火山引擎方舟平台:提供 Seedance 视频生成模型 API
- 华为云码道 CodeArts:AI 智能编码助手,辅助本项目开发