feat: SceneChange 场景检测前置到渲染前 + 场景点缓存到素材 metadata #1622
Merged
auto-approve-bot
merged 2 commits from 2026-09-02 08:40:37 +08:00
feat/scene-change-pre-render into develop
2 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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 单测通过。
|
||
|
|
93f43a5759 | ci: retrigger after ci-base image rebuild |