断点续传与智能去重
当发送任务因程序崩溃、手动停止或网络中断而未完成时,你可以重新启动队列,程序会自动跳过已成功发送的弹幕,从断点处继续。
工作原理
程序在本地 SQLite 数据库中记录每条弹幕的发送结果。发送前会查询数据库,判断该弹幕是否已存在于目标视频中:
待发送弹幕 → 生成五维指纹
│
▼
查询本地数据库 (history.db)
│
┌───────────┼───────────┐
▼ ▼
已存在记录 无记录
(指纹+视频匹配) │
│ ▼
▼ 正常发送
自动跳过 (Skip)
不消耗延时等待
匹配规则(五维指纹)
程序使用「五维指纹」来判断两条弹幕是否完全一致,而不是简单的文本比对:
| 维度 | 字段 | 说明 |
|---|---|---|
| 1 | msg |
弹幕文本内容 |
| 2 | progress |
出现时间(毫秒级精度) |
| 3 | mode |
弹幕模式(滚动/底部/顶部) |
| 4 | fontsize |
字号大小 |
| 5 | color |
颜色值 |
只有当五维指纹完全相同 且 目标视频(BV 号 + 分 P cid)也相同时,才会判定为重复并跳过。
这种设计能精确区分「同一位置、同一内容但样式不同」的弹幕(例如一条白色滚动弹幕和一条彩色顶部弹幕),避免误跳过。
配置
| 配置项 | 说明 | 默认值 |
|---|---|---|
skip_sent |
是否启用断点续传(发送前查重) | 开启 |
关闭后,程序不会查询历史记录,每条弹幕都会正常发送(即使之前已发过)。
使用场景
场景 1:程序崩溃后恢复
正在发送 500 条弹幕,发送到第 200 条时程序意外退出。
操作:重新启动程序,打开同一个任务,点击启动队列。
结果:前 200 条已在数据库中有记录,程序自动跳过,从第 201 条继续发送。
场景 2:手动停止后继续
发送到一半手动点击了「紧急停止」。
操作:直接点击「启动队列」。
结果:已发送的弹幕被跳过,从未发送的弹幕继续。
场景 3:跨任务去重
你之前已经在某个视频上发送过一批弹幕,现在又用同一个 XML 文件创建了新任务。
操作:正常启动新任务。
结果:与之前发送记录匹配的弹幕会被跳过,只发送新增的弹幕。
查看跳过记录
在发送过程的日志面板中,跳过的弹幕会显示为 ⏭️ 跳过 状态,并标注原因(已有记录)。
发送完成后,结果摘要对话框中会显示跳过条数:
发送结果:
✅ 成功: 156 条
⏭️ 跳过: 44 条 (已有记录)
❌ 失败: 0 条
任务总结与失败弹幕导出
任务结束后,如果存在发送失败的弹幕,程序会弹出对话框询问「是否保存失败弹幕」:
- 是:将失败的弹幕导出为新的 XML 文件(仅包含失败的弹幕,不含已成功的)。
- 否:丢弃失败记录。
保存的 XML 文件可以直接用于创建新任务重新发送。