feat: SceneChange 场景检测前置到渲染前 + 场景点缓存到素材 metadata #1622

Merged
auto-approve-bot merged 2 commits from feat/scene-change-pre-render into develop 2026-09-02 08:40:37 +08:00

2 Commits

Author SHA1 Message Date
saas-backend-agent c4068c1d3f feat: SceneChange 场景检测前置到渲染前,场景点缓存到素材 metadata
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Validate - Style (pull_request) Successful in 4m57s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 5m3s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m52s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 5m52s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 5m55s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 6m10s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 6m15s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 6m15s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 7m16s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 8m20s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 3s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 10m20s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 4m10s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 4m22s
现状问题:
- 场景检测是接口返回后的后台任务,视频已用随机 start_time 渲染完,
  SceneChange 更新 DB 对当前成片查重率无作用
- 首次生成的素材没有缓存,渲染前仍走随机起点(后台任务异步补缓存)
- 镜头段固定顺序分配(第N个clip固定用第N段),同样素材组合起始帧仍相同

改动:
1. 场景点持久化到素材 metadata(scene_change_points: list[float])
   - 后台 _update_mediakit_recommendations_async:检测前查缓存命中跳过,
     detect_scene_changes 成功后写入 asset.metadata 并 repo.update
2. 渲染前同步读缓存选镜头段(clips.py from-assets 主流程)
   - 素材加载时 extract_scene_points_from_metadata 读缓存
   - 有缓存:build_scene_segments → shuffle 随机镜头段顺序 →
     pick_scene_aware_start 段内取点 + 越界检查 + used_segments 冲突避让
     (含 1.5s 边缘间隙)
   - 无缓存/全冲突:回退 _calc_random_start_time(受控复用逻辑不变)
3. 一键生成路径同步改造(plan_generator_service + plan_generator_utils)
   - distribute_assets 新增 asset_scene_points 参数,7 个分配点统一
     走 _resolve_start_time(场景优先、随机兜底)
   - _fetch_asset_scene_points 读 metadata;预览随机模式不读 DB
4. 镜头段工具下沉 domain 层:build_scene_segments /
   pick_start_in_scene_segment / pick_scene_aware_start /
   extract_scene_points_from_metadata,clips.py 保留旧名兼容别名
   - 镜头段必须 shuffle 后遍历,不按固定顺序分配

测试:新增 19 个测试覆盖缓存解析(合法/脏数据/自动补0)、
段内取点/冲突避让/shuffle 覆盖多段、两条路径集成、后台写缓存。
全量 14032 单测通过。
2026-09-02 08:24:56 +08:00
saas-backend-agent 93f43a5759 ci: retrigger after ci-base image rebuild 2026-09-02 08:24:56 +08:00