Deep-Research 驱动的 YouTube 保险视频采集与预览系统 — 从 0 到 6,425 个视频的完整工程纪实
本项目目标:用「深度调研」的方式,系统性地把 YouTube 上与保险相关的高价值视频(美国/跨境年金与寿险、代理人展业培训、中文保险科普)批量归档下来,附带字幕与元数据,供后续做内容、培训与合规研究。
历时约 9 天,从环境搭建、并行调研测绘、批量下载工程,到踩遍 YouTube 反爬、文件名截断丢档、进程自杀等一系列坑并逐一修复,最终交付一个可搜索、可在线预览播放的归档库。本页把整个开发过程(含所有踩坑与修复)如实记录下来。
「下载全部保险视频」是无上限的,所以先用深度调研把版图测绘清楚,再有组织地下载,而不是盲目抓取。
≤720p mp4 + info.json + 封面 + 中英字幕(含自动字幕,利于转写);共享 archive.txt 断点续传/去重;磁盘低于 200GB 自动停采。安装 yt-dlp(standalone) + ffmpeg;验证本机(美国机房)可直连 YouTube(~100 MiB/s),端到端下载+合并+字幕全通,905GB 可用空间。
5 个调研代理并行产出结构化频道清单;同时跑 30 组中英检索枚举,两路合并去重,得到 1,571 命中视频 + 91 整频道目标。发现并补进 Doug Andrew、吉力说、奶爸保、紫荆保险规划等调研漏掉的高价值号。
download.sh(命中视频集) / download_channels.sh(整频道·带磁盘守卫+每频道 200 上限) / run_all.sh(4a→4b 编排)--download-archive,随时中断随时续;archive.txt 行数=权威「已完成」计数频道 [id]/日期 - 标题 [id].mp4密集请求触发 YouTube 对数据中心 IP 的反爬封禁;随后又踩到文件名截断丢档、字幕限流、进程自杀等坑。详见下方「三、踩过的坑」。核心应对是一个自驱动、会自愈的重试循环 retry_loop.sh。
上线实时状态站,随后按需求加了完整清单 CSV 导出与在线预览播放(HTTP Range 流式 + SRT→WebVTT 字幕)。详见「四、交付产出」。
已归档 6,425 个视频(远超 1,571 命中集,因整频道全采贡献了大部分)。剩余约 770 个命中视频被反爬硬卡、无 cookies 拿不到;用户确认只需已下载视频的预览,遂彻底停止全部下载,保留归档与预览。
这部分才是这个项目最有价值的「开发过程」——每个坑都真金白银踩过。
Sign in to confirm you're not a bot + session blocked for up to an hour;1,571 命中集里 736 条撞机器人验证、628 条撞会话限流,成功率一度只有 ~9%。retry_loop.sh:封禁时每 20min 探测一次、解除即续采、检测到 cookies.txt 自动切近满速、永不放弃。靠它把归档从 143 一路推到 6,000+。真正的钥匙是 登录小号的 cookies(外部依赖,非技术能绕过)。--trim-filenames 是「路径杀手」,导致丢档--trim-filenames 70,结果 archive 登记 374 但落盘只有 329 —— 丢了视频。频道/日期-标题[id].mp4 截成 20.mp4 这种,全塞进根目录且大量重名互相覆盖 → 同名互删就是丢档。(archive 数 > 落盘数 = 该症状的信号)%(channel).80s / %(title).65s(中文 65 字≈195B,留足 255B 分量上限)。再清理残件、用落盘文件名里的 id 重建 archive.txt,让受损视频干净重下。zh-Hans 自动字幕频繁 HTTP Error 429。en.*,zh.* 通配会为每个视频请求一大堆字幕语言变体,把 timedtext 接口打限流了。en,en-US,zh-Hans,zh-Hant + --sleep-subtitles 2,429 大幅下降。pkill -f 自杀坑(踩了 N 次 exit 144)pkill -f 'yt-dlp' 之类总把发起命令的 shell 自己也杀了(退出码 144)。pkill -f 匹配的是整条命令行——而我的命令行里就含有那个词(模式串本身、或结尾的 wc archive.txt 等裸串),于是自匹配。把方括号放在词首([y]t-dlp)没用,因为命令行别处仍有裸 yt-dlp。y[t]-dlp / retry_[l]oop / run_[a]ll / download_[c]hannels)且整条命令别再出现该裸串(连 echo 标签都不能带)。最稳还是 ps -o ppid= 顺藤摸到真正的父进程按 PID kill -9。download_channels.sh 被杀父后孤儿挂到 init(ppid=1) 仍在循环、每个频道 respawn 一个 yt-dlp;还一度和另一条管线双开=有被封风险。数据驱动仪表盘:实时读归档目录出数(已完成/字幕/频道/占用),含深度调研方法、选题逻辑、采集进展时间线、Top 频道与最新入库。
遍历所有 info.json 生成的目录:频道 / 标题 / 日期 / 时长 / 播放量 / 是否有字幕 / 链接,约 6,300 条,可下载可在线看。
缩略图墙 + 搜索 + 频道筛选 + 仅看有字幕;点开弹层播放器直接从本地文件流式播放(HTTP Range 206 支持拖动),.srt 即时转 WebVTT 显示字幕,附 YouTube 原片链接。后端 /api/videos、/video/:id、/thumb/:id、/subs/:id。
server.mjs)+ 单页 dist;反向代理走 vhost 分域 + certbot 证书。数据落盘 /Disk01/insurance-youtube。archive.txt、别数文件——下载中有分片临时文件、命名有边界情况,数文件会偏。pkill -f 会误伤自己——批量杀进程优先按 PID 顺进程树杀,模式匹配要防自匹配。本项目里你下达的每一条指令,按真实时间排列(UTC+8,取自会话记录时间戳)。
| # | 时间 UTC+8 | 指令 | 产出 / 结果 |
|---|---|---|---|
| 1 | 06-23 10:18 | /goal:帮我下载 YouTube 上所有跟保险相关的视频,用 deep research 模式 | 启动深度调研 + 批量下载;最终归档 6,400+ 视频 |
| 2 | 06-23 18:38 | 请将情况总结成网站,网址用 youtube.sinogenomics.com | 上线实时状态仪表盘 |
| 3 | 07-03 16:52 | 希望能预览一些视频,在网站中加入预览功能 | 加视频画廊 + 在线播放器(Range 流式 + 字幕) |
| 4 | 07-03 17:05 | 已经下了 6000 多个了,为什么还在下载?我只想要已下载视频的预览 | 说明「下载全部」目标仍在跑,澄清需求 |
| 5 | 07-03 17:18 | 整个任务全部停下来,不要再下载了 | 彻底停止所有下载进程 |
| 6 | 07-03 17:20 | 这个项目除了该站还有别的网站吗?(找开发过程记录站) | 确认只有一个站、无独立开发记录站 |
| 7 | 07-03 17:30 | 建一个开发过程记录网站,推到 baoxian-server,网址 dev.youtube.boihk.com | 本站(Build Journal)上线 |
| 8 | 07-03 17:35 | 把站点资料(除视频 / 字幕文件外)也推到 baoxian-server,用 youtube.boihk.com 访问 | 元数据镜像站上线(YouTube 嵌入播放) |
| 9 | 07-03 17:49 | 把我下过的所有命令总结成「命令日志」加到本站,含下命令时间 | 本表 ✅ |