Clipr
下载

博客

批量下载:过夜不用盯进度条

工作线程、指数退避、暂停续传与按任务日志。如何把两百条链接真正跑完,而不是半夜起来点重试。

文章头图(SVG,1200×630)

周五 18:00,制片往群里扔了 187 条 YouTube 链接,问周一早上能不能齐。你要么周六盯着窗口刷新,要么搭一条夜里自己跑、早上只收尸的队列。

这篇写第二条路。第一条伤周末,更伤队列健康。

多数人卡在这里

并发拉到「最大」然后看卡死。多数批量失败不是下载失败,是礼貌失败:同一边缘 IP 对同一域名并行拉满会触发按域限流,队列再 naive 重试 → 软封 →下一批更慢。解法是按域小池子 + 全局上限,不是全局大池子。

不惹 CDN 生气的线程模型

Clipr 默认大致是:

  • 短内容 CDN(抖音、Reels 类):每域最多 2 并发。
  • YouTube / Vimeo 类:每域最多 3。
  • 明显限流的站:每域 1。

笔记本全局 4、台式机 NVMe + 千兆可 8。先量再拉,没数据就狂拉,你会变成滥用工单里的那个 IP。

两百条从进到出

  1. 暂存:URL 列表进面板,先跑去重。所谓「两百条」常有十几条重复、几条已归档。
  2. 抽检:按来源排序,每类抽一条看格式。若某账号只有带水印档,现在就要决定接受还是整批跳过。
  3. 排期:若半夜开跑,每域并发可减一——凌晨 CDN 虽闲,边缘轮换时仍易撞桶;错峰 30–40 秒开跑有时能避开整点切桶。
  4. 开跑:看前 10 条都成功再合盖;Mac 接电合盖通常可行。
  5. 早班分拣:完成 / 终失败 / 可重试暂停 三类;可重试里若缺登录态,先在内置浏览器重新登录再点重试,别同 cookie 死循环。

若早班分拣超过十分钟,多半是队列配置问题,不是机器问题。

暂停、续传、重试

  • 暂停(单任务或全局):冻住 worker,保留 partial——适合临时抢带宽给视频会议。
  • 续传:CDN 支持 Range 时续字节;否则整文件重来但跳过已拉 manifest。
  • 带新会话重试:中途 403 多半是 cookie 老了。开嵌入浏览器重新登录,再重试——别用死 jar 循环。

三者应是三个按钮;「智能重试」若混在一起,日志会撒谎。

能贴进工单的日志

单行至少要有:UTC 时间、job id、源站、URL、状态、原因、尝试次数、退避、会话是否登录、cookie 年龄。支持工程师一轮就能缩小范围——可观测性在 功能 里有写。

不行怎么办?

  • **整批卡住只剩一个慢任务:**先看磁盘 I/O。很多「网络卡」是 USB 盘队列深度炸了,工作目录改内置盘。
  • **整点前后 429 暴增:**不少 CDN 按整点轮换 token bucket;大批量起点错开 30–40 秒。
  • **VPN 断:**开「断网即停 worker」,续传比救损坏 partial 快。
  • **重试成功但成片没声:**可能落到纯音频轨;日志里应记每次选的 format ID。
  • **半夜盘满:**暂存阶段按预估体积排序;走 Wi‑Fi 时设「单文件超 4GB 则中止」之类的护栏。

两种不值的复杂化

  • cron 半夜零点自动开跑:CDN 不在乎几点,你的笔记本才在乎。有输入就跑。
  • 两台机器拆同一歌单:省二十分钟,多一个去重地狱。第二台去跑另一批

收尾

批量下载成熟后,戏剧性会下降——这才是对的。第一版你会盯着一个吓人的「开始」;成熟版是一次小配置、早上三个按钮、以及一条能贴 Slack 的 job 日志。

想先看队列 UI,到 下载 装 beta,用公有领域素材试跑 30 条。无限日Pull 等档位见 价格