[P2] 降重增强:节奏曲线模板多样化,变体间片段时长序列差异化 #1768

Closed
opened 2026-09-07 20:08:39 +08:00 by xiaoxia · 1 comment
Owner

背景

当前所有变体的片段时长是平均分配的(配音总时长 ÷ 片段数),导致所有变体的节奏曲线完全一致。这是结构层面查重识别的关键特征。

目标

引入节奏模板池,让不同变体拥有不同的片段时长分布,从而产生完全不同的视频节奏感受。

方案

核心思路:权重比例替代平均分配

当前逻辑:

配音总时长 T ÷ 片段数 N = 每个片段时长 T/N(所有片段一样长)

新逻辑:

模板定义权重序列 [w1, w2, ..., wN]
权重总和 W = w1 + w2 + ... + wN
片段i时长 = T × wi / W

节奏模板池(预设 6-8 种)

模板A: [2, 1, 3, 1, 2]  — 中间长,两头短(叙事型)
模板B: [1, 1, 1, 1, 1]  — 均匀分配(当前逻辑,保留兼容)
模板C: [1, 2, 1, 2, 1]  — 波浪式(节奏感强)
模板D: [3, 1, 1, 1, 3]  — 两头重中间快切(冲击力型)
模板E: [1, 1, 3, 2, 1]  — 渐强收尾(悬念型)
模板F: [2, 2, 1, 1, 2]  — 双峰结构
模板G: [1, 3, 2, 1, 1]  — 前段展开型
模板H: [3, 2, 1, 2, 1]  — 渐弱收束型

变体分配

  1. 批量生成时,每个变体随机选一个节奏模板(基于 variantSeed)
  2. 同一批变体中,节奏模板不重复

代码改动点

  1. variant_plan_selector.py

    • 新增 RHYTHM_TEMPLATES 常量池
    • 片段时长计算从 T/N 改为 T × weight / total_weight
    • 变体生成时随机选节奏模板
  2. 数据结构

    • edit plan 中每个片段记录实际时长(不再假设等分)
    • 现有平均分配作为模板B(权重全1)保留,向下兼容
  3. 渲染/预览

    • 确保片段实际时长被正确传入 FFmpeg 裁剪
    • 前端预览适配不等长片段

与片段拆分的协同(进阶)

后续可进一步支持:同一素材在不同变体中被拆成不同段数。例如:

  • 变体A:素材1整段用(8秒)
  • 变体B:素材1拆成两段(3秒+5秒),中间插入其他素材

这需要更复杂的选片逻辑,作为后续迭代。

约束

  • 不破坏现有能力:模板B(全1权重)= 当前平均分配逻辑,现有行为完全保留
  • 配音对齐:片段时长总和必须严格等于配音总时长
  • 最小片段时长:每个片段至少 2 秒(避免过短的无效画面)
  • 最大片段时长:不超过素材实际可用时长的 90%

验收标准

  1. 批量生成3个视频时,3个视频的片段时长序列至少有2组明显不同
  2. 片段时长总和 = 配音总时长(误差 ≤ 0.5秒)
  3. 每个片段时长 ≥ 2秒,≤ 素材可用时长
  4. 渲染成片时长与配音时长一致
  5. 单视频模式不受影响(保持平均分配即可)
## 背景 当前所有变体的片段时长是平均分配的(配音总时长 ÷ 片段数),导致所有变体的节奏曲线完全一致。这是结构层面查重识别的关键特征。 ## 目标 引入节奏模板池,让不同变体拥有不同的片段时长分布,从而产生完全不同的视频节奏感受。 ## 方案 ### 核心思路:权重比例替代平均分配 **当前逻辑:** ``` 配音总时长 T ÷ 片段数 N = 每个片段时长 T/N(所有片段一样长) ``` **新逻辑:** ``` 模板定义权重序列 [w1, w2, ..., wN] 权重总和 W = w1 + w2 + ... + wN 片段i时长 = T × wi / W ``` ### 节奏模板池(预设 6-8 种) ``` 模板A: [2, 1, 3, 1, 2] — 中间长,两头短(叙事型) 模板B: [1, 1, 1, 1, 1] — 均匀分配(当前逻辑,保留兼容) 模板C: [1, 2, 1, 2, 1] — 波浪式(节奏感强) 模板D: [3, 1, 1, 1, 3] — 两头重中间快切(冲击力型) 模板E: [1, 1, 3, 2, 1] — 渐强收尾(悬念型) 模板F: [2, 2, 1, 1, 2] — 双峰结构 模板G: [1, 3, 2, 1, 1] — 前段展开型 模板H: [3, 2, 1, 2, 1] — 渐弱收束型 ``` ### 变体分配 1. 批量生成时,每个变体随机选一个节奏模板(基于 variantSeed) 2. 同一批变体中,节奏模板不重复 ### 代码改动点 1. **variant_plan_selector.py**: - 新增 `RHYTHM_TEMPLATES` 常量池 - 片段时长计算从 `T/N` 改为 `T × weight / total_weight` - 变体生成时随机选节奏模板 2. **数据结构**: - edit plan 中每个片段记录实际时长(不再假设等分) - 现有平均分配作为模板B(权重全1)保留,向下兼容 3. **渲染/预览**: - 确保片段实际时长被正确传入 FFmpeg 裁剪 - 前端预览适配不等长片段 ### 与片段拆分的协同(进阶) 后续可进一步支持:同一素材在不同变体中被拆成不同段数。例如: - 变体A:素材1整段用(8秒) - 变体B:素材1拆成两段(3秒+5秒),中间插入其他素材 这需要更复杂的选片逻辑,作为后续迭代。 ### 约束 - **不破坏现有能力**:模板B(全1权重)= 当前平均分配逻辑,现有行为完全保留 - **配音对齐**:片段时长总和必须严格等于配音总时长 - **最小片段时长**:每个片段至少 2 秒(避免过短的无效画面) - **最大片段时长**:不超过素材实际可用时长的 90% ## 验收标准 1. 批量生成3个视频时,3个视频的片段时长序列至少有2组明显不同 2. 片段时长总和 = 配音总时长(误差 ≤ 0.5秒) 3. 每个片段时长 ≥ 2秒,≤ 素材可用时长 4. 渲染成片时长与配音时长一致 5. 单视频模式不受影响(保持平均分配即可)
Author
Owner

已完成。PR #1788(feat: 8种预设+时长钳制+误差校验)已合并 develop。RHYTHM_TEMPLATES 从 6→8 种,新增 MIN_CLIP_DURATION=2.0 钳制、asset_durations 参数控制最大片段≤素材90%、误差≤0.5s 校验。

已完成。PR #1788(feat: 8种预设+时长钳制+误差校验)已合并 develop。RHYTHM_TEMPLATES 从 6→8 种,新增 MIN_CLIP_DURATION=2.0 钳制、asset_durations 参数控制最大片段≤素材90%、误差≤0.5s 校验。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: xiaoxia/xiaoxia-saas#1768