[P0] 查重优化: 动态抽帧 + 滑动窗口时序匹配 #1659

Closed
opened 2026-09-03 18:44:18 +08:00 by xiaoxia · 0 comments
Owner

背景

当前固定抽10帧,短视频冗余、长视频不足。整段平均距离无法定位重复片段。

任务

1. 动态抽帧策略

改造 apps/worker/video_processing/dedup.pycompute_fingerprint():

  • 计算连续帧间灰度差异,差异 > 30 标记为候选关键帧
  • 最小间隔 1 秒,最多 30 帧,最少 5 帧
  • 长视频(>3分钟)每 30 秒一个分段,每段至少抽 2 帧
  • 先降采样到 320x240 再计算帧差,降低开销

2. 滑动窗口时序匹配

新增 find_duplicate_segments() 函数:

  • 对查询视频每帧找目标视频的最小汉明距离帧
  • 距离 ≤ 8 视为匹配
  • 连续匹配 ≥ 5 帧(约 2.5 秒)才算一段重复
  • 允许最大间隙 max_gap=1(容忍个别不匹配帧)
  • 输出重复片段列表

优先级

P0

依赖

Issue #1657(分片存储)

技术债务约束(铁律)

  • 新代码必须有单元测试覆盖(每个新增/修改函数都要有测试)
  • API 向后兼容:旧字段保留不删,新字段是扩展不是替换
  • 旧逻辑代码改造完成后直接替换,不留 if/else 分支兼容新旧两套
  • staging 先验证通过再上生产
## 背景 当前固定抽10帧,短视频冗余、长视频不足。整段平均距离无法定位重复片段。 ## 任务 ### 1. 动态抽帧策略 改造 `apps/worker/video_processing/dedup.py` 的 `compute_fingerprint()`: - 计算连续帧间灰度差异,差异 > 30 标记为候选关键帧 - 最小间隔 1 秒,最多 30 帧,最少 5 帧 - 长视频(>3分钟)每 30 秒一个分段,每段至少抽 2 帧 - 先降采样到 320x240 再计算帧差,降低开销 ### 2. 滑动窗口时序匹配 新增 `find_duplicate_segments()` 函数: - 对查询视频每帧找目标视频的最小汉明距离帧 - 距离 ≤ 8 视为匹配 - 连续匹配 ≥ 5 帧(约 2.5 秒)才算一段重复 - 允许最大间隙 max_gap=1(容忍个别不匹配帧) - 输出重复片段列表 ## 优先级 P0 ## 依赖 Issue #1657(分片存储) ## 技术债务约束(铁律) - 新代码必须有单元测试覆盖(每个新增/修改函数都要有测试) - API 向后兼容:旧字段保留不删,新字段是扩展不是替换 - 旧逻辑代码改造完成后直接替换,不留 if/else 分支兼容新旧两套 - staging 先验证通过再上生产
xiaoxia added this to the 技术债务与优化 milestone 2026-09-03 18:44:18 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: xiaoxia/xiaoxia-saas#1659