返回技能市场

视频制作流水线

来自 https://github.com/AIDC-AI/Pixelle-Video

版本: 1.0.1分类: 办公效率

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:

  1. 前往 阿里云百炼平台 注册并获取 API Key
  2. 在项目根目录创建 .env 文件,写入:
    DASHSCOPE_API_KEY=你的API密钥
    
  3. 安全提醒: .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 命令进行音视频处理(需用户审批)

必须遵循的工作流程

  1. 明确视频目标: 确认视频目的、目标受众、风格参考、目标时长、配音语言、是否逐张审核图片。
  2. 撰写或修改脚本: 在生成任何媒体之前完成脚本。旁白文案要简洁口语化,避免单个字幕块塞入多个从句。
  3. 创建分镜表: 包含 镜号、旁白文案、图片文件名、画面描述、是否需要截图/参考、状态 列。
  4. 生成图片提示词: 根据分镜表为每个镜头编写 generate_image 提示词。UI 截图仅作参考,最终画面必须通过 AI 生成。
  5. 使用 generate_image 生成画面: 逐镜头调用 generate_image 工具,将生成的图片整理到 output/imagegen/<项目名>/ 目录。
  6. 准备 segments.json: 存储规范化的片段列表,格式为 JSON 数组,每个对象包含 image(图片文件名)、text(旁白文案)、type(可选,"image" 或 "video")。
  7. 生成 TTS 配音: 按片段逐条生成语音(而非一整段长音频),便于对齐时间轴和局部重录。使用 scripts/dashscope_tts_segments.py 或等效方案。
  8. 渲染静态图片视频片段: 根据每段音频时长渲染对应图片的视频片段,添加微妙的 Ken Burns 运动效果(不要用泛泛的运动掩盖画面质量问题)。
  9. 生成 SRT 字幕: 基于相同的片段时长生成字幕文件。密集段落强制两行显示;去除字幕末尾标点。
  10. 合成最终视频: 合并视频和音频、烧录字幕,可选与之前完成的段落拼接。
  11. 验证成品: 报告完成前必须执行验证——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 获取完整示例。

资源覆盖机制

资源查找优先级:

  1. 项目自定义资源 (./resources/)
  2. 技能默认资源 (${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 了解字幕密度和断行规范。

评论与讨论

0/2000

还没有评论,分享你的体验吧。