跳到正文

yt-dlp “HTTP Error 404: Not Found” —— 含义以及每种原因的修复方法

作者 Tunelio 团队发布于

yt-dlp 的 404 意味着它请求的东西在那个地址已经不存在了。通常就是视频本身:被删除、被设为私密,或 ID 打错了。有时是签名 URL 已过期的媒体分片、播放列表中被移除的条目,或者过时的 yt-dlp 在请求 YouTube 已迁移的端点。在浏览器里检查 URL,更新 yt-dlp,再读 -v 输出 —— 下面的章节会告诉你属于哪种情况。

先运行两条命令

yt-dlp -U                       # 过时的构建会在 YouTube 已迁移的端点上 404
yt-dlp -vU --rm-cache-dir "URL"  # 详细模式:404 发生在哪里 —— 信息页、API 调用还是媒体分片?

然后在浏览器中打开同一 URL。如果浏览器也显示 “Video unavailable”,任何 yt-dlp 选项都无济于事;如果浏览器能播放,原因就是下面的技术性原因之一。

原因 1:视频已删除、私密或 ID 错误

最常见的 404。视频会被上传者删除、因政策下架,或改为私密/受限。视频 ID 恰好 11 个字符(字母、数字、- 和 _);复制的 URL 多一个字符、少一个字符或 ID 里混入跟踪参数,都会得到干净的 404。yt-dlp 通常把这些报告为 “Video unavailable”、“This video has been removed” 或 “Private video” 而不是原始 404,但某些路径会直接显示 HTTP 状态。

# 自己规范化 URL:watch?v=ID、youtu.be/ID、shorts/ID 都可以
yt-dlp "https://www.youtube.com/watch?v=dQw4w9WgXcQ"

与你账号共享的私密视频需要该账号的 cookies(见 cookies 指南);年龄限制视频会给出不同的错误,同样需要 cookies 或另一个客户端。

原因 2:媒体 URL 过期(下载中途或分片 404)

yt-dlp 拿到的 googlevideo URL 是签名的,有效期约六小时。如果下载被暂停、很久之后再恢复,或脚本提取了 URL 却在数小时后才使用,媒体服务器会返回 404(或 403)。分片格式会显示为 “fragment N not found”。重新运行提取 —— yt-dlp -c 会用新 URL 续传文件。

yt-dlp -c --fragment-retries 10 --retries 5 "URL"

原因 3:播放列表或频道包含已移除的条目

yt-dlp --ignore-errors --download-archive done.txt "PLAYLIST_URL"

播放列表会保留已不存在视频的引用。没有 --ignore-errors(-i)时,yt-dlp 在第一个失效条目就中止整个运行;加上它,该条目会被跳过并记录。--download-archive 让重跑变成增量的,不必每次都撞上同样的失效条目。

原因 4:过时的 yt-dlp 请求了已迁移的端点

YouTube 会更改内部 API 路径和播放器资源位置。几个月前的 yt-dlp 可能请求一个不再存在的播放器 JS 文件或 API 路由,并把得到的 404 报告为提取失败。只有更新才能解决(见更新指南)—— 并确认 PATH 中的副本就是你更新的那个。

原因 5:以 404 形式出现的地区与账号限制

某些地区封锁或仅会员可见的视频会返回 “not available” 页面,少数代码路径会将其报告为 404。地区封锁可换网络或用代理(代理指南);会员专属内容需要已订阅账号的 cookies。

症状 → 原因

  • 浏览器也说不可用 → 已删除/私密/ID 错误(原因 1)。你这边没什么可修的。
  • 浏览器能播放;-v 显示播放器/API URL 上 404 → yt-dlp 过时(原因 4)。
  • 下载开始后在分片或续传时 404 → 签名 URL 过期(原因 2);用 -c 重新提取。
  • 只有部分播放列表条目失败 → 已移除的条目(原因 3);加 --ignore-errors。
  • 只在服务器上失败,家里正常 → 地区/IP(原因 5)—— 或其实是被误读的 403;见 403 指南。

在脚本或机器人中

把 404 视为该视频的永久失败(不要循环重试 —— 对已删除的视频重试毫无意义,只会消耗你的 IP 信誉),记录视频 ID 和确切信息,然后继续。如果你提前解析 URL,务必在下载前重新解析,而不是缓存签名链接。

托管 API 会替你做这种分类:Tunelio(我们自己的服务)对私密或已删除的视频返回带说明的清晰 404 并退还该请求的额度,你的机器人无需解析 yt-dlp 输出就能回复用户。新账号可获得 100 个免费额度。

来源

  • yt-dlp README —— 下载选项(-c、--fragment-retries、--retries)、--ignore-errors、--download-archive。
  • yt-dlp wiki —— 关于 “Video unavailable” 与过时版本的 FAQ。
  • yt-dlp issue 跟踪 —— 与过期分片 URL 和迁移的播放器资源相关的 404 报告。

常见问题

404 是不是说明我的 IP 被封了?

不是 —— 封锁表现为 403 或机器人验证信息。404 表示该 URL 上不存在这个资源:通常是已删除/私密的视频、过期的媒体链接,或过时的 yt-dlp 在请求已迁移的端点。

如何用 yt-dlp 下载私密视频?

只有你的账号能看到它时才行:传入该账号的 cookies(从隐私窗口导出的 --cookies cookies.txt)。否则它依然是 404/不可用。

为什么播放列表在 404 处停下?

默认情况下 yt-dlp 在第一个错误处中止。加 --ignore-errors 跳过失效条目,加 --download-archive 让重跑变成增量。

视频昨天还能播,今天 404 —— 变了什么?

要么上传者删除或设为私密了它,要么你复用了已过期(约 6 小时)的签名媒体 URL。重新运行提取;如果浏览器也失败,视频已经没了。

相关指南