Skip to content

AI 视频生产工作流项目

分册导航: 本文负责端到端架构、数据模型、状态机和媒体底座;只有语音恢复时间线、口播一致性、首轮镜头可用率、无穿帮拼接、平台规格、模型横评和投放增长,见实战问题与增长篇

目录

1. 项目摘要

  • 项目类型:学习型生产项目;
  • 项目目标:将主题、文案或已有素材自动加工为可预览、可局部返工、可验收的视频;
  • 典型输入:主题、目标受众、平台、时长、画幅、风格、语言、已有图片或视频、品牌规范;
  • 典型输出:MP4 成片、封面、字幕文件、分镜清单、素材清单、质检报告和生成审计记录;
  • 核心链路:需求 → 脚本 → 分镜 → 素材 → 配音字幕 → 时间线 → 合成 → 质检 → 局部返工 → 发布;
  • 核心难点:长任务可靠执行、镜头一致性、音画同步、编码兼容、局部重试、成本控制和内容合规;
  • 项目定位:不是调用一次视频生成 API,而是构建一套可恢复、可追踪、可评测的 AI 视频生产系统。

1.1 面试结论

AI 视频项目的技术含量主要不在“调用哪个模型”,而在如何把不稳定、昂贵、长耗时的生成能力组织成可控工作流:以镜头为最小生产和重试单元,用持久化状态机保证任务可恢复,用统一时间线解决音画字幕同步,用技术质检和语义质检共同守住交付质量。

1.2 面试官为什么问

这个项目可以同时考察:

  • 是否真正理解多模态模型,而不只是会写 Prompt;
  • 是否具备异步任务、状态机、幂等和失败恢复能力;
  • 是否理解视频编码、时间戳、帧率、音频和字幕;
  • 是否会设计评测、监控、成本和安全门禁;
  • 是否能从业务目标反推架构,而不是堆砌模型和框架。

2. 背景、目标与边界

2.1 示例业务场景

为知识科普、产品介绍、儿童故事或内部培训自动生产短视频。用户提交主题和要求后,系统完成脚本、分镜、素材生成、配音、字幕、合成和质检;用户可以只重做失败镜头,而不必整条视频重新生成。

本文描述的是建议方案,不代表已经上线的真实业务。项目数据量、准确率、耗时、成本和收益必须通过实际实现与测试获得,不得把规划值当作实测结果。

2.2 功能目标

  1. 支持文本主题、结构化脚本和已有素材三种入口;
  2. 自动生成脚本、角色设定、视觉规范和分镜;
  3. 支持图片、视频、配音、音乐、音效和字幕资产;
  4. 能查看总进度、阶段进度、失败原因和成本;
  5. 支持镜头级预览、编辑、重新生成和版本回退;
  6. 自动完成编码、画幅、时长、响度和字幕等技术质检;
  7. 使用视觉模型或人工门禁完成内容一致性和安全审核;
  8. 导出平台要求的成片和配套文件。

2.3 非功能目标

  • 可恢复:服务重启或供应商超时后能从检查点继续;
  • 可控重复:内部请求、回调和状态迁移必须幂等;外部生成优先使用供应商原生幂等 Token,提交结果不确定时先对账。供应商不支持去重或查询时只能承认至少一次语义,不能承诺绝不重复生成或扣费;
  • 可观测:每个镜头、模型调用和渲染步骤均可追踪;
  • 可替换:模型供应商通过适配层接入,不把业务状态绑定到供应商状态;
  • 可控成本:生成前可估算,执行中有预算和重试上限;
  • 可审计:保留素材来源、授权、Prompt 版本、模型版本和审核记录;
  • 可局部返工:一个镜头失败不触发整条流水线重跑。

2.4 明确边界

  • 第一版优先做模板化短视频,不直接挑战长电影级自由编辑;
  • 第一版只支持有限画幅、帧率、编码和字幕模板;
  • AI 负责生成建议和素材,不绕过版权、肖像、声音授权和人工发布门禁;
  • 业务授权通过不等于供应商能力可用;提交前必须按供应商、模型、区域和版本执行能力策略门禁;
  • 发布到外部平台属于独立适配器,生成完成不等于发布成功;
  • 模型效果会随供应商和版本变化,项目必须用评测集而不是演示案例判断质量。

截至 2026-07-10,OpenAI 视频 API 的当前限制包括:不支持生成真人;带真人脸的输入图片会被拒绝;人类肖像角色上传默认受限;受版权保护的角色和音乐会被拒绝。限制会变化,接入时必须重新核对目标供应商官方策略。即使用户拥有某项授权,也不能绕过供应商硬限制;系统应在付费调用前给出可解释拒绝或路由到合规且支持的方案。

3. 端到端工作流

3.1 总体流程

图 1:镜头级 AI 视频生产与局部返工闭环

图表加载中…

替代文本: 任务先生成结构化脚本和分镜,图片/视频与音频资产按镜头并行生产,统一时间线合成低清预览;质检失败只回到对应镜头,成功后才高清渲染和发布。

读图结论: 镜头是生成、质检和重试的最小单元,低清预览与局部返工用于控制高成本生成的不确定性。

3.2 步骤一:需求规范化

输入必须先转为结构化约束:

  • 目标平台:横屏、竖屏或方形;
  • 总时长和单镜头时长范围;
  • 目标受众、语言和表达语气;
  • 视觉风格、角色、品牌色和禁用元素;
  • 是否允许真人、声音克隆、外部素材或敏感主题;
  • 业务授权是否完备,以及目标供应商当前是否支持该人物、参考图、角色、音乐和区域;
  • 输出分辨率、帧率、字幕样式和音频要求;
  • 预算、最高重试次数和交付时间。

需求不完整时先进入 WAITING_FOR_INPUT,不能让模型擅自补齐版权、人物身份或发布范围等高风险信息。

3.3 步骤二:生成结构化脚本

LLM 输出必须经过 Schema 校验,而不是直接保存自然语言。建议脚本至少包含:

  • 标题、核心观点和目标情绪;
  • 旁白文本及预估时长;
  • 镜头列表和镜头顺序;
  • 每镜头的主体、动作、场景、景别、运镜、风格和禁止项;
  • 所需图片、视频、配音、音乐和音效;
  • 字幕文本和重点词;
  • 事实来源与需要人工确认的内容。

校验失败时只修复无效字段;事实、版权或人物信息不确定时转人工确认。

3.4 步骤三:分镜与时间预算

系统根据最终配音或预估语速,为每个镜头分配时间范围:

text
时间线总时长 = max(所有已裁剪片段的结束时间)
顺序镜头使用重叠转场时:
总时长 = 片头 + Σ镜头时长 - Σ重叠转场时长 + 片尾
镜头时长 >= 旁白时长 + 必要停顿

只有把转场做成独立插入片段时,才把它的时长正向加入;常见 Crossfade 会让相邻镜头重叠,因此要扣除重叠区间。最终以逻辑时间线上所有视频、音频、字幕和图层片段的最大结束时间为准,不能仅靠镜头时长相加。以 FFmpeg xfade 为例,输入需先规范到相同分辨率、Pixel Format、帧率与 Time Base,再按 durationoffset 计算重叠区间。

分镜阶段同时生成角色设定卡和视觉规范(Style Bible),锁定角色外观、服装、色彩、光线、镜头语言和负面约束,避免每个镜头独立发挥。

教学插图:共享角色约束与跨镜头身份漂移

共享角色设定的镜头保持身份锚点,独立生成的对照镜头出现围巾、徽章、天线和轮廓漂移

替代文本: 左侧角色设定卡固定原创机器人角色的橙色围巾、白色星形徽章、左侧短天线和蓝白配色;上排不同景别、机位和光线仍保留这些身份锚点,下排独立生成则分别出现围巾变色、徽章丢失、天线换边和身体轮廓变化,并标出逐镜质检结果。

读图结论: 共享 Style Bible、参考资产和结构化镜头约束可以降低跨镜头漂移概率,但不能保证一致;系统仍需把身份锚点转成可检查规则,逐镜质检并局部返工。

景别、角度和光线的正常变化不等于身份漂移;角色一致性也只是质量维度之一,动作连续性、时序、语义、字幕、声音和技术规格仍需单独验收。

3.5 步骤四:镜头资产生成

shot_id 为最小任务单位并行生成。每次模型调用记录:

  • 内部业务意图 ID、供应商原生幂等 Token(若支持)、供应商任务 ID 和提交状态;
  • Prompt 模板版本、最终 Prompt 和参考资产;
  • 模型、参数、Seed、分辨率和目标时长;
  • 提交、开始、结束、失败和下载时间;
  • Token、时长、次数或供应商账单项;
  • 原始响应、错误码和重试次数。

视频生成通常是异步任务,应使用 Webhook 接收完成事件,并用轮询或定时核对作为兜底。Worker 在“供应商已受理、内部任务 ID 尚未落库”之间崩溃时,状态必须进入 SUBMISSION_UNKNOWN / RECONCILING,禁止盲目重新提交;优先按原生幂等 Token、Client Request Key 或供应商任务列表对账。若供应商既不能去重也不能查询,只能人工对账或补偿,并明确保留重复计费风险。供应商返回的临时地址必须及时转存到项目对象存储,不能把临时 URL 当作永久资产。

3.6 步骤五:配音、音乐与字幕

推荐先确定最终旁白音频,再进行字幕和镜头精确对齐:

  1. TTS 生成配音并记录文本版本;
  2. 使用 STT 或强制对齐获得句级、词级时间戳;
  3. 根据停顿和语义切分字幕;
  4. 音乐按旁白区间做 Ducking;
  5. 音效绑定镜头或具体时间点;
  6. 字幕在最终时间线下重新导出,避免转码后漂移。

3.7 步骤六:时间线与合成

先生成与渲染器无关的 timeline.json,再由 FFmpeg 或 Remotion 消费。时间线至少包含:

  • 输出画幅、帧率、时长和音频参数;
  • 每个镜头的入点、出点、裁剪、缩放、速度和转场;
  • 配音、音乐和音效轨道;
  • 字幕片段、字体、位置和安全区;
  • 封面、片头、片尾和品牌图层;
  • 所有资产的内容哈希和版本。

先渲染低清预览,质检通过后再做高清成片,可以显著减少高成本返工。

3.8 步骤七:双层质检

技术质检检查文件是否可交付:

  • 容器、Codec、Pixel Format、分辨率和帧率;
  • 音视频流、总时长、黑帧、静音和损坏帧;
  • 字幕越界、乱码、重叠和字体缺失;
  • 响度、峰值、采样率和声道;
  • 音画时间戳、首帧速度和文件大小。

语义质检检查内容是否正确:

  • 画面是否符合分镜;
  • 同一角色、场景和品牌元素是否一致;
  • 旁白、字幕和画面表达是否对应;
  • 是否存在事实错误、敏感内容或授权风险;
  • 是否需要人工导演复核。

3.9 步骤八:局部返工与交付

质检结果必须绑定到具体 shot_id、资产或时间区间。返工时仅失效受影响节点及其下游缓存,例如:

  • 改旁白文本:重做配音、字幕、时间线和最终渲染;
  • 改某个镜头 Prompt:只重做该镜头、预览和最终渲染;
  • 改字幕样式:复用所有生成素材,只重做渲染;
  • 改画幅:重新计算裁剪、安全区和模板,不默认重做全部模型素材。

教学插图:镜头级生产与局部返工

脚本拆成多个镜头并行生成素材,质检失败时只返工问题镜头

替代文本: 脚本先被拆成多个分镜;各镜头分别生成画面、配音和字幕并汇入时间线。质检发现镜头 4 不合格后,只将镜头 4 返回生成环节,其他合格镜头继续复用,最终重新合成并输出成片。

读图结论:shot_id 作为生成、质检和重试的最小单元,才能把一次局部质量问题限制在局部资产及其必要下游,而不是让整条高成本链路全部重跑。

插图表达的是逻辑依赖,不代表所有返工都只影响一个文件;实际失效范围仍由资产哈希、时间线引用和下游缓存依赖共同决定。

4. 系统架构与技术栈

4.1 逻辑架构

图:架构|AI 视频生产系统组件边界与可靠启动链路

图表加载中…

替代文本: API 将业务任务与 Outbox 原子写入 PostgreSQL,Dispatcher 以固定 Workflow ID 启动 Temporal;规划、生成、渲染和质检 Worker 通过模型适配层、对象存储和媒体工具协作,整条链写入可观测系统。

读图结论: 可靠性边界在“数据库任务 + Outbox + 固定 Workflow ID”,模型生成、媒体渲染和质检则按资源类型拆成可恢复 Worker。

创建任务时不能在一个请求里无保护地“双写 PostgreSQL + 启动 Temporal”。API 短事务先写 VideoJob 与 Outbox 事件并提交;Dispatcher 以 workflow_id = job_id 启动工作流,遇到同 ID 时按“复用已存在 Workflow、拒绝不同业务意图”的策略处理。Outbox 至少一次投递,启动动作和首个 Activity 都必须幂等;扫描器负责补发未发布事件,从而修复“有任务无工作流”。另一种可选边界是以 Workflow 为事实源,并让数据库写入成为幂等 Activity,但两种事实源不能混用。

4.2 技术调用流程

图:技术调用流程|视频任务启动、供应商提交与结果对账

替代文本: 用户创建视频任务后,API 在 PostgreSQL 同一事务写入任务与 Outbox;Dispatcher 领取事件,以固定 Workflow ID 请求 Temporal 启动,收到 started/already-exists 确认后才标记 Outbox 已发布,启动不可用时保留事件等待补偿。生成 Worker 再通过供应商适配层提交镜头任务;供应商成功时转存资产,响应丢失时冻结重提并按幂等 Token 或任务 ID 对账。

图表加载中…

读图结论: API、Outbox、Workflow 和供应商调用各自有不同一致性边界;最危险的不是收到明确失败,而是付费提交结果未知后盲目重提。

该时序把“可靠启动”和“外部副作用对账”连起来:内部用固定业务意图与 Workflow ID 防重,外部只在供应商契约支持的范围内依赖幂等 Token;无法确认时必须保留人工处理边界。

4.3 技术栈、框架、库与组件清单

技术点 ID技术点/环节类型采用方案链路职责版本/证据边界
TP-01长任务编排与恢复工作流组件PostgreSQL Outbox + Temporal + 分资源 Worker可靠启动分钟到小时任务,管理超时、重试、信号、检查点和恢复参考生产方案;是否采用由任务时长、失败恢复演练和团队运维能力决定
TP-02媒体探测、合成与转码命令行工具 + 可选渲染框架FFmpeg、ffprobe、libass;按模板需求选 Remotion以时间线为输入完成探测、裁剪、字幕、响度、编码和最终验收生产构建、编码器和平台兼容性必须由固定制品、ffprobe 与真实播放器验证
TP-03外部生成模型接入服务适配组件版本化供应商适配层 + 业务意图/任务对账归一化提交、查询、Webhook、下载、错误、成本和能力限制供应商能力和政策动态变化;必须以当前官方文档、契约测试和真实调用证据为准

4.4 横向选型对比

技术点 ID候选方案优点缺点/代价适用场景不适用场景选择结论与依据
TP-01Celery + Redis 等任务队列上手快、生态成熟、适合简单异步任务复杂状态、补偿、长时恢复和可视化需自行建设MVP、阶段少、任务可安全重跑多小时工作流、人工信号、跨阶段补偿早期可用;当恢复代码和人工排障成本持续上升时切换
TP-01Temporal 等持久化工作流状态、定时、重试、信号和恢复语义完整平台运维、确定性与版本兼容成本更高多阶段长任务、局部返工、进程重启后恢复单步短任务或团队无法维护平台只有故障注入证明恢复收益覆盖平台成本时采用
TP-02纯 FFmpeg 管线编解码控制精细、部署路径直接、适合最终成片复杂动态图形和可视化模板开发成本高稳定媒体处理、编码兼容和批量渲染大量 React 动效模板与可视化设计迭代最终兼容链优先保留 FFmpeg,并固定构建验证
TP-02Remotion 模板 + FFmpeg 验收前端团队易复用组件,动态图形和字幕模板迭代快浏览器渲染资源、字体和跨环境一致性更复杂品牌模板、动态图形和低清预览只需简单拼接转码或资源受限环境模板复杂度值得引入时使用,最终仍由媒体探测和播放器验收
TP-03业务代码直接调用单一供应商 SDK链路短、首版快、可直接使用供应商特性业务状态与供应商字段、错误和策略耦合单供应商验证、低切换需求多供应商、统一对账、成本和合规治理原型期可用;出现第二供应商或统一治理需求时迁移适配层
TP-03统一供应商适配层业务状态稳定,便于合约测试、路由、对账和审计不能抹平模型质量与能力差异,维护矩阵有成本生产多供应商、容灾、区域和政策路由只有一个短期调用且无治理需求用适配器合约测试、能力矩阵新鲜度和切换演练证明价值

4.5 详细推荐技术栈

层次推荐选择主要职责选型原因与边界
Web 前端Next.js、React任务创建、分镜编辑、预览、进度和返工适合复杂表单和时间线交互;不在浏览器执行重型最终渲染
API 层Python、FastAPI、Pydantic鉴权、参数校验、任务接口和签名 URLAI SDK 生态成熟;重型生成不能放进请求进程
长任务编排Temporal持久化工作流、超时、重试、取消、信号和恢复适合分钟到小时的多阶段任务;MVP 可用 Celery + Redis,但补偿和可视化要自行建设
元数据PostgreSQL项目、任务、镜头、资产、版本、成本和审核记录保持强一致的业务状态;大文件不直接存数据库
对象存储S3 兼容存储或 MinIO原始素材、中间产物、成片、封面和质检截图使用内容哈希、生命周期和签名 URL 管理资产
AI 规划支持结构化输出的 LLM需求澄清、脚本、分镜、Prompt 和返工建议输出必须 Schema 校验;事实与版权信息需要独立验证
视频生成供应商适配层,如 OpenAI 视频 API文生视频、图生视频、参考图驱动生成是异步和概率性的;适配层维护版本化能力/限制矩阵、原生幂等与对账能力,不能让供应商状态直接成为内部状态
音频模型TTS、STT、可选声音转换配音、时间戳、字幕和音色处理最终音频是时间线基准;真人声音必须有授权
视觉模型VLM 或专用检测模型分镜符合度、一致性和安全检查模型评分只能辅助,关键发布保留人工门禁
媒体处理FFmpeg、ffprobe、libass探测、裁剪、缩放、合成、转码、响度和字幕生产环境固定构建版本和编解码能力
模板渲染Remotion,可选React 模板、动态图形、字幕和低清预览适合参数化模板;最终兼容性仍用 ffprobe/播放器验证
实时进度SSE 或 WebSocket推送阶段进度、镜头状态和错误服务端状态来自数据库或工作流,不以浏览器连接为事实源
可观测性OpenTelemetry、Prometheus、GrafanaTrace、Metric、Log、成本和告警使用统一 job_idshot_idprovider_call_id 关联链路
部署Docker;规模扩大后 Kubernetes环境固定、Worker 隔离和弹性扩容渲染、CPU 和 GPU Worker 应使用不同资源池

4.6 MVP 与生产版的区别

能力MVP生产版
工作流Celery + Redis 或单机任务队列Temporal 等持久化工作流
存储本地磁盘 + SQLite/PostgreSQLPostgreSQL + S3 兼容对象存储
模型单一供应商统一适配层、路由、限流和降级
合成固定 FFmpeg 模板时间线模型 + FFmpeg/Remotion 多模板
质检技术检查 + 人工预览技术、语义、规则和人工分级门禁
返工整任务重跑镜头级依赖失效和断点续跑
观测普通日志Trace、Metric、Log、成本和审核关联

5. 核心数据模型与状态机

5.1 核心实体

实体关键字段作用
VideoProject标题、用户、品牌规范、目标平台聚合多个版本和生成任务
VideoJob状态、目标规格、预算、当前阶段、版本一次端到端生产执行
ScriptVersion结构化脚本、来源、版本、审核人保证脚本变更可追溯
Shot顺序、时间范围、Prompt、状态、依赖最小生成、质检和返工单元
Asset类型、URI、哈希、规格、来源、授权管理原始和生成素材
ProviderCall业务意图、原生幂等 Token、供应商任务、提交/对账状态、参数、成本、错误追踪每次外部模型调用及不确定提交窗口
TimelineVersion轨道、片段、时间戳、模板版本将创作数据与渲染实现解耦
Render输入版本、输出规格、日志、成片 URI保存预览和正式渲染结果
QCReport检查项、结果、证据、失败区间驱动发布门禁和局部返工
AuditEvent操作者、动作、前后值、时间记录授权、审核、发布和删除

5.2 状态机

建议内部状态使用业务语义,而不是复制供应商的 queuedprocessing

图 3:AI 视频业务任务状态机与失败恢复路径

替代文本: 业务任务从创建、需求补齐、规划、审批进入素材生成、音画对齐、预览渲染和质检;质检失败进入 REWORK_REQUIRED,并按问题类型回到镜头生成、对齐或预览渲染。执行阶段出现可重试错误时进入 FAILED_RETRYABLE,经 RECOVERING 读取检查点后定向恢复;不可重试或超过次数、预算上限时进入 FAILED_FINAL,用户也可以在未完成阶段取消任务。

图表加载中…

读图结论: REWORK_REQUIRED 是“质量不达标但已有资产可复用”的局部返工门,FAILED_RETRYABLE 是“执行故障且允许恢复”的技术失败门;二者不能混为一次整任务重跑,取消和最终失败也必须形成明确终态。

REWORK_REQUIRED 必须携带失败的 shot_id、资产或时间区间及依赖失效范围,再按问题类型回到最小必要节点。FAILED_RETRYABLE 则保存失败阶段、检查点、错误分类、已用重试次数和预算,RECOVERING 读取这些证据后恢复原失败节点,而不是默认从头执行。图中只画出代表性故障和取消入口;规则上任一未完成的执行状态都可能进入 FAILED_RETRYABLEFAILED_FINALCANCELLED,取消还要向已启动的 Worker 和供应商任务传播,无法撤销的外部副作用必须转补偿或人工处置。

所有状态迁移都必须带版本号或条件更新,并以状态事件记录前态、后态、触发源和业务意图,防止 Webhook、轮询、恢复器和人工操作并发覆盖。PUBLISHEDFAILED_FINALCANCELLED 是终态;若业务允许“从失败任务创建新尝试”,应产生新的执行版本或业务意图,而不是偷偷把终态改回执行态。

外部付费调用还要有独立提交子状态:

图 4:付费供应商提交、对账与防重复付费状态机

替代文本: 外部调用从 NEW 以唯一业务意图和供应商幂等 Token 进入 SUBMITTING;明确受理并持久化任务 ID 后进入 SUBMITTED 和 RUNNING。若响应丢失或供应商受理后本地落库前崩溃,则进入 SUBMISSION_UNKNOWN,自动冻结再次付费提交并转入 RECONCILING;查到原任务时继续跟踪,权威证据确认未创建时才允许使用同一业务意图安全重提,无法确认时进入 MANUAL_REVIEW。

图表加载中…

读图结论: SUBMISSION_UNKNOWN -> RECONCILING 是付费副作用的安全闸门:不知道供应商是否已受理时先冻结重提并对账,只有取得“未创建”的权威证据才进入 SAFE_RESUBMIT,否则宁可人工处理也不能用自动重试赌一次重复扣费。

内部防重边界是 business_intent_id 唯一约束,供应商防重边界是其明确承诺的原生幂等 Token 或稳定 Client Request Key;两者要随 ProviderCall 一起持久化。幂等 Token 只能覆盖供应商契约声明的范围和保留期,不能把外部系统包装成通用的 exactly-once。

SUBMISSION_UNKNOWN 不允许自动回到 SUBMITTINGRECONCILING 应依次用原生幂等 Token、Client Request Key、供应商任务列表和账单记录核对:查到任务就复用原任务 ID;确认未创建才通过 SAFE_RESUBMIT 复用同一业务意图重提;供应商既不能去重也不能查询、证据冲突或账单延迟时进入 MANUAL_REVIEW。这条边界只能降低重复生成和重复扣费概率,无法消除不提供幂等与查询能力的供应商所带来的残余风险。

5.3 幂等与缓存键

缓存键不能直接拼接字符串,应先构造版本化对象,按字段排序做 Canonical JSON 序列化,再计算 SHA-256。例如:

json
{
  "tenant_id": "...",
  "authorization_scope_hash": "...",
  "stage": "render_preview",
  "normalized_input_hash": "...",
  "provider": "...",
  "model": "...",
  "model_version": "...",
  "generation_engine_version": "...",
  "parameters": {},
  "prompt_template_version": "...",
  "reference_asset_hashes": [],
  "timeline_version": "...",
  "renderer_version": "...",
  "ffmpeg_build": "...",
  "font_pack_version": "...",
  "codec_profile": "..."
}

字段边界和类型由 Canonical JSON 保证,不能用 a + b + c 产生歧义。不同阶段只保留真正影响该产物的字段,但必须覆盖租户/授权范围和全部输出版本。缓存命中前仍要重新验证资产存在、当前授权有效、供应商许可和输出规格兼容;撤权、删除、字体/编码配置变化要主动失效。随机生成任务只有在业务明确允许复用时才使用缓存;用户主动要求“重新创作”时必须产生新版本和新业务意图。

6. 必须掌握的知识点

6.1 视频与音频基础

  • 容器与编码:MP4 是容器,H.264/H.265/AV1 是视频编码,AAC/Opus 是音频编码;
  • 帧率:CFR 与 VFR 的区别,以及混用时的音画漂移风险;
  • 时间戳:Time Base、PTS、DTS、入点和出点;
  • 画面:分辨率、宽高比、SAR、DAR、裁剪、填充和安全区;
  • 像素与颜色:Pixel Format、yuv420p、色彩空间、色域和动态范围;
  • 压缩:码率、CRF、GOP、关键帧和首帧播放;
  • 音频:采样率、位深、声道、响度、True Peak 和 Ducking;
  • 字幕:SRT、VTT、ASS、软字幕、硬字幕、字体和换行规则。

6.2 生成式 AI

  • 结构化输出和 Schema 校验;
  • 文生图、图生图、文生视频和图生视频的差异;
  • Prompt 模板、负面约束、Seed 和参考资产;
  • 时序一致性、角色一致性、首尾帧和短镜头策略;
  • TTS、STT、Forced Alignment 和 Lip Sync;
  • VLM 质检、模型评分偏差和人工审核;
  • 模型版本、参数和输入资产的可复现性边界。

6.3 分布式工作流

  • 工作流、活动任务、队列和 Worker 的职责;
  • 至少一次投递下的幂等处理;
  • 超时、指数退避、最大重试、不可重试错误和死信处理;
  • Webhook 验签、乱序、重复和丢失后的轮询对账;
  • 断点续跑、检查点、补偿动作和取消传播;
  • 供应商限流、全局并发、每用户配额和背压;
  • 中间产物版本化、缓存失效和局部重算。

6.4 评测与可观测性

  • 技术质量与语义质量必须分开评测;
  • Trace 用于单任务调用链,Metric 用于整体趋势,Log 用于具体事件证据;
  • 高基数字段如原始 job_id 不应无限制放入聚合指标标签;
  • 模型、Prompt、脚本、素材、时间线和渲染版本必须一起记录;
  • 成本要细分到项目、视频、镜头、供应商和阶段;
  • 失败样本要沉淀为回归集,避免同类问题重复出现。

6.5 安全与合规

  • 素材版权、音乐授权、角色形象、真人肖像和声音授权,以及目标供应商的版本化能力限制;
  • 深度伪造、未成年人、敏感内容和平台政策;
  • 上传文件隔离、病毒检查、Prompt 注入和工具最小权限;
  • Webhook 验签、临时 URL、访问控制和数据保留周期;
  • 水印、内容来源、审核记录和删除能力。

7. 关键技术方案与权衡

决策推荐选择备选方案为什么代价与风险
生产粒度镜头级生成与返工整条视频一次生成可并行、可重试、成本可控需要处理风格和转场一致性
时间基准最终配音驱动时间线先定画面再硬塞配音字幕和旁白更容易同步镜头可能需要裁剪或重生成
工作流持久化状态机HTTP 请求内串行执行长任务可恢复、可取消、可观测引入工作流系统和确定性约束
视频模型供应商适配层业务直接调用单一 SDK可切换、降级、统一错误和成本不能完全抹平供应商能力差异
合成时间线 JSON + FFmpeg在业务代码中拼命令字符串数据和渲染解耦,易版本化需要维护时间线 Schema
模板动画Remotion 可选纯 FFmpeg FilterReact 适合复杂图形和预览增加 Node 渲染栈和许可证评估
质检规则 + VLM + 人工分级只用人工或只用模型兼顾效率、覆盖率和高风险门禁需要维护阈值与误报策略
渲染策略低清预览后高清成片每次直接高清减少高成本返工预览与高清必须保持布局一致
缓存内容哈希 + 版本依赖仅按文件名或任务 ID可复用且能精确失效随机创作是否复用需业务确认

7.1 为什么不能放在同步 HTTP 请求里

视频生成和渲染可能持续数分钟甚至更久,还会遇到排队、限流和供应商故障。同步请求容易超时、丢失进度、重复提交,也不能可靠支持取消和恢复。HTTP 接口只负责创建任务并返回 job_id;执行由工作流和 Worker 完成,前端通过查询与事件订阅展示进度。

7.2 为什么按镜头拆分

镜头是创作、成本、质检和返工的共同最小单元。拆得比镜头更细会增加调度和一致性成本;按整片处理又会导致一个局部失败引发全片重跑。镜头级还能明确记录哪个 Prompt、模型和参考图产生了哪个素材。

7.3 为什么先定义中间数据协议

如果脚本、分镜、时间线和供应商响应都只是自由文本,系统无法稳定校验、重试和渲染。先定义版本化 Schema,再让 LLM 和适配器围绕 Schema 工作,可以把概率性模型限制在确定性工作流之内。

7.4 技术难点清单

技术难点为什么难核心矛盾可落地抓手
外部生成的幂等与费用一致性供应商可能已经受理并计费,但内部在任务 ID 落库前崩溃;重试既可能恢复任务,也可能再次付费业务希望“只执行一次”,外部接口通常只能提供至少一次或能力不一的去重保证业务意图唯一键、供应商幂等 Token、SUBMISSION_UNKNOWN 对账态、账单与任务关联、人工补偿入口
跨镜头一致性与并行效率镜头并行能缩短等待时间,却会让角色、道具、光线和空间关系各自漂移生产吞吐与叙事连续性相互牵制Style Bible、角色身份锚点、参考资产版本、首尾帧衔接、跨镜头质检
多媒体时间基统一视频帧、音频采样和字幕时间戳使用不同 Time Base,舍入或 VFR/CFR 混用会把微小误差累积成可见漂移各资产独立生成,但交付必须共享一条确定性时间线以最终音频驱动逻辑时间线、统一起始时间戳、分别换算 PTS、合成前媒体规范化、首中尾抽检
局部返工与缓存失效重做一个镜头可能改变时长、转场、字幕和下游合成结果;仅按文件名缓存会复用错误资产希望只重做局部,又必须保证所有受影响下游同步更新不可变资产版本、内容哈希、显式依赖图、时间线引用版本、按依赖传播失效
概率质量与确定性交付模型输出可能“技术上可播放但语义不合格”,VLM 质检也会误报或漏报自动化效率与发布风险之间需要分级决策技术规则、VLM 语义检查和人工门禁分层;高风险项硬阻断;失败样本进入回归集
合规授权与供应商能力漂移业务侧有授权,不代表目标模型在当前区域、版本和输入类型下允许生成合法可用与供应商可调用不是同一判断授权链、能力矩阵和发布政策分开版本化;付费调用前契约校验;策略变化回归

这些难点的共同点是:模型调用只是局部能力,真正困难的是在不确定外部系统、确定性媒体标准和发布责任之间建立可恢复、可解释的边界。

7.5 方案亮点的证据化表达

以下是设计级亮点及其验证方法,不代表已取得线上效果;面试中只有完成对应测试或拿到真实 Trace、媒体报告和成本记录后,才能改写为“已实现”。

问题关键决策证据或验证方式适用边界
单个坏镜头导致整片重跑shot_id 作为生成、质检、成本和返工的共同最小单元,并用依赖图传播必要失效注入单镜失败,比较重试前后的供应商调用、资产版本和渲染节点,确认未受影响镜头没有重生成镜头时长或全局风格变更可能影响后续时间线,不能机械地只替换一个文件
长任务在超时或重启后丢失进度HTTP 只创建任务;执行交给持久化状态机,阶段产物和检查点外置保存在提交、回调、下载、渲染等阶段分别杀死 Worker,核对状态迁移、检查点和最终产物依赖工作流与活动代码满足确定性、幂等和版本兼容;外部副作用仍需单独对账
音画字幕由多个工具生成后难以同步使用版本化 timeline.json 作为单一时间源,以最终配音重新计算镜头和字幕边界保存 ffprobe JSON,检查各流 Time Base、PTS、duration;在首、中、尾及切镜点做自动与人工核验口型、复杂音乐节拍和创意剪辑仍需要专用模型或人工导演判断
供应商切换会污染业务状态在适配层归一化提交、查询、回调、下载、错误和成本,内部状态不复制供应商枚举对每个适配器执行同一组合约测试,并用录制响应验证错误映射与回调乱序适配层只能统一协议,不能抹平模型质量、合规、区域和参考图能力差异
自动质检难以覆盖发布责任将技术质检、语义质检和人工审核拆成分级门禁,高风险问题不允许模型自行放行用损坏媒体、错字幕、角色漂移、受限素材和误报样本执行回归,核对门禁与审计记录低风险模板化内容更适合自动放行;品牌、真人、版权和事实敏感内容应保留人工责任人

8. 常见问题、根因与解决方案

8.1 生成质量与一致性

问题现象主要根因解决方案验证方式
人物一致性差同一角色跨镜头脸型、服装或年龄变化只靠文本描述;参考资产、模型和参数不固定建立角色设定卡;锁定参考图和核心参数;关键镜头使用首帧或角色参考;短镜头生成对人脸、服装和颜色做相似度检查,并逐镜人工审核
画风和镜头连续性差色调跳变、物体瞬移、运镜突变或闪烁镜头独立生成;没有统一视觉规范和衔接信息建立 Style Bible;使用上一镜尾帧作为参考;限制主体位移和运镜;先做低清串片检查镜头边界、主体位置和色彩变化,记录不通过镜头
结果偏离分镜缺少关键人物、动作、道具或构图Prompt 冲突;单镜承载过多动作;分镜不可执行按主体、动作、环境、镜头、风格和约束拆 Prompt;复杂动作拆镜;生成前静态校验使用视觉模型比对关键要素,再按导演清单人工验收
时序伪影手指、物体或背景在连续帧中变形模型时序稳定性不足;镜头过长或动作过复杂缩短镜头;降低动作复杂度;使用参考帧;失败区间单独重做抽取关键帧和短 GIF,检查主体结构和运动连续性
已获授权但供应商仍拒绝真人脸、肖像角色、版权角色或音乐在提交时被策略拒绝把业务授权误当成供应商能力;能力矩阵过期在付费调用前按供应商/模型/区域/版本执行能力门禁;给出可解释拒绝或路由到支持且合规的方案对当前官方限制建立契约测试;策略版本变更后重新跑门禁用例

8.2 时间线、音频与字幕

问题现象主要根因解决方案验证方式
音画不同步声音逐渐领先或落后,切镜点与配音错位逻辑时间线换算错误;VFR/CFR 混用;音视频各自 PTS 未按所属 Time Base 正确缩放统一逻辑时间轴和起始时间戳;视频规范化帧率、音频规范化采样率;分别重建/缩放各流 PTS,必要时转 CFR 和重采样用 ffprobe 分别检查音视频 time_base、start_time、duration、帧率和采样率;首、中、尾三点人工核对
口型不匹配嘴型滞后、停顿仍张嘴或多人串音口型使用旧音频;说话人区间错误;缺少词级时间戳以最终音频驱动 Lip Sync;按说话人分段;失败镜头单独重生成重点检查句首、爆破音、停顿和说话人切换
字幕错位字幕提前、滞后、重叠或跨句按字数估时;最终音频变更后未重新对齐使用 STT 或强制对齐生成时间戳;字幕绑定最终音频版本校验时间段顺序和重叠,并逐句抽检
字幕乱码或越界中文缺字、字体替换、竖屏被裁切FFmpeg 缺少 libass 或字体;未按画幅计算安全区固定字体包和 FFmpeg 构建;使用 ASS;按画幅设置安全区和换行对所有目标分辨率渲染截图,检查边界和缺字
配音被音乐淹没人声不清、片段间响度突变未做响度归一化和音乐 Ducking使用响度分析和 loudnorm;旁白区间压低音乐;限制 True Peak检查响度报告并在耳机、手机和扬声器试听

8.3 编码、合成与资源

问题现象主要根因解决方案验证方式
拼接失败或转场错位分辨率不一致、接缝黑帧、音频短缺片段参数和起始时间戳不同;直接拼接异构素材合成前统一分辨率、帧率、Pixel Format、采样率并将片段时间戳归零用 ffprobe 比较所有输入流;在每个接缝前后抽帧与试听
播放器不兼容黑屏、有声无画、移动端失败或首帧慢Codec、Profile、Pixel Format 或容器不兼容默认交付 MP4 + H.264 + yuv420p + AAC;启用 Fast Start;必要时转 CFRffprobe 检查流信息,并在目标浏览器和真机验证
黑帧或损坏帧成片局部黑屏、花屏或无法解码下载不完整;供应商文件损坏;渲染进程异常退出下载后校验长度和哈希;完整解码检测;损坏资产禁止进入合成对全部帧执行解码测试,并保留失败时间区间
渲染 OOM 或磁盘爆满Worker 被杀、临时文件堆积、任务反复失败整片一次解码;并发过高;临时资产没有生命周期分段渲染再合并;限制 Worker 并发;流式处理;为临时目录设置配额和清理策略监控内存、磁盘和渲染峰值;故障注入后确认可恢复

8.4 异步任务、成本与安全

问题现象主要根因解决方案验证方式
任务长期卡住一直处理中,回调未到或状态不再变化Webhook 丢失;无超时和看门狗;供应商状态未对账Webhook + 轮询兜底;阶段超时;看门狗扫描;可重试与终态分离注入丢回调、服务重启和供应商超时,检查最终状态
重复生成或重复扣费同一镜头产生多个任务,或账单有无法关联的重复项重复提交/回调;供应商已受理但内部任务 ID 落库前崩溃服务端业务意图唯一键;优先传供应商原生幂等 Token;SUBMISSION_UNKNOWN 禁止盲目重提;按 Client Key/任务列表对账;不支持查询时人工补偿重放请求/回调并注入“受理后崩溃”;确认进入对账态;明确记录供应商不支持 exactly-once 时的残余风险
局部失败导致全片重跑一个镜头失败后成本和时间成倍增加任务粒度过大;中间产物不可复用;无依赖图按镜头和阶段保存版本化产物;只失效失败节点和必要下游人为使单镜失败,确认其他成功节点未再次调用模型
供应商下载地址失效任务显示成功但成片资产丢失把短期签名 URL 直接存为资产地址完成事件后立即下载并转存对象存储;校验哈希后再标记资产就绪缩短 URL 有效期测试,确认内部资产仍可访问
生成成本失控高清反复重做、费用不可预测没有预估、预算、缓存、重试上限和分级模型生成前估算;低清确认后高清;镜头级成本;预算硬门禁;超限人工确认汇总每阶段、镜头和供应商成本,验证超限会暂停
版权、肖像或供应商策略风险素材、角色、音乐或声音无授权,或有授权但目标供应商不支持授权链缺失;能力策略未版本化;发布前无硬门禁分开校验业务授权、供应商能力与发布政策;保存来源、范围、有效期和策略版本;任一门禁失败都不提交/不发布抽查授权链与策略版本;用受限人物、参考图、角色和音乐做调用前门禁测试
提示注入或越权上传素材诱导 Agent 泄密或调用危险工具外部内容被当成系统指令;工具权限过宽内容与指令分离;工具白名单;最小权限;敏感信息脱敏;Webhook 验签使用恶意 Prompt、伪造回调和越权工具做安全测试

8.5 推荐排查顺序

遇到“视频生成失败”时不要直接重跑整个任务,按以下顺序定位:

  1. 查内部 VideoJobShot 和状态迁移,确认卡在哪个阶段;
  2. ProviderCall,区分未提交、排队、限流、供应商失败和下载失败;
  3. 确认对象存储中的输入和输出资产真实存在、可读且哈希匹配;
  4. 用 ffprobe 检查容器、流、时长、帧率、时间基、分辨率和音频;
  5. timeline.json 的镜头入点、出点、依赖版本和字幕时间;
  6. 查看渲染命令、标准错误、资源峰值和失败时间区间;
  7. 最后才判断是模型语义质量问题,并决定重写 Prompt、换参考图还是人工处理。

8.6 生产易发问题闭环

本文尚无真实线上事故记录,所以下表是面向实施和演练的故障闭环模板。表中的“证据”指故障发生时必须采集的材料,“验证”指修复后的验收动作,不能当作已经完成的实测结果。

现象影响证据根因止损修复验证预防
任务长时间停在“生成中”用户无法交付,队列槽位和预算被持续占用VideoJob 状态年龄、最近状态事件、供应商任务状态、Webhook 验签日志、队列租约回调丢失、Worker 租约过期后无人接管,或内部状态未与供应商对账暂停该任务的新调用;轮询供应商现态;超过预算转人工处理,不直接重跑整片增加阶段超时、看门狗、Webhook 与轮询兜底,并区分可重试、待对账和最终失败注入丢回调、Worker 重启和乱序通知,确认任务进入唯一终态且进度可恢复对状态年龄、无心跳任务和回调失败率告警;定期执行恢复演练
同一镜头出现多个供应商任务或重复账单增加成本,多个结果竞争覆盖正确资产业务意图键、供应商 Request/Task ID、调用时间线、账单明细、Outbox 与回调记录提交结果不确定时盲目重试,或请求、回调未去重冻结该镜头自动重试与发布;按稳定 Client Key 对账并选定唯一有效结果落实唯一约束、幂等 Token、SUBMISSION_UNKNOWN 状态和补偿流程;提交与意图记录使用事务 Outbox重放相同请求、重复回调,并注入“供应商受理后进程崩溃”,核对调用次数与费用关联监控一业务意图对应多个外部任务;将不支持查询/幂等的供应商标为高风险能力
低清预览正常,高清成片黑屏、越界或布局变化审核结论失效,最终交付失败且高清渲染成本浪费预览/高清时间线版本、字体与 FFmpeg 构建、渲染 stderr、失败帧、ffprobe 报告两套渲染参数或资源不一致,高清阶段字体、显存、滤镜或安全区不同阻断发布并保留已通过素材;只回退高清渲染节点,不重新生成合格镜头让预览与高清共享时间线、字体包、布局算法和容器镜像,仅允许编码质量参数不同对同一时间点做预览/高清截图差异检查,并在目标设备完成解码与安全区验收将渲染镜像和模板版本写入产物元数据;升级前跑多画幅黄金样本
视频越到后面音画或字幕偏移越明显旁白、切镜与字幕失配,成片不可用音视频 time_base、PTS、start_time、duration、VFR/CFR、采样率及首中尾对点结果各流按错误 Time Base 换算、反复浮点舍入,或最终音频变化后仍复用旧字幕停止继续拼接;定位首次偏移时间点并隔离受影响时间线版本使用整数时间单位和统一逻辑时间轴,分别重建各流 PTS;最终音频变更后强制重对齐字幕用合成短片和长片覆盖帧率/采样率组合,校验累计误差并首中尾人工试听对时间线计算做属性测试;合成前设置媒体规格门禁和版本依赖校验
供应商显示成功,但下载或后续渲染找不到素材已付费结果丢失,任务无法恢复或被迫再次生成外部 URL 过期时间、下载响应、对象存储事件、文件长度、哈希、资产状态迁移把短期签名 URL 当成永久资产,或转存未完成就标记资产就绪立即尝试在有效期内转存;禁止删除上游任务和盲目重新生成成功回调后先下载、校验、转存,再以内部对象键原子标记 ASSET_READY缩短签名 URL 有效期并中断下载,确认可续传、可对账且半成品不会进入合成监控“外部成功但内部未就绪”状态年龄;对象存储启用完整性与生命周期审计
技术检查通过但违规或错误内容被送入发布队列产生事实、品牌、版权、肖像或平台治理风险分镜与成片对照、VLM 判定、人工审核记录、授权链、策略版本、发布事件把可播放等同于可发布,或能力/授权策略过期立即冻结发布和分享链接,保全审计证据并通知审核责任人将技术、语义、授权和平台策略拆成独立硬门禁;高风险项要求人工签署用受限素材、事实错误、角色漂移和越权发布样本验证门禁无法被跳过策略版本变更触发回归;发布服务只接受完整门禁凭证而非前端布尔值

8.7 可复用经验积累

可复用经验适用信号推荐做法使用边界
把“不知道外部是否成功”建模为业务状态超时或断线后无法判断供应商是否已受理引入待对账状态,先查任务与账单,再决定继续、补偿或人工处理不能因此宣称外部 exactly-once;供应商无查询能力时仍有残余风险
先画副作用边界,再设计重试调用会计费、发布、发通知或覆盖资产为每类副作用定义唯一键、重试主体、最大次数、补偿和责任人纯计算任务可更积极重试,但也要防止资源雪崩
局部返工依赖“不可变产物 + 显式依赖”修改一点却不知道哪些下游必须重跑资产按内容和版本寻址,时间线保存引用,失效沿依赖图传播全局模板、时长或风格变化可能天然扩大失效范围
预览和正式交付是两个验收层级低清审核通过但高清或真机失败共享布局和时间线,分别验证语义质量与最终编码兼容预览不能替代目标平台、目标设备和最终文件验收
排障从确定性层向概率性层推进团队遇到失败就先改 Prompt 或换模型先查状态、资产、协议、媒体参数和时间线,再分析模型语义质量已有证据明确指向模型退化时,可直接进入模型回归与路由分析
合规策略也是版本化依赖同一素材在供应商、区域或模型升级后表现不同分开维护授权、供应商能力和发布政策,并把版本写入决策与审计业务授权不能覆盖供应商硬限制,技术门禁也不能替代法务判断

9. 评测、监控与验收

9.1 质量指标

技术指标:

  • 成片可解码率、目标平台播放通过率;
  • 分辨率、画幅、帧率、总时长和文件大小合规率;
  • 音画偏移、字幕重叠、黑帧、静音和响度检查结果;
  • 预览和高清渲染成功率。

语义指标:

  • 分镜关键要素覆盖率;
  • 角色、品牌和场景一致性;
  • 旁白、字幕和画面的一致性;
  • 事实、安全和授权审核通过率;
  • 人工返工镜头占比。

工程指标:

  • 端到端时长及各阶段 P50/P95;
  • 模型排队时间、生成时间、下载时间和渲染时间;
  • 工作流成功率、可恢复失败率和最终失败率;
  • 单视频、单分钟、单镜头和单供应商成本;
  • 缓存命中率、平均重试次数和局部返工比例。

以上指标需要在真实项目中建立基线和目标值,本文不虚构阈值。

9.2 Trace、Metric 和 Log

  • Trace:一次 job_id 从 API、工作流、模型调用、下载、渲染到质检的全链路;
  • Metric:阶段耗时、成功率、并发、队列深度、错误类型和成本趋势;
  • Log:状态迁移、外部请求摘要、ffprobe 结果、渲染错误和审核事件;
  • Artifact:失败帧、波形、字幕截图、质检 JSON 和模型原始响应。

日志中不记录密钥、完整用户隐私数据或无脱敏的 Prompt;高基数 ID 用于 Trace 和日志检索,不直接作为无限制指标标签。

9.3 测试策略

  • 单元测试:Schema、时间线计算、状态迁移、缓存键和成本计算;
  • 合约测试:各模型适配器的提交、查询、回调、下载和错误归一化;
  • 媒体测试:不同画幅、帧率、音频、字幕和损坏文件;
  • 工作流测试:超时、重试、取消、服务重启、重复回调和乱序回调;
  • 回归测试:固定脚本和参考素材,比较技术指标和语义评分;
  • 安全测试:未授权素材、伪造 Webhook、Prompt 注入和越权工具调用;
  • 人工验收:关键镜头、事实、品牌、版权和最终观看体验。

9.4 最小验收清单

  • [ ] 可以创建任务并看到阶段和镜头级进度;
  • [ ] 注入“业务事务已提交但 Workflow 未启动”,Outbox 扫描能以同一 workflow_id 补偿启动且不产生重复工作流;
  • [ ] 服务重启后任务能够恢复或进入明确失败状态;
  • [ ] 一个镜头失败时只重做该镜头及必要下游;
  • [ ] 重复内部提交和回调只对应一个业务意图;注入“供应商受理后响应丢失”时进入 SUBMISSION_UNKNOWN/RECONCILING,不会盲目再次付费调用;
  • [ ] 成片通过 ffprobe、完整解码和目标播放器验证;
  • [ ] 字幕、旁白、画面和总时长基本同步;
  • [ ] 可以查看每个镜头的 Prompt、模型、成本、错误和版本;
  • [ ] 未授权或审核未通过的内容不能发布;
  • [ ] 质检失败能够定位到具体镜头、资产或时间范围;
  • [ ] 最终交付包含成片、字幕、封面、清单和质检报告。

10. 分阶段实施计划

10.1 第一阶段:确定性视频合成

先不接视频生成模型,完成可验证的媒体底座:

  • 固定脚本和人工准备素材;
  • 设计 timeline.json
  • 完成配音、字幕、背景音乐和 FFmpeg 合成;
  • 使用 ffprobe 输出机器可读质检报告;
  • 支持低清预览和高清成片。

验收重点:同一输入可以稳定得到可播放、时间线正确的输出。

10.2 第二阶段:AI 脚本与分镜

  • LLM 输出结构化脚本和镜头清单;
  • 加入 Schema 校验、事实标记和人工确认;
  • 建立角色设定卡和视觉规范;
  • 记录 Prompt 模板和脚本版本。

验收重点:错误输出会被校验或拦截,不会直接流入渲染。

10.3 第三阶段:异步素材生成

  • 接入一个视频或图像供应商适配器;
  • 实现提交、查询、Webhook、下载、超时和错误归一化;
  • 以镜头为粒度并行生成;
  • 转存临时结果并建立内容哈希;
  • 展示阶段进度和镜头失败原因。

验收重点:服务重启、回调丢失和重复回调下状态仍然正确。

10.4 第四阶段:局部返工与质检

  • 建立镜头依赖图和版本化中间产物;
  • 加入技术质检、VLM 质检和人工门禁;
  • 支持镜头级重生成和下游精确失效;
  • 建立固定回归样本、成本统计和可观测链路。

验收重点:一次局部修改不会触发无关模型调用,且新版本可追溯。

10.5 第五阶段:生产化

  • 供应商路由、限流、预算和降级;
  • 多租户权限、审核、授权和数据保留;
  • CPU、GPU、渲染 Worker 的资源隔离;
  • 目标平台发布适配与发布后对账;
  • SLO、容量评估、告警和故障演练。

验收重点:系统在并发、供应商故障和发布失败场景下可恢复、可解释。

11. 面试表达与递进追问

11.1 30 秒项目介绍

我设计的是一套 AI 视频生产工作流,不是单次模型调用。系统先用 LLM 生成结构化脚本和分镜,再以镜头为单位并行生成视频、配音和字幕,通过持久化工作流管理长任务、幂等和局部重试,最终用统一时间线、FFmpeg 和双层质检完成交付。核心设计目标是生成失败可恢复、局部问题不用全片重跑、成本和质量都有证据可追踪。

11.2 2~3 分钟回答结构

  1. 背景:AI 视频生成耗时长、结果不稳定、成本高,直接串 API 无法生产化;
  2. 粒度:把视频拆成镜头,以镜头作为生成、质检、缓存和返工单元;
  3. 流程:需求、脚本、分镜、资产、配音字幕、时间线、预览、质检、高清交付;
  4. 架构:API + 持久化工作流 + 模型适配器 + 对象存储 + FFmpeg Worker;
  5. 难点:幂等与回调对账、角色一致性、音画同步、编码兼容、局部失效;
  6. 验证:状态故障注入、ffprobe 技术检查、语义评测集、成本和人工返工指标;
  7. 演进:多供应商路由、自动质检、发布适配和容量治理。

11.3 高频递进追问

问题一:为什么不用 FastAPI BackgroundTasks?

回答要点:它适合进程内小任务,视频生成和渲染是重型、跨进程、长耗时工作;需要持久化、取消、超时、重试、恢复和分布式 Worker,因此应使用任务队列或持久化工作流。

问题二:为什么工作流重试仍会重复扣费?

回答要点:多数外部调用是至少一次语义,Worker 在供应商已受理但内部任务 ID 落库前崩溃时,单靠内部唯一键无法判断是否已扣费。优先把服务端业务意图作为供应商原生幂等 Token;结果不明确就进入 SUBMISSION_UNKNOWN/RECONCILING,按 Client Key 或供应商任务列表对账,禁止盲目重提。供应商既不支持幂等也不支持查询时只能人工对账/补偿,不能宣称 exactly-once。

问题三:如何做到只重做一个镜头?

回答要点:中间产物要版本化,时间线保存依赖图;修改镜头后只失效该镜头资产、预览和最终渲染,不失效其他镜头。若修改旁白导致全局时长变化,则需要重新对齐受影响的后续时间线。

问题四:音画不同步如何定位?

回答要点:先用 ffprobe 分别检查音频、视频流的 time_base、start_time、PTS、帧率/采样率和时长,再验证它们是否正确映射到同一逻辑时间轴;音频和视频的 Time Base 数值不必相同。随后检查 timeline 入点和出点,区分全局固定偏移、随时间累积漂移和单镜局部错位,三者根因不同。

问题五:如何评价生成视频质量?

回答要点:技术质量、语义质量和业务效果分开。技术质量可自动检测;语义质量使用固定分镜评测集、VLM 和人工评分;业务效果使用返工率、交付时间或实际业务指标。不能用几个精选 Demo 代表整体质量。

问题六:如何控制成本?

回答要点:生成前估算,低清预览后高清,镜头级缓存和局部返工,按任务设置预算和重试上限,根据镜头难度做模型路由,并把成本拆到镜头和供应商进行复盘。

问题七:如果并发扩大十倍,哪里先成为瓶颈?

回答要点:先观察供应商配额和排队,再看下载带宽、对象存储、CPU/GPU 渲染和临时磁盘;使用分阶段队列、背压、资源池隔离和容量指标,不能只扩 API 实例。

问题八:版权和安全如何设计成系统能力?

回答要点:授权不是备注字段,而是发布门禁;素材记录来源、用途、有效期和主体授权,模型输入输出走审核,所有发布与删除都有审计记录。同时把“业务已授权”和“供应商当前支持”分成两个门禁;例如目标供应商禁止真人脸输入时,即使取得同意也不能提交,应解释拒绝或选择其他合规方案。

12. 参考资料

以下资料在 2026-07-10 核对:

13. 简明总结

一句话记忆: AI 视频生产系统的核心,是用镜头级、可恢复的工作流驯服不稳定的生成模型,再用统一时间线和双层质检保证交付。

  • 工作流:需求 → 脚本 → 分镜 → 素材 → 配音字幕 → 合成 → 质检 → 局部返工 → 发布;
  • 技术栈:FastAPI、Temporal、PostgreSQL、S3、模型适配层、FFmpeg/ffprobe、OpenTelemetry;
  • 核心知识:生成式 AI、视频编码与时间戳、分布式任务、评测、成本和内容安全;
  • 排障原则:先查状态与资产,再查媒体参数和时间线,最后才重做模型生成;
  • 面试重点:镜头级拆分、幂等恢复、音画同步、局部重试和可验证质量。