0%

用视频下载神器 yt-dlp 轻松下载高清视频

用视频下载神器 yt-dlp 轻松下载高清视频

一、为什么需要专门的解析工具?

下载网页里的视频,最容易想到的办法是:先播放,再找到浏览器正在请求的媒体地址,把它下载下来。但真正动手时,会遇到几个问题。

播放页面的地址不等于视频文件的地址。播放器可能要先请求接口,才能取得媒体信息,直接查看网页源码未必能找到。找到资源后,也可能发现视频按片段传输,或者画面和声音分开提供。下载请求还可能依赖 Cookie、Referer 等信息,单独复制链接不一定能用。

这些线索可以从浏览器开发者工具的 Network(网络)面板中找:播放视频时,观察资源地址、请求头和接口返回内容。所谓“嗅探”,就是从网络请求中寻找媒体资源,再判断怎样发起同样的请求。

我们先自己找一次。以 B站为例,打开 Network 面板,播放视频,再用 m4s 筛选请求。点击其中一条,查看它的地址和请求信息:

image-20261001190140814

图中的 Range: bytes=0-4024 表示,浏览器这次只请求了资源开头的 4025 字节;

Content-Range 则显示,这个资源总共有约 436.5 MB。这说明播放器正在按字节范围读取资源。

地址找到了,接下来还得确认:它是否包含声音,下载是否需要额外的请求头,音视频分开时又该怎样合并。

要让这些操作自动完成,就得把分析得到的网站规则写成程序:从哪里取得视频标识、调用哪个接口、携带哪些参数,以及怎样读取返回结果。各家网站需要分别适配;网站改了接口,解析代码也可能要跟着改。

这正是 yt-dlp 的主要价值。它会识别网站、解析媒体信息、选择格式,再下载文件,必要时调用 FFmpeg 合并音视频。

其中,适配网站、提取媒体信息的工作,主要由 Extractor(提取器) 完成。它按各个网站的规则,从页面或接口中取得资源地址、清晰度、编码和音轨等信息,交给后续流程选择和下载。例如,B站提取器就要处理请求头、登录状态和签名参数。

提取器把针对网站的分析结果变成了可重复执行的解析流程。 用户不必每下载一个视频,就重新寻找接口、辨认音视频流;网站规则变化后,也可以通过更新提取器来适配。

接下来实际下载一个视频。下面以 Windows 为例,先准备 yt-dlp 和负责合并音视频的 FFmpeg,再从一条最简单的命令开始。

二、在 Windows 上准备运行环境

1. 下载安装

Windows 用户可以从 yt-dlp 的 GitHub Releases 下载适合系统的独立可执行文件,不必另装 Python。

下载地址:https://github.com/yt-dlp/yt-dlp/releases

下面以 yt-dlp.exe 为例。在程序所在目录打开 PowerShell,运行:

1
2
3
4
# 验证
.\yt-dlp.exe --version
# 典型返回
2026.08.19

能显示版本号,就说明程序可以启动,版本号以实际安装为准。这里的 .\ 表示当前目录,也可以改用程序的完整路径。我习惯把个人命令行工具放在:

1
%USERPROFILE%\.local\bin

其中 %USERPROFILE% 表示当前用户的主目录,例如 C:\Users\chris。.local\bin 只是一个便于统一管理工具的目录名,在 Windows 中没有特殊作用,关键是配置 PATH。

创建这个目录,把 yt-dlp.exe 放进去,然后在“系统属性 → 高级 → 环境变量”中,编辑用户变量里的 Path,新增上述路径。若在 PowerShell 命令中引用这个目录,应写成 $env:USERPROFILE\.local\bin,不要直接照搬 %USERPROFILE%。

保存环境变量后,关闭并重新打开终端,让新的 PATH 生效。之后就可以在任意目录直接运行 yt-dlp。

2. 为音视频合并准备 FFmpeg

yt-dlp 能启动后,还需要准备 FFmpeg。前面提到,视频网站常把画面和声音分开提供;下载完,要靠 FFmpeg 把两者合成一个有画面、有声音的文件。

下载地址:https://www.gyan.dev/ffmpeg/builds/

选择静态构建即可,Essentials 通常就能满足本文的合并和转封装需求,下面的截图使用 Full。下载解压后,把 bin 目录中的 ffmpeg.exe 和 ffprobe.exe 放进前面已加入 PATH 的目录。

在重新打开的终端中检查:

1
2
ffmpeg -version
ffprobe -version

两条命令都能显示版本信息,就说明终端可以找到这两个程序,版本号以实际安装为准。

三、先用最简单的命令下载

环境准备好后,先运行:

1
yt-dlp "URL"

将 URL 换成实际的视频页面地址,保留引号。yt-dlp 会解析资源并按默认策略选择格式,需要合并时调用 FFmpeg。

例如,下载 B站的“2026日漫《名侦探柯南:30号杀人事件》”,可以运行:

1
yt-dlp "https://www.bilibili.com/video/BV1b1a767EGh/"

这条命令能满足需求时,就可以结束了。遇到清晰度不够、缺少格式等情况,再往下排查。

四、下载的视频清晰度不够怎么办?

清晰度不够,先看看 yt-dlp 解析到了哪些格式。大写 -F 可以列出它们:

1
yt-dlp -F "URL"

列表通常会显示格式 ID、分辨率、帧率和音视频编码。还可能出现两个标记:

标记 含义
video only 只有画面,没有音频
audio only 只有音频,没有画面

单独下载 video only 格式不会有声音,还需要选择音频流,再用 FFmpeg 合并。

下图的格式列表中包含 360p、480p、720p、1080p 等视频格式,以及单独的音频格式。本次示例中,网页登录后可见的 1080P 高码率选项没有出现在列表里。下一节会带上登录信息再检查一次。

目标格式没列出来,要检查解析结果和访问条件;列出来却没被选中,要检查选择规则。格式出现在列表中,也不保证下载一定成功,仍要以实际请求结果为准。

五、需要登录的视频怎么下载?

浏览器里能播放的清晰度,-F 却没列出来,可能是因为浏览器已经登录,而 yt-dlp 没有携带登录信息。

这时可以让它读取浏览器中的 Cookie,再查看一次格式:

1
yt-dlp --cookies-from-browser chrome -F "URL"

使用 Edge 时,把 chrome 换成 edge。先在对应浏览器中登录该网站,成功读取 Cookie 后,再对比两次的格式列表,看看是否多出了选项。

读取 Cookie 也可能失败。Windows 上的 Chrome 常见以下两类报错。

错误一:无法复制 Cookie 数据库

报错中会出现 Could not copy Chrome cookie database,并附上问题链接:https://github.com/yt-dlp/yt-dlp/issues/7271

常见原因是 Chrome 仍在运行,占用了 Cookie 数据库。如果是这种情况,完全退出 Chrome,包括后台进程,再重试。

错误二:Cookie 解密失败

报错中会出现 Failed to decrypt with DPAPI,并附上问题链接:https://github.com/yt-dlp/yt-dlp/issues/10927

这次数据库已经能读取,但其中的 Cookie 是加密保存的,yt-dlp 调用 Windows 的 DPAPI 解密时失败了。这类错误未必能靠关闭浏览器解决。

image-20261001203331966

可以在 Firefox 登录同一网站后尝试 --cookies-from-browser firefox,也可以从 Chrome 导出 Cookie 文件。下面以 Cookie-Editor 扩展为例,选择 Netscape 格式导出:

将导出内容完整保存为 cookies.txt,保留首行的 # Netscape HTTP Cookie File 或 # HTTP Cookie File 标识。然后在该文件所在目录打开终端,运行:

1
yt-dlp --cookies ".\cookies.txt" -F "URL"

这里的 .\cookies.txt 指当前终端所在目录中的文件;如果文件保存在其他位置,就改成它的完整路径。后文的 B站示例沿用这个文件名。

在本次示例中,携带登录 Cookie 后,格式列表出现了此前缺失的选项:

Cookie 用于携带已有的登录状态;能访问哪些格式,仍取决于账号权限和网站返回的结果。

目标格式列出来后,去掉 -F 就能按默认规则下载。要指定其中某个格式,则需要下一节的 -f。

六、怎么选择下载格式?

1. 用 -f 选择视频和音频

前面用大写 -F 查看格式,接下来用小写 -f 选择要下载的格式。

对于分开的音视频,可以从列表中各选一个格式 ID:

1
yt-dlp -f "视频格式ID+音频格式ID" "URL"

把占位文字替换为 -F 列表中的实际 ID,yt-dlp 就会下载对应的音视频并调用 FFmpeg 合并。如果所选格式已经同时包含画面和声音,只写这一个格式 ID 即可。需要登录时,继续带上前面使用的 Cookie 参数。

不同视频的格式 ID 可能不同。想让同一条命令适用于多个视频,可以改写成选择规则:

1
yt-dlp -f "bv*+ba/b" "URL"

这个表达式可以拆成几部分:

写法 含义
bv* 最佳的含视频格式,也可能已经包含音频
ba 最佳纯音频格式
+ 组合多个格式,通常需要 FFmpeg 合并
/ 前面的选择不可用时,尝试后面的选择
b 最佳的同时包含视频和音频的单一格式

“最佳”由工具的格式排序规则决定。上面的表达式优先选择 bv*+ba,没有匹配格式时才尝试 b;下载或合并报错后,不会因此自动改用 b。

bv* 允许所选格式自带音频,bv 则只选纯视频格式。如果 bv* 已经带有音频,默认不会再加入 ba 音轨,所以不一定会下载两个文件再合并。

日常下载通常交给默认策略就够了,了解这条规则后,需要时再调整。

2. 怎么保存成 MP4?

下载 YouTube 视频时,得到的文件可能是 WebM。想保存成 MP4,可以用官方预设:

1
yt-dlp -t mp4 "URL"

-t mp4 会优先考虑 H.264 视频和 AAC 音频,并设置合并或转封装为 MP4。它侧重播放兼容性,因此选中的清晰度可能与默认下载不同。

MP4 是封装音视频的容器,H.264、AAC 则分别是视频和音频编码。-t mp4 会调整选择偏好,但不会强制把其他编码转换成 H.264 和 AAC。

另一个参数 --merge-output-format mp4 只指定合并时的容器,不需要合并时就不起作用。-t mp4 还包含转封装设置,因此希望最终得到 MP4 时,用它更方便。两种方式都要求所选音视频编码能装进 MP4 容器。

需要登录时,可以配合前面导出的 Cookie 文件:

1
yt-dlp --cookies ".\cookies.txt" -t mp4 "URL"

七、怎么用 yt-dlp 下载 B站和 YouTube 视频?

下面以 B站和 YouTube 为例,把前面的命令串起来。

1. 下载 B站视频

下面的 BVxxxxxxxx 是占位符,使用时换成实际视频的 BV 号。先直接下载:

1
yt-dlp "https://www.bilibili.com/video/BVxxxxxxxx"

如果清晰度不符合预期,查看格式列表:

1
yt-dlp -F "https://www.bilibili.com/video/BVxxxxxxxx"

如果目标清晰度在已登录的浏览器中可用,却没有出现在列表里,再带上登录状态检查:

1
yt-dlp --cookies ".\cookies.txt" -F "https://www.bilibili.com/video/BVxxxxxxxx"

格式列表符合预期后,去掉 -F,就会按默认规则下载;要指定格式,再按第六节的方法添加 -f。下面这条命令则使用 MP4 预设:

1
yt-dlp --cookies ".\cookies.txt" -t mp4 "https://www.bilibili.com/video/BVxxxxxxxx"

这些命令按需要使用,第一条能满足需求就不必继续加参数。

主要下载 B站视频的话,也可以试试专用的 GUI 工具,在图形界面里选择清晰度和下载内容就行,我平时也会用。

例如bilidown 这款GUI工具

2. 下载 YouTube 视频

YouTube 也一样。把 URL 换成视频地址,使用 MP4 预设下载:

1
yt-dlp -t mp4 "URL"

如果出现 No supported JavaScript runtime could be found,表示 yt-dlp 没找到执行 YouTube JavaScript 校验所需的运行时,部分格式可能因此无法解析。

解决办法是从 Deno 官方安装页面下载安装 Deno,将 deno.exe 放进前面已加入 PATH 的 .local\bin,重新打开终端检查:

1
deno --version

能显示 Deno 版本号后,再执行一次下载命令。yt-dlp 默认会启用 Deno,官方 yt-dlp.exe 已包含配套解析脚本,无需另装。

普通公开视频可以先不带 Cookie;需要登录才能访问的内容,再添加 --cookies ".\youtube-cookies.txt"。这里应使用从 YouTube 导出的登录信息,B站的 Cookie 不能代替。

八、还能下载哪些网站的视频?

除了 B站和 YouTube,官方列表中还有腾讯视频、爱奇艺、Vimeo、Dailymotion 等网站的提取器。对于已经适配的网站,通常也是把视频页面地址交给 yt-dlp 即可。

有对应提取器,并不代表站内所有内容都能下载。实际结果还取决于账号权限、地区限制和网站接口是否发生变化,可以先用 yt-dlp -F "URL" 查看解析结果。

网站接口会变,Extractor(提取器) 也要跟着维护。新版本会修复解析问题,也可能增加网站支持和其他功能。本文使用的官方独立可执行文件,可以直接更新:

1
yt-dlp -U

-U 会更新到当前发布渠道的最新版本,一并获得已经发布的提取器修复和新增功能。一条以前能用的命令突然解析失败时,可以先更新,再试一次。