项目:视频生成任务包验证

项目目标

用 Python 标准库验证一个 8 秒短片的结构化任务包:输出规格、镜头覆盖、连续性锚点、字幕时间、音频权利、人工审核、来源计划、版本/发布治理、验收维度和失败恢复。它完全离线,不调用生成 API,也不创建视频、音频、字幕或图片文件。

文件说明

  • video_job_package.json:三镜头教学夹具,只声明离线适配器,不冒充真实供应商。
  • validate_video_job.py:严格读取 UTF-8 JSON,先检查封闭字段合同,再审计时间线、素材、治理和预算关系。
  • test_validate_video_job.py:保留的兼容性冒烟测试。
  • test_contract_and_cli.py:严格 JSON、字段类型、素材版本、对象级 ACL、撤权/删除传播、证据边界、交叉字段、CLI 和只读行为测试。

运行步骤

在 PowerShell 7 中,从同时包含 docs/ 与 .website/ 的项目根目录运行:

Push-Location -LiteralPath 'docs\视频生成\03-项目与自测\examples'
python -B .\validate_video_job.py .\video_job_package.json
python -B -m unittest discover -s . -p 'test_*.py'
python -B -O -m unittest discover -s . -p 'test_*.py'
python -B -W error -m unittest discover -s . -p 'test_*.py'
Pop-Location

当前套件共有 133 项测试,普通模式、优化模式和“警告即错误”模式均应通过。有效任务返回 0;字段间或治理审计不通过返回 1;文件、UTF-8、严格 JSON 或字段合同错误返回 2。脚本只读输入,-B 避免 .pyc 缓存。

引用素材对象包含 asset_id、source_revision、角色、来源引用、SHA-256、权利记录和 acl_reference。顶层 lineage 区分冻结需求版本、镜头/后期 transform_id 与候选 release_id;governance 要求评分前执行对象级授权/ACL、写出撤权/删除传播计划,并将事实性发布限制为 evidence_supported。这是教学业务合同,不是供应商 API 镜像。

实验步骤

  1. 让第二镜头起点早于第一镜头终点,观察重叠错误。
  2. 将一个字幕 cue 结束时间改为 9.0,观察越界错误。
  3. 删除一个镜头的连续性锚点,理解“保持一致”为什么需要可检查字段。
  4. 把 human_review_required 改为 false,确认发布前人工门禁不可省略。
  5. 复制夹具设计 12 秒版本;镜头时间应连续覆盖全片,不能只改总时长。
  6. 为某个镜头添加参考素材对象,填写 asset_id、source_revision、角色、来源引用、权利记录、acl_reference 和 64 位小写 SHA-256;再故意重复 asset_id,观察合同错误。
  7. 将 object_acl_required 改为 false,解释为什么系统必须在抽帧或模型评分前拒绝任务。
  8. 将 evidence_policy 改为其他值,说明为何内容凭证或时间线正确不能单独支撑事实性发布。

项目验收

  • 镜头 ID 唯一、按时间排序、无重叠和空隙,完整覆盖总时长。
  • 每个镜头有景别、相机运动、主体、动作、场景、提示和连续性锚点。
  • 引用素材有合法角色、稳定来源、source_revision、内容 SHA-256、权利记录、acl_reference 和全局唯一 ID。
  • 字幕 cue 在有效时长内且不重叠,格式声明为 WebVTT。
  • 音频权利、参考素材权利、人物同意、人工审核和来源计划均显式。
  • source_revision、transform_id 与 release_id 区分需求、变换和发布候选;对象级 ACL 与撤权/删除传播均有计划。
  • 事实性发布只有在独立证据支持时才标为 evidence_supported。
  • 验收覆盖提示、画质、运动、身份、连续性、音频/字幕、安全和权利。
  • 重试有镜头级上限和人工升级条件。
  • 没有 API key、真实人物素材、媒体文件、具体价格或模型权重。

综合自测

  1. 为什么任务包通过只说明“计划内部一致”,不说明模型一定能生成?
  2. 若需要交叉淡化,当前“无重叠”规则应如何扩展而不是直接删除?
  3. 供应商端点下线时,哪些字段可以保持,哪些由适配器替换?
  4. 如何把验证结果接入 Agent 状态机,防止失败后无限重试?

参考资料