频道 6000 条视频归档,我按分区存盘符把路径搞断了
频道 6000 多条视频的元数据,我一开始全塞进一个目录,文件名直接用 video id。后来想按发布日期分年、分月归档,顺手写了个脚本把文件搬到 /archive/2023/07/<id>.info.json 这种路径。搬完发现有一批视频查不到了——问题出在 yt-dlp 的 --download-archive 记录的是「已下载」的 id 列表,和我自己搬文件没关系,但我在搬运脚本里把 --paths 写成了按年分目录,重跑补抓时 yt-dlp 认为这些 id 已在 archive 里,直接跳过,新路径下就永远缺文件。
我现在的做法是把元数据和媒体分开管:媒体留在扁平目录,元数据用一个小脚本按 upload_date 建索引,路径只做软链。抓取命令固定成:
yt-dlp --flat-playlist --dump-json \
--download-archive archive.txt \
-o "media/%(id)s.%(ext)s" \
"https://www.youtube.com/@channel/videos"
补抓时先 --flat-playlist 拿全量 id,再和 archive.txt 做差集,差集里的 id 单独重抓,不依赖目录结构。这样搬文件不会影响「是否已抓」的判断。
代价是每次补抓要多跑一遍列表页,6000 条大概多花几分钟;好处是 archive 和文件路径彻底解耦。踩过的坑是:archive.txt 里混进过手动删掉的 id,导致那几条视频一直补不回来,后来我加了一步校验——对 archive 里的 id 逐个检查媒体文件是否存在,不存在就移出 archive 再重抓。
边界情况:如果视频被平台下架,id 还在 archive 里,校验会反复报缺失,需要单独记一个 gone.txt 排除。另外 --flat-playlist 拿到的 upload_date 有时是空的,按日期分索引前要先过滤。
你们补抓历史视频时,archive 和实际文件的一致性是怎么校验的?
0
赞同度 100% · 0 条评论 · 1 阅读
0 条评论
还没有评论,写下第一条。