最近我把自己使用的一套中文口播视频生成流程,整理成了一个可以复用的 Codex Skill,并公开到了 GitHub:
https://github.com/SJCZL/skill-video
这个 Skill 叫做 agnes-video,主要用来生成 45~60 秒的中文竖屏口播视频。
它并不只是"输入一句提示词,然后生成一段视频",而是把文案配音、画面分段、数字人口型、音画对齐、字幕生成和最终交付,串成了一套相对完整的生产流程。
为什么要做这个 Skill
在实际制作口播视频时,我遇到过几个比较典型的问题:
- 长文案直接生成视频,容易出现口型逐渐失步
- 每次生成的声音不够稳定
- 固定时长切片会把一句话切断
- 强行拉伸整段视频,会出现局部语速异常
- 多段音频拼接后,音色、语气和停顿不够连贯
- 数字人二次口型生成容易降低面部清晰度
- 项目素材、缓存和最终成片容易混在一起
所以我希望这套流程满足几个目标:
- 整段视频只使用一条连续的主配音
- 根据真实配音时长动态切分画面
- 尽量保留 Agnes 原始生成的人脸和口型画面
- 通过词级时间戳做局部音画对齐
- 自动生成字幕和标准化交付目录
- 整个流程可以被 Codex 自动执行
整体工作流程
这套 Skill 以 MiniMax 生成的完整旁白作为时间基准。
完整口播文案
↓
MiniMax 生成连续旁白和词级时间戳
↓
根据标点与真实语音时长动态切分
↓
Agnes 分段生成数字人口播画面
↓
Faster-Whisper 识别 Agnes 原始语音
↓
建立 Agnes 与 MiniMax 之间的词级时间锚点
↓
对画面进行分段、非线性变速
↓
移除 Agnes 原始音频
↓
合入完整 MiniMax 旁白
↓
生成字幕并输出最终 MP4
其中一个比较重要的设计是:不直接重新生成嘴部区域。
Agnes 生成的视频会暂时保留原始音频,系统通过 Faster-Whisper 识别这段音频,再与 MiniMax 返回的词级时间戳进行匹配。
匹配成功后,脚本会建立一组单调递增的时间锚点,对原始画面进行分段变速,使画面中的说话节奏尽可能贴近最终旁白。
这样可以减少二次生成嘴部区域带来的面部模糊、身份漂移和画质下降。
动态切分,而不是固定切片
很多视频工作流会简单地每隔 5 秒或 10 秒切一段。
这种方式虽然容易实现,但经常会把一句话从中间切断。
agnes-video 会结合以下信息生成切分方案:
- MiniMax 返回的真实配音时长
- 文案中的句号、逗号和停顿位置
- Agnes 单段视频的时长限制
- 每段口播的语义完整性
- 目标视频总时长
默认情况下,它会优先寻找接近 14 秒的自然切分点,并保证每段不超过 Agnes 的最大时长限制。
一段 45 秒的口播通常会生成约 3 个视频片段,一段 60 秒的口播通常会生成约 4 个片段。
Skill 包含什么
仓库目前包含一个 agnes-video Skill:
agnes-video/
├── SKILL.md
├── .env.example
├── agents/
│ └── openai.yaml
├── assets/
│ └── finance-adviser-profile.json
├── references/
│ └── agnes-video-v20.md
└── scripts/
├── agnes_video.py
├── minimax_tts.py
├── minimax_clone_voice.py
├── produce_talking_video.py
├── retime_visual_to_narration.py
├── timestamps_to_srt.py
└── burn_srt_overlay.py
各个脚本分别负责:
agnes_video.py:创建、查询和下载 Agnes 视频任务minimax_tts.py:生成完整旁白与词级时间戳minimax_clone_voice.py:创建经过授权的声音克隆produce_talking_video.py:编排完整视频生产流程retime_visual_to_narration.py:按照词级锚点调整画面节奏timestamps_to_srt.py:生成忠于原始文案的 SRT 字幕burn_srt_overlay.py:将字幕安全地烧录到视频画面中
安装方法
首先克隆仓库:
git clone https://github.com/SJCZL/skill-video.git
然后把 Skill 复制到 Codex 的 skills 目录:
cp -R skill-video/agnes-video ~/.codex/skills/
重新打开 Codex 后,就可以通过 $agnes-video 调用它。
环境准备
这套流程需要:
- Python 3
- FFmpeg
- Agnes Video API
- MiniMax API
- Faster-Whisper
- Pillow,用于字幕烧录
API Key 只应保存在本机环境变量或者不会提交到 Git 的本地配置中。
export AGNES_API_KEY="你的本地 Agnes API Key"
export MINIMAX_API_KEY="你的本地 MiniMax API Key"
export TALKING_VIDEO_ALIGNMENT_PYTHON="/包含 faster-whisper 的 Python 路径"
仓库中的 .env.example 只有变量名称和占位符,不包含任何真实凭据。
运行完整视频流程
准备好完整文案和人物参考图后,可以运行:
python3 scripts/produce_talking_video.py \
--script-file /absolute/path/script.txt \
--reference-image /absolute/path/presenter.png \
--project-dir /absolute/path/project-name \
--output-root /absolute/path/output \
--output-name topic-name \
--voice-profile assets/finance-adviser-profile.json \
--target-seconds 55 \
--subtitle
默认输出规格为:
- 竖屏 9:16
- 分辨率 704 × 1280
- 帧率 24fps
- 建议时长 45~60 秒
- 可选字幕版本
- MP4 格式交付
最终文件会按照日期整理:
output/
└── YYYY-MM-DD/
├── topic-name_9x16.mp4
├── topic-name_9x16_subtitled.mp4
└── topic-name.srt
API 任务、原始片段和对齐文件会保存在 projects/ 中,最终交付文件则统一放在 output/YYYY-MM-DD/ 下。
关于声音克隆
Skill 支持复用 MiniMax 的克隆声音,但声音克隆必须建立在本人声音或已经获得明确授权的声音基础上。
如果已有可用的 voice_id,应该直接复用,不需要每次重新克隆。
这样既可以减少重复操作,也能让不同视频之间的音色、情绪和语速保持一致。
安全与开源边界
在整理仓库时,我把本地生产环境和可公开的 Skill 源码做了明确区分。
以下内容不会提交到 GitHub:
- Agnes 和 MiniMax API Key
- 本机 .env 文件
- Python 虚拟环境
- 原始人物素材
- 声音训练素材
- 视频项目缓存
- API 中间结果
- 已生成的 MP4、MP3、WAV 等文件
- 私钥、证书和本机凭据
仓库只保留可复用脚本、Skill 说明、参考文档和非敏感配置模板。
写在最后
我认为 AI 视频工作流真正有价值的部分,不只是"能生成一段视频",而是能不能形成一套稳定、可重复、可检查的生产流程。
这次整理的 agnes-video Skill,主要解决的是中文口播视频中的连续配音、自然分段、口型同步、字幕生成和文件交付问题。
后续我也会继续完善这套流程,例如:
- 增加更多人物与声音配置
- 优化中文词级对齐效果
- 增加批量文案生产能力
- 完善失败任务重试机制
- 支持更多视频生成模型
- 增加成片质量自动检查
如果你也在使用 Codex、Agnes 或 MiniMax 制作中文口播视频,欢迎尝试、提交 Issue,或者一起完善这套工作流。