feat: 素材分配顺序随机打乱 + MediaKit SceneChange智能选帧 #1618
Reference in New Issue
Block a user
Delete Branch "feat/scene-change-random-shuffle"
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?
变更内容
第一部分:素材分配顺序随机打乱
create_clips_from_assets_editor中 segments 处理顺序通过random.shuffle随机化clips_data最终按原始 segment order 排序后返回第二部分:MediaKit SceneChange 智能选帧
mediakit_client.py新增detect_scene_changes方法_update_mediakit_recommendations_async后台任务改用 SceneChangeanalyze_videos保留为 fallback降级策略(全覆盖)
测试
tests/unit/test_scene_change_shuffle.py(12个测试用例)test_editor_clips_random_start.py适配 shuffle 逻辑【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
_update_mediakit_recommendations_async函数的重构中,原有的with SessionLocal() as db:上下文管理器以及asset_repo和plan_svc的初始化代码被移除,但函数体中仍然使用了这些未定义的变量(如第 963 行左右的plan_svc.get_clips和第 981 行左右的asset_repo.find_by_ids)。这将导致函数运行时抛出NameError。db、asset_repo和plan_svc之前已正确实例化。例如:💡 改进建议(不阻塞合并)
_update_mediakit_recommendations_async函数中,_get_other_segments函数定义在循环内部,且在遍历asset_clips的内层循环中被反复调用。该函数每次调用都会重新遍历clips_by_asset并进行集合合并操作,导致时间复杂度接近 O(N^2)。虽然单个视频的片段数通常不多,但建议将历史区间和其他片段的公共部分提取到循环外计算,以提升性能。✅ 良好实践
_build_scene_segments和_pick_start_in_scene_segment辅助函数职责单一,逻辑清晰。test_scene_change_shuffle.py覆盖了新增的随机打乱和场景分配逻辑,测试用例编写较为充分。🤖 由 AI 代码审查机器人自动生成 | 2026-09-01 13:23:11 | 模型:
🚀 预览环境已部署
🗑️ 预览环境已清理
PR #1618 已关闭或合并,对应的预览环境已被清理。