前提
-
- 按照顺序构建一个动作候选池
find_best_action_assignment
find_best_action_assignment 能在「要填满一段 target_duration 的同时」,让最后一个动作的拉伸/压缩量最小化,并在可选动作数量上灵活权衡。这样,每个 segment 都能找到一个“最合适”的动作组合,保证整体节奏的连贯与精度。
find_best_action_assignment
函数的核心思路,是在可用动作列表中,暴力枚举不同数量的动作组合,针对每一种组合:
-
拆分「前缀 + 最后一个动作」
- 对于候选的前
n
个动作(actions_subset = available_actions[:n]
),把前n-1
个动作的时长直接累加,得到prefix_duration
; - 最后一个动作的原始时长记作
last_action_original
。
- 对于候选的前