视频制作流水线
来自 https://github.com/AIDC-AI/Pixelle-Video
SKILL.md
视频制作流水线
概述
使用此技能将一个创意或脚本转化为完整的静态图配音视频,产出包含 AI 生成画面、语音旁白、字幕的 MP4 成品。工作流程强调可审查的中间产物:脚本、分镜表、图片素材、TTS 音频片段、SRT 字幕、分段视频、最终合成视频。
新增特性:
- 🔄 断点恢复: 流水线状态持久化,中断后可从上次位置继续
- 🎬 转场效果: 支持 fade/wipeleft/wiperight/slideup/slidedown 等多种转场
- 🎵 BGM 混音: 自动混合背景音乐与旁白,音量可配置
- 🎥 视频片段: 支持
type: "video"的动态片段,自动处理时长对齐 - 🎤 多 TTS 供应商: 支持 DashScope 和 Edge TTS,可扩展其他供应商
- 📦 资源覆盖: 项目自定义资源优先于技能默认资源
- 📋 渲染清单: manifest.json 追踪每个片段的渲染状态
- ⚙️ 配置化: project-config.json 统一管理输出参数、字幕样式、转场、BGM
前置配置
TTS 配音(必需)
DashScope (默认)
TTS 语音合成依赖阿里云 DashScope API,使用前需要配置 API Key:
- 前往 阿里云百炼平台 注册并获取 API Key
- 在项目根目录创建
.env文件,写入:DASHSCOPE_API_KEY=你的API密钥 - 安全提醒:
.env文件包含敏感凭据,请确保已加入.gitignore,切勿提交到版本控制
也可通过环境变量设置: export DASHSCOPE_API_KEY=你的API密钥
Edge TTS (免费备选)
无需 API Key,直接使用:
python scripts/dashscope_tts_segments.py segments.json output/audio/demo-segments --provider edge --voice zh-CN-XiaoxiaoNeural
支持的语音列表: edge-tts --list-voices
视频渲染(必需)
系统需要安装 ffmpeg 和 ffprobe:
- Windows:
winget install ffmpeg或从 ffmpeg.org 下载 - macOS:
brew install ffmpeg - Linux:
apt install ffmpeg
图片/视频生成
使用 Tokeny 内置的 generate_image / generate_video 工具,需在 Tokeny 设置中配置好媒体生成渠道(API Key + 模型选择)。
核心工具
本技能充分利用 Tokeny 内置的媒体生成能力:
- generate_image: AI 图片生成(文生图/图生图),自动保存到工作空间
images/目录 - generate_video: AI 视频生成(文生视频/图生视频),自动保存到工作空间
videos/目录 - bash: 执行 ffmpeg/ffprobe 命令进行音视频处理(需用户审批)
必须遵循的工作流程
- 明确视频目标: 确认视频目的、目标受众、风格参考、目标时长、配音语言、是否逐张审核图片。
- 撰写或修改脚本: 在生成任何媒体之前完成脚本。旁白文案要简洁口语化,避免单个字幕块塞入多个从句。
- 创建分镜表: 包含
镜号、旁白文案、图片文件名、画面描述、是否需要截图/参考、状态列。 - 生成图片提示词: 根据分镜表为每个镜头编写 generate_image 提示词。UI 截图仅作参考,最终画面必须通过 AI 生成。
- 使用 generate_image 生成画面: 逐镜头调用 generate_image 工具,将生成的图片整理到
output/imagegen/<项目名>/目录。 - 准备 segments.json: 存储规范化的片段列表,格式为 JSON 数组,每个对象包含
image(图片文件名)、text(旁白文案)、type(可选,"image"或"video")。 - 生成 TTS 配音: 按片段逐条生成语音(而非一整段长音频),便于对齐时间轴和局部重录。使用
scripts/dashscope_tts_segments.py或等效方案。 - 渲染静态图片视频片段: 根据每段音频时长渲染对应图片的视频片段,添加微妙的 Ken Burns 运动效果(不要用泛泛的运动掩盖画面质量问题)。
- 生成 SRT 字幕: 基于相同的片段时长生成字幕文件。密集段落强制两行显示;去除字幕末尾标点。
- 合成最终视频: 合并视频和音频、烧录字幕,可选与之前完成的段落拼接。
- 验证成品: 报告完成前必须执行验证——
ffprobe检查流信息和时长、ffmpeg -v error -f null -解码检查、字幕行数扫描。
制作规则
- 生成的图片不要只留在默认目录,必须复制到项目的
output/imagegen/<项目名>/下。 - 文案的权威来源是
segments.json或脚本文件,而非.srt文件。 - 如果旁白文案修改了,只删除并重新生成受影响的音频片段,再重建合并音频。
- 如果字幕太满,优先缩短旁白文案,调整字号是次要手段。
- 如果某句话对普通用户不友好,改写它。例如把"Diff"改为"展示修改内容供你确认"(除非受众是技术人员)。
- 产品 UI 镜头要强调用户收益和结果物,避免把视频变成纯软件文档。
- 场景类视频要变换构图:全景、特写、俯视、分屏、UI 局部、隐喻卡片、结尾品牌卡。
- 绝对不要在没有新鲜验证证据的情况下声称视频已完成。
使用 generate_image 的最佳实践
调用 generate_image 时:
- 提示词使用中文或中英混合均可,根据模型特性选择
- 尺寸推荐
1440x810或1920x1080(16:9 横屏视频帧) - 画面下方中央留空给字幕区域
- 避免画面中出现细小可读文字
- 如需保持风格一致,可在提示词中固定风格描述前缀
- 每张图片生成后立即检查质量,不满意则调整提示词重新生成
使用 generate_video 的补充场景
对于需要动态效果的镜头(如产品演示动画、转场片段),可使用 generate_video:
- 提供清晰的动作描述提示词
- 可传入已生成的图片作为参考(图生视频)
- 生成的视频片段可直接参与最终合成
- 在
segments.json中设置"type": "video",渲染脚本会自动处理视频片段的时长对齐(trim/loop/scale)
可复用脚本
以下脚本位于本技能的 scripts/ 目录,可复制到项目中使用:
render_static_video.py
从 segments.json 和 PCM 音频构建 WAV、视频片段、SRT、带字幕的分段 MP4 及可选的合并 MP4。
新特性:
- 断点恢复:
--resume从上次中断位置继续 - 转场效果:
--transition fade或--transition wipeleft - BGM 混音:
--bgm resources/bgm/default.mp3 --bgm-volume 0.15 - 配置文件:
--config project-config.json统一管理所有参数 - 视频片段: 自动检测
segments.json中的type: "video"并处理 - 跨平台字体: 自动检测 Windows/macOS/Linux 系统字体
示例:
# 基础渲染
python scripts/render_static_video.py segments.json output/audio/demo-segments output/video/demo
# 使用配置文件 + 断点恢复
python scripts/render_static_video.py segments.json output/audio/demo-segments output/video/demo --config project-config.json --resume
# 添加转场和 BGM
python scripts/render_static_video.py segments.json output/audio/demo-segments output/video/demo --transition fade --bgm resources/bgm/chill.mp3 --bgm-volume 0.2
dashscope_tts_segments.py
使用 DashScope 或 Edge TTS 按片段生成 PCM 音频。
新特性:
- 多供应商支持:
--provider dashscope或--provider edge - 资源路径解析:
--project-root指定项目根目录,自动查找自定义资源 - 增量生成: 已存在的 PCM 文件会跳过,除非使用
--force
示例:
# DashScope (默认)
python scripts/dashscope_tts_segments.py segments.json output/audio/demo-segments
# Edge TTS (免费)
python scripts/dashscope_tts_segments.py segments.json output/audio/demo-segments --provider edge --voice zh-CN-YunxiNeural
# 指定项目根目录(用于资源路径解析)
python scripts/dashscope_tts_segments.py segments.json output/audio/demo-segments --project-root .
check_subtitles.py
检查三行字幕、超长行、不良断行等问题。
新特性:
- 可配置的不良断行模式:
--config project-config.json从配置文件加载subtitle.bad_line_patterns
示例:
# 使用默认规则
python scripts/check_subtitles.py output/video/demo/subtitles.srt
# 使用自定义规则
python scripts/check_subtitles.py output/video/demo/subtitles.srt --config project-config.json --max-chars 18
每个脚本都支持 --help。优先调整参数而非从头重写脚本。
配置文件系统
project-config.json
在项目根目录创建 project-config.json 统一管理所有参数:
{
"video": {
"resolution": "1920x1080",
"fps": 30,
"crf": 18,
"pixel_format": "yuv420p",
"codec": "libx264"
},
"audio": {
"sample_rate": 24000,
"channels": 1
},
"tts": {
"provider": "dashscope",
"voice": "longxiaochun",
"sample_rate": 24000
},
"subtitle": {
"font_size": 16,
"font_color": "&H00FFFFFF",
"outline_color": "&H00000000",
"outline_width": 2,
"max_chars_per_line": 20,
"max_lines": 2,
"bad_line_patterns": [
"^Agent$",
"^工作台$"
]
},
"transition": {
"enabled": true,
"type": "fade",
"duration": 0.5
},
"bgm": {
"enabled": false,
"file": "resources/bgm/default.mp3",
"volume": 0.15
},
"resources": {
"search_paths": [
"./resources",
"${SKILL_DIR}/resources"
]
}
}
参考 project-config.example.json 获取完整示例。
资源覆盖机制
资源查找优先级:
- 项目自定义资源 (
./resources/) - 技能默认资源 (
${SKILL_DIR}/resources/)
例如,如果项目中存在 resources/bgm/custom.mp3,则优先使用该文件,而非技能默认的 resources/bgm/default.mp3。
断点恢复
渲染过程中会生成 pipeline-state.json 和 manifest.json:
- pipeline-state.json: 记录当前流水线阶段(init → pcm_convert → duration_calc → srt_gen → render_clips → concat_clips → add_audio → burn_subtitles → mix_bgm → finalize → complete)
- manifest.json: 记录每个片段的渲染状态(pending/rendered/failed)
如果渲染中断,使用 --resume 参数从上次位置继续:
python scripts/render_static_video.py segments.json output/audio/demo-segments output/video/demo --resume
推荐文件布局
项目目录/
project-config.json # 项目配置(可选)
script.md # 脚本文案
shotlist.md # 分镜表
segments.json # 规范化片段列表(权威来源)
screenshots/ # UI 截图参考
resources/ # 项目自定义资源
bgm/ # 背景音乐
fonts/ # 自定义字体
output/
imagegen/<视频名>/ # AI 生成的图片
audio/<视频名>-segments/ # TTS 音频片段
video/<视频名>/ # 渲染产物
pipeline-state.json # 流水线状态
manifest.json # 渲染清单
参考文档
- 阅读
references/workflow.md了解端到端检查清单和 LLM 结构化输出验证指引。 - 阅读
references/prompting.md了解图片提示词编写指南。 - 阅读
references/subtitles.md了解字幕密度和断行规范。
评论与讨论
还没有评论,分享你的体验吧。