feat: 预览生成支持随机选素材 + 随机截取片段 (#1256) #1268
Reference in New Issue
Block a user
Delete Branch "feature/1256-random-asset-selection-preview"
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?
改动概述
实现 #1256 后端部分:预览生成时支持随机选择素材组合 + 在素材时长范围内随机截取片段。
具体改动
1. EditPlanClip.assign_asset()
start_time: float | None = None2. distribute_assets()
random_selection: bool = False— 打乱素材顺序后分配asset_durations: dict[str, float] | None = None— 用于计算随机 start_time3. _calc_random_start_time()
random.uniform(0, max(0, asset_duration - clip_duration))4. PlanGeneratorService
random_preview: bool = False参数测试
使用方式
c9d3c62aeatoc9afa34370b55664ce09to33e977cc2a代码审查结果 - PR #1268
⚠️ 问题(1个需要修改)
_fetch_asset_durations方法在循环中逐个调用self._asset_repo.get(asset_id)。当传入的素材列表较长时(如 50 个素材),将触发 50 次数据库查询,严重影响接口响应速度。asset_repo中实现批量查询方法(如get_durations_map或get_by_ids),一次性获取所有素材的时长信息,避免循环查询数据库。💡 建议(2个可选)
random_preview=True但self._asset_repo为 None 时,代码会静默降级(素材会被随机打乱,但start_time不会被随机设置)。建议在random_preview为 True 时强制要求注入asset_repo,或者在日志中记录警告,以免产生不符合预期的“半随机”结果。assign_asset方法的文档注释描述“否则保持默认 0.0”,但实际代码逻辑是“如果start_time无效(负数),则保持原对象的start_time不变”。建议修正文档注释以匹配实际行为,或者修改代码逻辑使其在传入无效值时重置为 0.0。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-08-07 11:39:29 | 模型:
🗑️ 预览环境已清理
PR #1268 已关闭或合并,对应的预览环境已被清理。