使用 yt-dlp 下载 YouTube 视频完整攻略

一份完整的从零开始的 yt-dlp 安装 + 配置 + 故障排除指南
适用于 Windows 系统,让你轻松下载任何 YouTube 视频

前言

很多人在使用 yt-dlp 下载 YouTube 视频时,会遇到下面几种令人头疼的错误:

  • Sign in to confirm you’re not a bot (要求登录验证)
  • n challenge solving failed (防盗链参数解码失败)
  • Only images are available for download (只能下载图片,没有视频)

这些问题的根本原因在于:YouTube 近年来不断加强反爬机制,而 yt-dlp 需要登录凭证(cookies)和一个JavaScript 运行时环境来对抗这些保护措施。

本文会手把手教你从零开始配置 yt-dlp,解决上述所有报错,让你能够顺利下载任意 YouTube 视频。


第一部分:安装 yt-dlp(推荐方式)

方案一:使用 pip 安装(推荐,便于后续安装扩展)

  1. 安装 Python
    访问 python.org 下载最新版 Python(≥3.8)。安装时务必勾选 “Add Python to PATH”
  2. 安装 yt-dlp(完整版)
    以管理员身份打开 PowerShell,执行:powershellpip install “yt-dlp[default]”注意:必须加上 [default],这样才能自动安装所有依赖(包括后续需要的 JavaScript 脚本)。

方案二:直接下载 exe 文件(简单,但需手动处理依赖)

  • 从 yt-dlp 官方 GitHub 下载 yt-dlp.exe,放到一个你喜欢的文件夹(如 D:\yt-dlp)。
  • 将该文件夹路径添加到系统 PATH 环境变量中,以便在任意位置调用。

如果你采用 exe 方式,后续安装 JavaScript 运行时(Deno/Node)后,还需要手动安装 EJS 组件(见后文),不如 pip 方式省心。因此本文推荐使用 pip 安装。


第二部分:解决“Sign in to confirm you’re not a bot” – 使用 Cookies

这个错误是因为 yt-dlp 没有登录信息,被 YouTube 当作机器人拦截了。我们需要手动导出浏览器的登录 Cookies。

步骤 2.1:安装浏览器扩展(导出 Cookies)

在 Chrome 或 Edge 中安装扩展:
Get cookies.txt LOCALLY

如果你使用 Firefox,可以安装 cookies.txt 扩展。

步骤 2.2:导出 Cookies

  1. 用浏览器手动登录 YouTube(保持登录状态)。
  2. 点击扩展图标 → “Export” → 文件会自动下载,名为 cookies.txt
  3. 将 cookies.txt 移动到与 yt-dlp 相同的目录(例如你运行命令的当前目录)。

步骤 2.3:使用 Cookies 下载视频

现在可以用 --cookies 参数来下载了:

powershell

yt-dlp --cookies cookies.txt "视频URL"

这样就能绕过登录验证。

备选方法:如果你不想手动导出 cookies,也可以尝试 --cookies-from-browser edge 或 --cookies-from-browser chrome。但在某些 Windows 系统上会因数据库锁而失败,因此手动导出更可靠。


第三部分:解决“n challenge solving failed” – 安装 JavaScript 运行时

当你在使用 cookies 后仍然看到类似下面的警告:

text

WARNING: n challenge solving failed: Some formats may be missing.
WARNING: Only images are available for download.
ERROR: Requested format is not available.

这表示 yt-dlp 需要一个 JavaScript 运行时 来执行 YouTube 的防盗链解码代码。目前官方支持 deno 和 nodejs。我们推荐安装 deno

步骤 3.1:使用 winget 安装 Deno(Windows 最简单)

以管理员身份打开 PowerShell,执行:

powershell

winget install --id=DenoLand.Deno

安装完成后,重启 PowerShell 使环境变量生效。然后验证:

powershell

deno --version   # 应该显示版本号,如 deno 2.7.14

步骤 3.2:让 yt-dlp 识别 Deno

如果你是用 pip 安装的 yt-dlp[default],它会自动寻找 deno 并调用,一般无需额外配置。
如果仍然不行,可以手动设置环境变量(临时在当前终端生效):

powershell

$env:JS_RUNTIMES = "deno:C:\Users\你的用户名\.deno\bin\deno.exe"

路径可以通过 (Get-Command deno).Source 查找。

步骤 3.3:安装 yt-dlp 的 EJS 组件(如果缺失)

某些精简安装可能缺少内置的 JavaScript 脚本,执行一次以下命令即可自动从 GitHub 下载:

powershell

yt-dlp --remote-components ejs:github

成功后你会看到 Installed ejs components 字样。

步骤 3.4:重新下载视频

现在再次执行下载命令,应该不会再有 n challenge 错误了:

powershell

yt-dlp --cookies cookies.txt "https://www.youtube.com/watch?v=视频ID"

视频将会正常下载,并且可能自动分离音视频再合并(需要 FFmpeg,见下文)。


第四部分:可选但推荐的组件 – FFmpeg

很多 YouTube 视频的清晰度(如 1080p 以上)是视频和音频分开的。yt-dlp 下载后需要 FFmpeg 来合并它们。

  1. 下载 FFmpeg:访问 gyan.dev 下载 ffmpeg-release-full.7z
  2. 解压到 C:\ffmpeg
  3. 将 C:\ffmpeg\bin 添加到系统 PATH 环境变量。
  4. 验证:在 PowerShell 输入 ffmpeg -version

有了 FFmpeg,yt-dlp 会自动合并为完整的视频文件。


完整示例:一条命令下载最高画质

假设你已经完成了上述所有配置,你只需要:

powershell

yt-dlp --cookies cookies.txt -f bestvideo+bestaudio --merge-output-format mp4 "视频URL"
  • -f bestvideo+bestaudio:选择最好的视频轨和音频轨。
  • --merge-output-format mp4:合并成 MP4 格式。

如果想下载字幕、缩略图,可以添加 --write-subs --write-thumbnail 等参数。


常见问题排查

错误信息可能原因解决方法
Could not copy Chrome cookie database浏览器进程锁定数据库完全关闭 Chrome/Edge,或改用手动导出 cookies.txt
No supported JavaScript runtime could be found未安装 Deno/Node安装 Deno 并确保在 PATH 中
n challenge solving failedJS 运行时未生效或 EJS 组件缺失运行 yt-dlp --remote-components ejs:github,并检查 Deno 是否可用
Only images are available解码失败,无法获取视频流确认 JS 运行时已正确配置,并更新 yt-dlp 到最新版
Requested format is not available通常与上一条相同解决 n challenge 问题即可

保持 yt-dlp 更新

YouTube 的防护策略变化频繁,务必定期更新:

powershell

yt-dlp -U   # 如果通过 pip 安装,使用 python -m yt-dlp -U

总结

通过本文的步骤,你应该能够:

  1. 使用 cookies 绕过 YouTube 登录验证。
  2. 安装 Deno 作为 JavaScript 运行时,解决 n challenge 错误。
  3. 配置 FFmpeg 自动合并音视频。
  4. 下载任意 YouTube 视频,无论公开还是需要登录的视频。

整个过程虽然看起来步骤较多,但一次配置后即可长期使用。如果你在配置过程中遇到任何问题,欢迎在评论区留言交流。

现在,去下载你喜欢的视频吧! 🎥

Share

Categories:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Post you may like

Categories