yt-dlp 更新损坏 — bad local file header 的成因与修复
问题表现
打开 Seal → 粘贴链接 → 点下载 → 报错 bad local file header 或类似的 Python 解压/反序列化错误。
这个错误说明 Seal 内置的 yt-dlp 内核 Python 包不完整或已损坏。
成因:v1.12.0 及更早版本的时序漏洞
CHANGELOG v1.12.1 的 Known issues 里明确写了:
yt-dlp might be broken if you tried to download something while it was updating (
bad local file header)
具体成因:
- Seal 后台开始自动更新 yt-dlp(aria2c 下载新的 Python 包)
- 用户同时发起了一次下载请求
- 更新还没完全下完,Python 包处于"写到一半"的状态
- Seal 用这个残缺的包尝试解析视频 → Python 解压时读不到正确的文件头 → 报
bad local file header
v1.12.1 的防护
v1.12.1 新增了一个简单有效的保护:
Block downloads when updating yt-dlp
翻译过来就是:当 Seal 正在更新 yt-dlp 内核时,自动阻塞下载请求,等更新完再放行。
v1.12.1 及以上版本(v1.13.0、v1.13.1)默认开启这个保护。
修复方法
方法一:手动重新触发 yt-dlp 更新(推荐)
- 打开 Seal 设置
- 找到 yt-dlp 相关设置
- 手动触发一次更新(或者关闭自动更新后再开启,强制重新拉完整包)
- 更新完成后重启 Seal 再试
方法二:清除 Seal 应用数据(彻底但激进)
如果方法一不行,说明损坏比较严重:
- 系统设置 → 应用 → Seal → 存储 → 清除数据
- ⚠️ 注意:这会清掉下载历史、Cookie、命令模板等所有本地数据
- 清除后重新打开 Seal,等待 yt-dlp 重新下载
- 如果你之前导出了历史,可以重新导入恢复
方法三:卸载重装
最后手段。卸载 Seal → 重新安装最新版本 → 首次打开等待 yt-dlp 自动下载完成(耐心等几秒)再用。
怎么避免
- 用 v1.12.1 及以上版本(v1.13.1 是当前推荐稳定版):自动有"更新期间阻塞下载"的保护
- 更新 yt-dlp 时别同时发起下载请求
- 如果经常遇到,建议把 yt-dlp 更新间隔设长一点(1-3 天足够),或者手动更新更可控
继续到 解析失败怎么办 看另一个高频问题。