feat: SceneChange 场景检测前置到渲染前 + 场景点缓存到素材 metadata #1622
Reference in New Issue
Block a user
Delete Branch "feat/scene-change-pre-render"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
依赖
基于 #1620(评分噪声)分支,合并顺序:#1620 → 本 PR。
问题
SceneChange 场景检测是 from-assets 接口返回后的后台任务(
_update_mediakit_recommendations_async):视频已用_calc_random_start_time随机起点渲染,检测结果只更新 DB 里的 start_time,对当前成片查重率完全无作用。且镜头段按固定顺序分配(第 N 个 clip 固定分第 N 段),同样素材组合起始帧仍相同。改动
场景点缓存到素材 metadata:
scene_change_points: list[float]。后台任务检测前查 metadata 缓存命中则跳过 MediaKit 调用;detect_scene_changes成功后写入 metadata 并持久化,后续生成直接复用。from-assets 渲染前同步读缓存(clips.py):
extract_scene_points_from_metadata读缓存build_scene_segments→ random.shuffle 镜头段 → 段内随机取点 → 越界检查 → 与 used_segments 冲突避让(含 1.5s 边缘间隙),第一个不冲突段即用_calc_random_start_time(受控复用逻辑不变)一键生成路径同步改造(plan_generator_service + plan_generator_utils):
distribute_assets新增asset_scene_points参数,7 个素材分配点统一走_resolve_start_time(场景优先、随机兜底);预览随机模式不读 DB。工具函数下沉 domain 层:
build_scene_segments/pick_start_in_scene_segment/pick_scene_aware_start/extract_scene_points_from_metadata,两条路径共用;clips.py 保留旧名别名兼容。测试
新增 19 个测试(test_scene_change_prerender.py):缓存解析(合法/脏数据/自动补 0/排序/负值拒绝)、段内取点边界、冲突避让、shuffle 覆盖多个镜头段、两条路径集成验证起点落在镜头段内、后台任务写缓存验证。全量 14032 单测通过。
不改动:
_calc_random_start_time(保留为兜底)、dedup 查重逻辑、降级策略(analyze_videos fallback 保持)。🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
现状问题: - 场景检测是接口返回后的后台任务,视频已用随机 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 单测通过。b153fd9675toc4068c1d3f🗑️ 预览环境已清理
PR #1622 已关闭或合并,对应的预览环境已被清理。