yt-dlp cookies:如何导出、如何使用,以及它们为什么会失效
作者 Tunelio 团队发布于
Cookies 让 yt-dlp 出示一个真实的 YouTube 会话,从而绕过 “Sign in to confirm you’re not a bot”,并解锁年龄限制或会员专属视频。做错了,会让你的 Google 账号被限制,而且一天后照样失效。本文给出安全做法:隐私窗口里的备用账号、导出一次,以及配套参数。
简短版本
# 1. 隐私窗口 → 登录一个备用 Google 账号 → 打开 https://www.youtube.com/robots.txt
# 2. 用 "Get cookies.txt LOCALLY" 类扩展导出 cookies.txt → 关闭窗口
yt-dlp --cookies cookies.txt -4 "https://youtu.be/dQw4w9WgXcQ"这就是 yt-dlp 维护者推荐的完整做法:一个没人再碰的会话,从一个不会轮换 token 的页面导出,之后不再在浏览器里打开。下文解释每一步为什么重要,以及 cookies 仍然失败时该怎么办。
什么时候真的需要 cookies
- YouTube 返回 “Sign in to confirm you’re not a bot”,而更新 yt-dlp、安装 JS 运行时和强制 IPv4 都没有解决。
- 视频有年龄限制、仅会员可见、私密(与你的账号共享)或位于私密播放列表。
- 你希望应用自己账号的字幕、历史或地区行为。
在家庭网络上下载普通公开视频完全不需要 cookies。“以防万一” 加上它,正是账号被锁、cookie 文件每周过期的由来。
传递 cookies 的两种方式
--cookies FILE(服务器推荐)
接受 Netscape 格式的 cookies.txt。这是 VPS、Docker 和脚本中应使用的方式:文件明确、可移植,且不依赖已安装的浏览器。从隐私窗口导出一次(步骤见下),并让它远离版本控制。
--cookies-from-browser BROWSER(在自己机器上方便)
yt-dlp --cookies-from-browser chrome "https://youtu.be/dQw4w9WgXcQ"
# 支持 firefox、chromium、edge、brave、opera、safari、vivaldi;
# 指定配置/容器:firefox:profile_name 或 chrome:Defaultyt-dlp 直接读取浏览器的 cookie 数据库。适合本地一次性使用,但它读取的是你的日常账号,浏览器打开期间会不断轮换会话,在 Linux 上可能还需要 keyring 访问权限。不要用于自动化。
正确导出 cookies(分步)
- 打开隐私/无痕窗口,确保没有其他 YouTube 标签页共享会话。
- 登录一个专为此创建的备用 Google 账号 —— 不是你在意的那个。
- 访问 https://www.youtube.com/robots.txt。该页面会加载会话 cookies,但不会运行轮换它们的脚本。
- 用能保存为 Netscape 格式的 cookies.txt 扩展导出(yt-dlp wiki 推荐 “Get cookies.txt LOCALLY”)。
- 不再访问 YouTube,直接关闭隐私窗口。该会话中之后的每次 YouTube 页面访问都可能让导出的 token 失效。
- 把文件移到运行 yt-dlp 的机器,chmod 600,用 --cookies 传入。
cookies 为什么会失效
- 轮换:浏览器标签页打开时,YouTube 会在后台刷新会话 token。如果你从一个持续使用的窗口导出,文件已经过时。
- 过期:会话 cookies 天生短命;预期几天到几周,然后重新导出。
- IP 信誉:cookie 文件救不了已被 YouTube 标记的数据中心 IP。如果 cookies 能用一天然后失败,问题在地址 —— 见代理指南。
- 客户端不对:yt-dlp 使用的某些播放器客户端会忽略 cookies 或不应接收它们;当 cookies 被传给无法使用它们的客户端时,yt-dlp 会警告。
- 格式丢失:维护者指出传入 cookies 后部分格式会变得不可用 —— 加上 cookies 后立刻出现媒体 403 是已知模式。
账号安全
来自被标记服务器 IP 的自动化流量配上已登录会话,正是 Google 滥用检测系统在找的东西。这样使用的账号会被限流、强制验证或锁定。记住一条规则:在服务器上交给 yt-dlp 的 cookies 必须属于一个你输得起的账号。永远不要在聊天或工单里分享 cookies.txt —— 它等同于完整登录。
在脚本、cron 和 Docker 中使用 cookies
# 把文件放在镜像之外,以只读方式挂载
docker run --rm -v "$PWD/cookies.txt:/cookies.txt:ro" -v "$PWD/out:/out" \
yt-dlp-image yt-dlp --cookies /cookies.txt -4 -o "/out/%(title)s.%(ext)s" "URL"yt-dlp 在可能时会在运行后用刷新后的值重写 cookie 文件;只读挂载会阻止这一点,所以请按计划重新导出。每次失败都记录 yt-dlp 版本和 cookie 文件的年龄 —— 大多数 “cookies 坏了” 的工单都是陈旧文件加过时二进制。
什么时候 cookies 是错误的工具
如果 yt-dlp 支撑的是机器人、应用或流水线,cookie 卫生就成了反复的杂务:每隔几周轮换、备用账号、反正也要换的 IP。托管 API 把会话、PO token 和住宅出口留在自己这边,一次请求返回下载 URL:
curl "https://tunelio.dev/create?url=https://youtu.be/dQw4w9WgXcQ&quality=720p" \
-H "Authorization: Bearer tnl_your_api_key"Tunelio 是我们自己的服务;在笔记本上偶尔下载,--cookies-from-browser 和免费工具就够了。新账号可获得 100 个免费额度,无需银行卡。
来源
- yt-dlp wiki —— “How do I pass cookies to yt-dlp?”(隐私窗口、robots.txt 技巧、轮换)。
- yt-dlp README —— --cookies 与 --cookies-from-browser 参考。
- yt-dlp issue 跟踪 —— 使用 cookies 时格式不可用的报告(2026)。
常见问题
yt-dlp 需要哪种 cookie 格式?
Netscape/Mozilla cookies.txt。浏览器的 “JSON” 导出不能用;使用写 Netscape 格式的扩展,或让 --cookies-from-browser 直接读取浏览器。
多久需要重新导出一次?
当下载开始出现登录错误时 —— 通常几天到几周。从已关闭的隐私窗口导出的文件寿命最长。
cookies 能修复 403 Forbidden 吗?
只能修复登录墙类型。媒体下载时的 403 通常是客户端/PO token/IP 不匹配,cookies 可能让它更糟;见 403 指南。
用我的主 Google 账号安全吗?
在服务器上不安全。请用备用账号。从被标记 IP 的自动化使用可能导致账号被限制或锁定。