yt-dlp 错误全解:每个错误的含义与真正有效的修复
作者 Tunelio 团队发布于
yt-dlp 在 YouTube 上几乎所有失败都源于三件事之一:构建过旧、缺少 JavaScript 运行时,或 YouTube 不信任的 IP 地址。先运行下面三条命令,它们能解决大多数报告。然后在目录里找到你的确切错误信息 —— 每一条都给出原因、第一步尝试,以及该错误的完整指南。
通用急救(先做这个)
yt-dlp -U # 或:pip install -U yt-dlp (发行版软件包落后数月)
curl -fsSL https://deno.land/install.sh | sh # JS 运行时 —— 2025 年起 YouTube 必需
yt-dlp -4 --rm-cache-dir -vU "URL" # IPv4、清空缓存、详细输出:看它在哪里失败从上到下读 -v 输出:调试头部显示版本、找到的 JS 运行时和 ffmpeg;第一个 WARNING 或 ERROR 告诉你哪个阶段失败 —— 信息请求(YouTube 不肯描述视频)、媒体下载(描述了但拒绝给文件),或后处理(ffmpeg)。下面的目录就是这样分组的。
信息阶段错误:YouTube 不愿和你对话
“Sign in to confirm you’re not a bot”
YouTube 把你的请求判为自动化 —— 数据中心或 IPv6 地址、没有 PO token、没有会话、请求量过大。修复顺序:更新、JS 运行时、-4,然后是隐私窗口中备用账号的 cookies,再是 PO token provider,最后是住宅出口。单靠 cookies 撑不久。
→ 完整指南:修复 “Sign in to confirm you’re not a bot”
“Unable to extract …”、“nsig extraction failed”、“Some formats may be missing”
YouTube 更改了播放器代码,你的 yt-dlp 无法解出新签名,或者没有 JavaScript 运行时来执行它。更新(稳定版未发布就用 nightly)并安装 Deno;如果装过过时的 YTNsigDeno 插件请卸载。旧构建上没有任何参数能修复这个问题。
“Video unavailable”、“Private video”、“HTTP Error 404: Not Found”
视频已删除、私密、受地区或会员限制 —— 或者 ID 打错了。在浏览器中检查 URL:那里也失败的话,yt-dlp 里什么都帮不上。下载途中的 404 则意味着签名媒体 URL 过期(用 -c 重新提取);播放列表中加 --ignore-errors 跳过失效条目。
“Cookies are no longer valid”、“could not find … cookies database”、年龄限制 / 仅会员
会话 cookies 会轮换和过期;从你持续使用的浏览器导出的文件立刻就是陈旧的,而主账号的 cookies 可能让账号被限制。从备用账号的隐私窗口导出一次,关闭窗口,传入 --cookies cookies.txt。年龄限制和仅会员视频需要能看到它们的账号的 cookies。
媒体阶段错误:YouTube 描述了视频却拒绝给文件
“HTTP Error 403: Forbidden”(常在第一块之后)
签名媒体 URL 与 YouTube 预期的客户端、IP 或 PO token 不匹配。更新并安装 JS 运行时,强制 IPv4,停止用 -f 强制 itag(改用 -S 排序),尝试另一个播放器客户端,提供 PO token;cookies 放最后 —— 它们可能造成媒体 403。数据中心和 IPv6 地址遇到这个的频率高得多。
“Requested format is not available”
你强制的 itag 在这个视频上不存在,或对你的客户端被 PO token 门控。用 -F 列出格式,然后表达偏好而不是指定 ID:-S "res:1080,ext:mp4"。如果 1080p 以上完全缺失,原因是 ffmpeg(用于合并)或 PO token。
下载极慢(每秒几 KB)、卡住、限速
限速是 YouTube 对错误 “n” 参数的回应 —— 几乎总是构建过旧或缺少 JS 运行时,不是你的网络。先更新;然后 --concurrent-fragments 4 对分片格式有帮助。批量运行时的速率限制是另一回事:加 sleep 参数。
代理错误:“Unable to connect to proxy”、“Missing dependencies for SOCKS support”、经代理仍被机器人验证
检查协议和端口(远程 DNS 用 socks5h://),为 SOCKS 安装 yt-dlp[default],并记住出口的信誉和你服务器的一样被打分 —— 数据中心代理继承同样的 403 和机器人验证;住宅出口有效,但整段视频都要经过它们。
后处理错误:ffmpeg
“ffmpeg not found”、“You have requested merging … but ffmpeg is not installed”
没有 ffmpeg,yt-dlp 会悄悄保存最佳单文件格式(通常 720p),也做不出 MP3。安装它(apt/brew/winget),打开新终端,或传入 --ffmpeg-location。在 yt-dlp -v 里检查 ffmpeg 那一行。
→ 完整指南:安装 ffmpeg 并让 yt-dlp 找到它
“Postprocessing: Conversion failed!”、输出是 .webm 而不是 .mp3
损坏的部分下载、非常旧的 ffmpeg,或根本没有 ffmpeg。删除 .part 文件,更新两个工具,用 -x --audio-format mp3 --audio-quality 0 重试 —— 或用 --audio-format best 保留原始 Opus/AAC,跳过转码。
代码中的错误:Python 的 DownloadError、卡死的异步服务器
yt-dlp 把失败包在 yt_dlp.utils.DownloadError 里,原始信息在其中 —— 按文本匹配(“Sign in to confirm”、“HTTP Error 403”、“Private video”)。它是同步的,每次提取约耗 1.2 秒 CPU;在事件循环上调用会冻结服务器 —— 请在线程池中运行并限制并发。
运行它安全吗、合法吗?
yt-dlp 本身开源,从官方发布或 pip 安装是安全的;Windows 构建上的杀毒标记是 PyInstaller 误报。风险在于假下载站、主账号的 cookies 和不受信任的插件。合法性取决于你下载什么以及身在何处。
把一个错误变成永久错误的做法
- 在紧密循环中重试机器人验证或 403 —— 让 IP 被永久标记的最快方式。
- 在服务器上传入个人 Google 账号的 cookies。
- 照搬旧教程强制 itag(-f 137+140)而不是 -S 排序。
- 还在用去年的发行版软件包,读论坛而不是更新。
- 轮换廉价数据中心代理并指望得到不同的信誉。
什么时候该停止修 yt-dlp
对少量个人下载,急救命令和上面的指南就够了。如果 yt-dlp 运行在机器人、应用或流水线里,上面的每个错误都会变成反复的运维任务 —— 更新、运行时、PO token、cookie 轮换、住宅代理、ffmpeg CPU。托管 API 对每个请求返回下载 URL,并把这一切留在服务端。Tunelio 是我们自己的服务,请自行权衡。新账号可获得 100 个免费额度。
来源
- yt-dlp README 与 wiki —— 选项参考、FAQ、PO token 指南、cookies 指南。
- yt-dlp issue 跟踪 —— #14680 与 #17395(403)、机器人验证与 nsig 讨论。
- 我们自己的测量(Tunelio 提取集群,2026):数据中心 IP 的挑战率、IPv6 拒绝、每次提取的 CPU。
常见问题
yt-dlp 错误最常见的单一原因是什么?
构建过旧。YouTube 每隔几周更改播放器;超过一个月的 yt-dlp 会以 403、限速、机器人验证或缺失格式失败。先更新,再做别的。
为什么 yt-dlp 在笔记本上能用,在服务器上不行?
IP 信誉:数据中心和 IPv6 地址被评为疑似机器人。先强制 IPv4;不够的话,用住宅出口或托管 API。
我需要 ffmpeg 和 Deno 吗?
要完整支持 YouTube 就需要:Deno(或 Node/Bun)解决 YouTube 的 JavaScript 挑战;ffmpeg 合并 1080p 以上的流并转换音频。
一出问题就该加 cookies 吗?
不。Cookies 只解决登录墙的情况,还可能造成媒体 403 或让账号被限制。先更新、装 JS 运行时、用 IPv4;备用账号的 cookies 放最后。
相关指南
- yt-dlp:"Sign in to confirm you're not a bot" 的含义与修复方法 →
- yt-dlp 403 Forbidden:为什么会发生,以及有效的修复顺序 →
- yt-dlp “HTTP Error 404: Not Found” —— 含义以及每种原因的修复方法 →
- 如何更新 yt-dlp —— 每种安装方式、nightly 渠道,以及为什么这很重要 →
- yt-dlp cookies:如何导出、如何使用,以及它们为什么会失效 →
- yt-dlp 与 ffmpeg:为什么需要它、如何安装,以及哪些命令会用到它 →
- yt-dlp 配合代理:语法、哪些代理对 YouTube 真正有效,以及代价是什么 →
- yt-dlp 转 MP3:正确命令、质量设置与元数据 →
- yt-dlp 音频:WebM/Opus、M4A/AAC 还是 MP3 —— 你该保留哪一个? →
- 从 Python 使用 yt-dlp:内嵌 API、选项、钩子,以及在服务器中运行 →
- yt-dlp 安全吗?坦诚地谈安全性、隐私和合法性 →
- 把 yt-dlp 做成 API:嵌入、自建 REST 封装,还是使用托管服务 →
- 无需维护的 yt-dlp 替代方案 →