项目:视频生成任务包验证
项目目标
用 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 镜像。
实验步骤
- 让第二镜头起点早于第一镜头终点,观察重叠错误。
- 将一个字幕 cue 结束时间改为
9.0,观察越界错误。 - 删除一个镜头的连续性锚点,理解“保持一致”为什么需要可检查字段。
- 把
human_review_required改为false,确认发布前人工门禁不可省略。 - 复制夹具设计 12 秒版本;镜头时间应连续覆盖全片,不能只改总时长。
- 为某个镜头添加参考素材对象,填写
asset_id、source_revision、角色、来源引用、权利记录、acl_reference和 64 位小写 SHA-256;再故意重复asset_id,观察合同错误。 - 将
object_acl_required改为false,解释为什么系统必须在抽帧或模型评分前拒绝任务。 - 将
evidence_policy改为其他值,说明为何内容凭证或时间线正确不能单独支撑事实性发布。
项目验收
- 镜头 ID 唯一、按时间排序、无重叠和空隙,完整覆盖总时长。
- 每个镜头有景别、相机运动、主体、动作、场景、提示和连续性锚点。
- 引用素材有合法角色、稳定来源、
source_revision、内容 SHA-256、权利记录、acl_reference和全局唯一 ID。 - 字幕 cue 在有效时长内且不重叠,格式声明为 WebVTT。
- 音频权利、参考素材权利、人物同意、人工审核和来源计划均显式。
-
source_revision、transform_id与release_id区分需求、变换和发布候选;对象级 ACL 与撤权/删除传播均有计划。 - 事实性发布只有在独立证据支持时才标为
evidence_supported。 - 验收覆盖提示、画质、运动、身份、连续性、音频/字幕、安全和权利。
- 重试有镜头级上限和人工升级条件。
- 没有 API key、真实人物素材、媒体文件、具体价格或模型权重。
综合自测
- 为什么任务包通过只说明“计划内部一致”,不说明模型一定能生成?
- 若需要交叉淡化,当前“无重叠”规则应如何扩展而不是直接删除?
- 供应商端点下线时,哪些字段可以保持,哪些由适配器替换?
- 如何把验证结果接入 Agent 状态机,防止失败后无限重试?