外观
图片、TTS 与视频制作
1. 解决什么问题
教材通过审核后,需要把课文转为可交付素材。制作耗时、可能付费,且视频依赖图片和音频,因此必须把模型计划、后台调度和外部服务调用分开,按内容版本检查结果。
2. 原理与术语
TTS 把文本合成为语音;FFmpeg 合并媒体轨道,不负责理解教材。内容指纹表示制作输入,文件 SHA-256 用于完整性核对;两种哈希用途不同。素材 receipt 记录结果路径、校验值与服务信息。
3. 输入输出与依赖
producer 为每个 lesson 块请求 image、audio、video。schedule_media 创建任务,视频 dependencies 指向同块图片与音频任务。worker 只有在依赖 succeeded 后才领取视频,最终产出 PNG、WAV、MP4 与 SRT。
4. 容易混淆
演示图片是明确带标记的占位图,演示 WAV 是静音,并非真实生图或 TTS。视频则实际使用 FFmpeg 合成。字幕是可选择的软字幕轨道,按句平均分配时间,不是语音强制对齐,也不保证播放器默认显示。
5. 最小示例
下面运行实际演示素材函数,只验证文件格式:
python
import io, wave
from app.media import demo_bytes
raw=demo_bytes('audio',{'id':'example','text':'你好'},'a'*64)
with wave.open(io.BytesIO(raw),'rb') as f:
assert f.getframerate()==16000
assert f.getnframes()==480006. 实际适配器
external_bytes 对接 /images/generations 和 /audio/speech。图片要求返回 b64_json;仅给 URL 的服务需要专用适配,不能悄悄下载未知地址。TTS 请求 WAV。真实模式缺密钥或服务失败会保留错误,不替换演示结果。
7. 源码与数据结构
阅读 system/app/media.py::media_identity/schedule_media/external_bytes/make_video/run_media/complete_delivery。tasks 保存依赖与目标版本;assets 按输入指纹去重复用;receipt 与文件先原子写入,再核对落库。delivery_zip 输出教材、来源、规则、评审和素材清单。
8. 取舍与局限
静态图片配音视频可本地重现,成本和控制性较好,但没有角色动作、口型同步或生成式动态画面。当前字幕内容为中文原文;译文变化会使视频指纹变化,却不意味着自动生成对应语言字幕。素材语义是否忠于课文仍需要人工检查。
9. 实验与验收
完成一次人工通过,等待 delivered。在 system 目录检查媒体工具:
bash
docker compose exec api ffmpeg -version
docker compose exec api ffprobe -version
curl -s -H "X-API-Key: ${LAB_API_KEY:-}" \
"http://127.0.0.1:8000/api/jobs/$JOB_ID/delivery" -o delivery.zipJOB_ID 必须替换为已交付任务 ID。解压后核对 manifest 版本、图片标记、音轨和字幕轨道;演示音频静音是预期边界。真实验收还必须试听发音、查看图片、记录请求 ID 与实际服务参数。
10. 故障排查
视频等待先看依赖状态;FFmpeg 失败查编码器和输入文件;下载失败查当前版本是否批准且任务齐全。遇到图片超时不能直接断定没计费,应进入结果核对,详见可靠执行。
11. 面试题与追问
问:视频是模型生成的吗? 当前是程序合成图片、配音与字幕。追问:为什么不用大模型调度依赖? 依赖可确定,交给程序更可验证。再追问:旧音频能否复用? 需要输入指纹相同、文件有效,并为新版本建立正确任务关系。
STAR 应用:假设实验场景,R 为应核对的证据
| 对应 | S:情境 | T:目标 | A:行动 | R:验收证据 |
|---|---|---|---|---|
| 主问 | 教材需导出视频 | 提供可复现媒体交付 | 合成图片、音频和软字幕 | 检查MP4轨道,不宣称生成式动态视频 |
| 追问一 | 视频早于音频执行 | 保证依赖完成 | 由程序检查dependencies状态 | 依赖未成功时视频不被领取 |
| 追问二 | 小幅修改后希望复用资源 | 保持版本正确且减少重复 | 检查输入指纹与文件校验值 | 新版本关联有效素材,变化项重新生成 |
这些是设计讨论的参考表达,实际执行前不能改写为已取得的历史成果。
12. 官方资料与版本
图片接口、TTS、FFmpeg 官方手册源码。核验日期 2026-11-03。FFmpeg 的实际构建版本由容器命令和验收报告记录;服务模型以配置为准。