修复 yt-dlp 的 Signature Extraction Failed 错误

"Signature Extraction Failed" 是什么意思
当 yt-dlp 打印 Signature extraction failed: Some formats may be missing 或 Could not find JS function 时,说明 YouTube 又换了一次给每个视频流 URL 签名的那份 JavaScript player 文件。每条 YouTube 视频流 URL 都带一个签名令牌,需要 player JS 内部的一个 JS 函数来解。一旦 YouTube 改了这个函数(基本每几周一次),老版本的 yt-dlp 就找不到新的函数名,提取就失败了。
视频页面本身在浏览器里照样能打开 —— 所以这个错看着让人意外 —— 但下载需要解出来的令牌,而 yt-dlp 还没学到新模式。
怎么在 yt-dlp 这边修
最靠谱的办法是升级 yt-dlp:
# pip 安装
pip install -U yt-dlp
# brew
brew upgrade yt-dlp
# pipx
pipx upgrade yt-dlp
# 独立二进制
yt-dlp -U
如果你已经是最最新的版本但还是报这个错:
- 去 yt-dlp 的 GitHub Issues 看一下 —— 通常会有一个跟踪当前签名变更的 thread,并且补丁已经合到了
master。 - 直接从 master 装:
pip install -U "yt-dlp[default] @ git+https://github.com/yt-dlp/yt-dlp@master" - 等 12–48 小时,看打了 tag 的发布版本是否带上了这个 fix。
为什么这事一直在发生
YouTube 故意会轮换签名方案来增加爬虫的成本。套路总是这样:发布一个新的 player JS,签名解密函数换个名字、用不同的方式被 minify,然后每个下载器都得重新识别这个函数、改写自己的 extractor。yt-dlp 的维护者会盯着这些变化发更新,但总会有那么一段时间,YouTube 这边的新变化比 yt-dlp 的最新 release 跑得更快。
改用 Any4K
Any4K 把签名提取放在服务端,作为日常运营的一部分维护。YouTube 一旦换了 player JS,我们的基础设施会随之更新,下载继续可用 —— 一般在一个小时之内追上,而不是 48 小时。你这边什么都不用更新:把链接粘到 any4k.com,下载即可。
签名轮换期间 Any4K 的好处
- 不用升级 yt-dlp:我们在自己这边出 fix。
- 不用装 nightly:网页工具始终是最新的。
- 不管 YouTube 怎么改,流程都一样:粘贴、选清晰度、保存。
- 多平台:YouTube、TikTok、Twitter、Instagram、Facebook、Reddit、Shorts。
什么时候 yt-dlp 仍然是更好的选择
成百上千个视频的批量归档、内嵌字幕抽取、频道订阅、脚本自动化这些场景里,yt-dlp 依然是最深的工具。这种用法下就接受签名错误是个常规维护事件 —— 在 cron 里加一行 yt-dlp -U 就好。
结论
"Signature extraction failed" 其实就是 YouTube 在换锁。yt-dlp 会定期发新钥匙;中间的空档里,Any4K Video Downloader 把签名轮换放在服务端处理,让你的下载继续顺利进行。