终极指南:使用 yt-dlp 随心所欲下载B站高清视频与弹幕
在数字时代的浪潮中,Bilibili(B站)已不仅仅是一个视频分享网站,它更是一个集结了无数创意、知识与热情的亚文化社区。无论是追番、看鬼畜、学习知识,还是欣赏UP主的精彩Vlog,B站都为我们提供了海量的高质量内容。然而,在线观看总会受到网络环境、平台政策变化等因素的限制。将心仪的视频和那充满灵魂的弹幕下载到本地,进行离线观看或永久珍藏,成为了许多用户的迫切需求。
市面上存在各种下载工具,但它们往往存在广告多、功能受限、更新不及时、无法获取最高画质或无法下载弹幕等问题。此时,一款开源、免费、功能强大且持续更新的命令行工具——yt-dlp
,便成为了我们的不二之选。
本文将为您献上一份“保姆级”教程,从零开始,详细阐述如何利用 yt-dlp
这款神器,轻松下载B站的4K、1080p60帧等高清视频,并完美保留与之相伴的弹幕文件。
一、 什么是 yt-dlp?为什么选择它?
yt-dlp
是著名开源项目 youtube-dl
的一个分支(fork)。它继承了 youtube-dl
的所有功能,并在其基础上进行了大量的优化和功能扩展,拥有更快的下载速度、更强的解析能力和更频繁的更新迭代。
选择 yt-dlp
下载B站视频的理由:
- 完全免费与开源:无任何广告和隐藏费用,代码公开透明,安全可靠。
- 功能极其强大:支持全球上千个视频网站,对B站的支持尤为出色。
- 最高画质支持:能够解析并下载B站提供的最高分辨率(如4K、8K)和最高帧率(如60fps)的视频。
- 音视频分离下载与合成:现代流媒体网站(包括B站)为了节省带宽,通常将高清视频流和音频流分开传输。
yt-dlp
能自动检测并下载最佳的视频流和音频流,然后调用FFmpeg
工具将其完美合成为一个完整的视频文件。 - 弹幕与字幕下载:可以轻松下载B站视频的XML格式弹幕文件以及官方字幕。
- 登录与Cookies支持:支持使用个人账户的Cookies信息,从而可以下载需要登录才能观看的视频、会员专享内容或获取更高质量的音视频流。
- 高度可定制化:通过丰富的命令行参数,可以自定义文件名、下载格式、下载分P、代理设置等,满足各种精细化需求。
- 跨平台运行:完美支持 Windows, macOS 和 Linux三大主流操作系统。
二、 准备工作:安装核心工具
要驾驭 yt-dlp
,我们需要准备两个核心工具:yt-dlp
本身和它的黄金搭档 FFmpeg
。
1. 安装 yt-dlp
对于 Windows 用户:
最简单的方式是直接从官方 GitHub Releases 页面下载 yt-dlp.exe
文件。
下载后,为了方便在任何位置使用,建议将 yt-dlp.exe
放置在一个固定的、路径不含中文的文件夹(例如 D:\Tools
),然后将这个文件夹路径添加到系统的环境变量 Path
中。
对于 macOS 和 Linux 用户:
推荐使用包管理器进行安装,这样便于后续更新。
- macOS (使用 Homebrew):
bash
brew install yt-dlp - Linux (使用 pip, 推荐):
bash
python3 -m pip install -U yt-dlp - Linux (其他发行版包管理器):
bash
# Arch Linux
sudo pacman -S yt-dlp
# Debian/Ubuntu (可能版本较旧)
sudo apt install yt-dlp
验证安装:
打开你的终端(Windows下是 CMD
或 PowerShell
),输入以下命令:
bash
yt-dlp --version
如果能正确显示版本号,说明 yt-dlp
已成功安装并配置好。
2. 安装 FFmpeg
FFmpeg
是一个处理音视频的瑞士军刀,yt-dlp
依赖它来合并B站分离的音视频流。没有它,你将无法下载高清视频。
-
Windows 用户:
-
macOS (使用 Homebrew):
bash
brew install ffmpeg -
Linux (使用包管理器):
bash
# Debian/Ubuntu
sudo apt update && sudo apt install ffmpeg
# Arch Linux
sudo pacman -S ffmpeg
验证安装:
在终端输入:
bash
ffmpeg -version
如果能显示 FFmpeg 的版本信息,则表示安装成功。
三、 从入门到精通:yt-dlp 实战操作
准备工作就绪,让我们正式开始B站视频的下载之旅。我们将从最基础的命令开始,逐步深入到高级技巧。
1. 基础下载:下载一个默认质量的视频
找一个你喜欢的B站视频,复制其浏览器地址栏中的URL。例如:https://www.bilibili.com/video/BV1xx411c7m9
。
打开终端,输入以下命令:
bash
yt-dlp "你的B站视频URL"
例如:
bash
yt-dlp "https://www.bilibili.com/video/BV1xx411c7m9"
yt-dlp
会自动分析页面,选择一个默认的“最佳”质量(通常是1080p,但可能是压制过的版本),下载并自动合并音视频,最后在当前目录下生成一个以视频标题命名的 .mp4
文件。
注意:URL最好用英文双引号括起来,以防URL中包含特殊字符导致命令解析错误。
2. 查看所有可用格式:迈向高清的第一步
要下载真正的高清视频,我们首先需要知道这个视频提供了哪些画质选项。使用 -F
(或 --list-formats
) 参数:
bash
yt-dlp -F "https://www.bilibili.com/video/BV1xx411c7m9"
终端会输出一个详细的列表,类似这样:
[bilibili] Extracting URL: https://www.bilibili.com/video/BV1xx411c7m9
[bilibili] 1xx411c7m9: Downloading webpage
[bilibili] 1xx411c7m9: Downloading video info
[info] Available formats for 1xx411c7m9:
ID EXT RESOLUTION FPS │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────
...
30280 mp4 1920x1080 60 │ ~ 83.19MiB 1144k https │ avc1.640032 1144k video only [1080p 60fps]
30232 mp4 1920x1080 30 │ ~ 54.34MiB 747k https │ avc1.640028 747k video only [1080p]
30216 mp4 1280x720 30 │ ~ 32.55MiB 447k https │ avc1.64001F 447k video only [720p]
...
30262 m4a audio only │ ~ 13.92MiB 191k https │ audio only mp4a.40.2 191k 48000Hz [default]
30263 m4a audio only │ ~ 9.42MiB 129k https │ audio only mp4a.40.2 129k 48000Hz
30264 m4a audio only │ ~ 4.71MiB 64k https │ audio only mp4a.40.2 64k 48000Hz
...
解读列表:
- ID: 格式的唯一标识符,这是我们之后选择格式的关键。
- EXT: 文件扩展名 (mp4, m4a等)。
- RESOLUTION: 分辨率,例如
1920x1080
。 - FPS: 帧率,例如
60
。 - VCODEC: 视频编码。
video only
表示这是纯视频流,没有声音。 - ACODEC: 音频编码。
audio only
表示这是纯音频流。 - MORE INFO: 附加信息,如
[1080p 60fps]
,非常直观。
你会发现,高质量的视频(如1080p60fps)和音频是分开的。这就是为什么我们需要 FFmpeg
来将它们合并。
3. 指定格式下载:获取你想要的最高画质
使用 -f
(或 --format
) 参数来指定下载的格式。
方法一:手动指定 ID (最精确)
从上面的列表中,假设我们想要 1080p 60fps
的视频(ID为 30280
)和最高码率的音频(ID为 30262
)。命令如下:
bash
yt-dlp -f 30280+30262 "https://www.bilibili.com/video/BV1xx411c7m9"
yt-dlp
会分别下载这两个流,然后自动调用 FFmpeg
将它们合并成一个带声音的 1080p 60fps
视频。
方法二:使用 yt-dlp
的智能选择 (更方便)
yt-dlp
提供了强大的格式选择语法,我们不必每次都去查ID。
-
下载最佳画质和最佳音质:
bash
yt-dlp -f "bestvideo+bestaudio" "URL"
这个命令会自动选择它认为是最好的纯视频流和最好的纯音频流进行合并。 -
下载特定分辨率的最佳版本:
“`bash
# 下载不高于1080p的最佳画质视频 + 最佳音质
yt-dlp -f “bestvideo[height<=1080]+bestaudio” “URL”下载4K视频 + 最佳音质
yt-dlp -f “bestvideo[height=2160]+bestaudio” “URL”
“` -
合并为一个命令: 推荐使用
bestvideo+bestaudio/best
。这个写法的含义是:优先尝试下载最佳视频流+最佳音频流并合并;如果不行(比如某些老视频没有分离的流),则退而求其次,下载那个本身就包含音视频的综合最佳版本(best)。
bash
yt-dlp -f "bestvideo+bestaudio/best" "URL"
这几乎是日常使用的“万金油”命令。
4. 下载弹幕和字幕
B站的灵魂在于弹幕。yt-dlp
可以完美地将它们下载下来。
-
下载所有可用字幕/弹幕:
bash
yt-dlp --write-subs "URL"
这会下载所有可用的字幕(包括弹幕),通常B站弹幕是.xml
格式。 -
仅下载弹幕 (推荐):
B站的弹幕通常被识别为zh-Hans
语言的字幕。我们可以指定只下载弹幕。首先,查看有哪些字幕可选:
bash
yt-dlp --list-subs "URL"
你会看到类似danmaku-zh-Hans
的条目。然后指定下载它:
bash
yt-dlp --write-subs --sub-lang "danmaku-zh-Hans" "URL"
更简单粗暴的方式,是直接指定格式为xml
:
bash
yt-dlp --write-subs --sub-format "xml" "URL"
这会下载一个与视频同名的.xml
文件,主流的本地播放器(如 PotPlayer, IINA, MPV)都可以加载这种弹幕文件。
5. 登录下载:解锁更高画质和会员内容
有些4K画质或会员专属视频需要登录才能观看。yt-dlp
无法直接使用你的B站账号密码,但可以通过导入浏览器的 Cookies
来模拟登录状态。
步骤:
-
获取 Cookies:
- 在你的浏览器(推荐 Chrome 或 Firefox)中登录B站。
- 安装一个 Cookies 导出的浏览器扩展,例如
EditThisCookie
或Cookie-Editor
。 - 在B站页面上,点击扩展图标,选择导出
Netscape
格式的 Cookies。 - 将导出的文本内容保存到一个文件中,例如
bilibili-cookies.txt
。请将此文件保存在一个安全的位置,不要泄露给他人。
-
在命令中使用 Cookies:
使用--cookies
参数指向你保存的cookies
文件。bash
yt-dlp --cookies /path/to/your/bilibili-cookies.txt -f "bestvideo+bestaudio/best" "URL"
例如,如果你的bilibili-cookies.txt
文件放在D:\
目录下:
bash
yt-dlp --cookies D:\bilibili-cookies.txt -f "bestvideo[height=2160]+bestaudio/best" "URL_of_4K_video"
通过这种方式,yt-dlp
就能以你的身份请求数据,从而下载到需要登录或大会员权限才能获取的最高清晰度视频。
四、 高级定制技巧:让下载更得心应手
掌握了以上内容,你已经可以应对90%的需求。但 yt-dlp
的强大远不止于此。
1. 自定义输出文件名和路径 (-o
)
默认的文件名是视频标题,但有时我们想更有条理地组织文件。-o
或 --output
参数允许我们使用模板来定义输出格式。
常用模板变量:
%(title)s
: 视频标题%(id)s
: 视频ID (如 BV号)%(uploader)s
: UP主名称%(upload_date)s
: 上传日期 (YYYYMMDD)%(ext)s
: 文件扩展名 (如 mp4)%(playlist)s
: 播放列表标题%(playlist_index)s
: 视频在播放列表中的序号
示例:
-
按 “UP主 – 视频标题 [BV号].mp4” 格式保存:
bash
yt-dlp -o "%(uploader)s - %(title)s [%(id)s].%(ext)s" "URL" -
创建以UP主命名的文件夹来存放视频:
bash
yt-dlp -o "%(uploader)s/%(title)s.%(ext)s" "URL"
这会自动在当前目录下创建一个以UP主名字命名的文件夹,并将视频保存在里面。
2. 下载整个播放列表 (合集)
对于包含多个视频的合集(即有 “分P” 的视频),yt-dlp
默认只会下载你提供的URL对应的那一P。
-
下载整个合集:
只需提供合集的首页URL(通常是P1的URL),yt-dlp
会自动识别并下载所有分P。 -
下载指定分P:
使用--playlist-items
参数。
“`bash
# 下载第 1, 3, 5 P
yt-dlp –playlist-items 1,3,5 “Playlist_URL”下载第 2 到第 8 P
yt-dlp –playlist-items 2-8 “Playlist_URL”
“` -
为播放列表下载的文件添加序号:
结合-o
参数,这对于整理教程、剧集等非常有用。
bash
yt-dlp -o "%(playlist_index)s - %(title)s.%(ext)s" "Playlist_URL"
这样下载的文件就会是01 - 第一集标题.mp4
,02 - 第二集标题.mp4
…
3. 嵌入元数据和封面
--embed-thumbnail
: 将视频封面作为视频文件的缩略图嵌入。--embed-metadata
: 将视频的标题、UP主、简介等信息写入文件的元数据中。
bash
yt-dlp --embed-thumbnail --embed-metadata "URL"
4. 使用归档文件,避免重复下载 (--download-archive
)
当你需要定期检查某个UP主或播放列表是否有更新时,这个功能非常有用。它会记录已下载视频的ID,下次运行时自动跳过。
bash
yt-dlp --download-archive my_archive.txt "Playlist_URL_or_Channel_URL"
这会创建一个 my_archive.txt
文件。下次你运行完全相同的命令时,yt-dlp
会先读取这个文件,只下载那些不在文件中的新视频。
五、 终极整合命令与故障排查
1. “毕业级” 万能下载命令
这里提供一个集大成者的命令,你可以根据自己的需求修改后保存下来,作为日常使用的模板:
bash
yt-dlp -f "bestvideo[height<=2160]+bestaudio/best" --cookies "/path/to/your/bilibili-cookies.txt" --write-subs --sub-format xml --embed-thumbnail --embed-metadata --download-archive archive.txt -o "%(uploader)s/%(playlist)s/%(playlist_index)s - %(title)s [%(id)s].%(ext)s" "URL"
命令详解:
-f "bestvideo[height<=2160]+bestaudio/best"
: 下载最高不超过4K的最佳画质视频和最佳音质,并合并。--cookies "..."
: 使用Cookies文件以获取登录权限。--write-subs --sub-format xml
: 下载XML格式的弹幕文件。--embed-thumbnail --embed-metadata
: 嵌入封面和元数据。--download-archive archive.txt
: 使用归档文件,避免重复下载。-o "..."
: 按照UP主/合集名/序号 - 标题 [BV号].扩展名
的格式整理文件。"URL"
: 你的目标视频或播放列表URL。
2. 常见问题 (FAQ)
-
下载速度很慢?
可能是B站服务器对你的IP进行了限速,或是你的网络环境问题。可以尝试使用--proxy
参数通过代理服务器下载。 -
无法下载1080p60fps或4K视频?
这几乎总是因为没有提供Cookies
。这些高质量流通常需要登录才能访问。请按照第五节的方法配置--cookies
参数。 -
提示 “FFmpeg not found”?
说明FFmpeg
没有正确安装,或者其路径没有被添加到环境变量Path
中。请返回第二节检查FFmpeg
的安装步骤。 -
视频下载下来没有声音?
原因同上,很可能是FFmpeg
未能正常工作,导致音视频流没有合并。检查FFmpeg
安装。 -
工具突然不好用了?
视频网站的页面结构和API会不定期更新,可能导致yt-dlp
解析失败。yt-dlp
的开发者会很快跟进修复。你需要做的就是更新它:- Windows (exe): 重新下载最新的
yt-dlp.exe
覆盖旧文件。 - pip:
python3 -m pip install -U yt-dlp
- Homebrew:
brew upgrade yt-dlp
- Windows (exe): 重新下载最新的
结语
yt-dlp
是一款名副其实的下载神器。虽然初见时是一串串冰冷的命令行,但一旦你掌握了它的核心用法,它将为你打开一扇通往数字内容自由的大门。从简单地保存一个视频,到系统性地构建个人本地媒体库,yt-dlp
都能以其无与伦比的灵活性和稳定性,成为你最可靠的伙伴。
本文所介绍的只是其功能的冰山一角。当你对它越来越熟悉时,不妨通过 yt-dlp --help
命令去探索它那浩如烟海的参数选项,你会发现更多令人惊喜的玩法。现在,就动手实践,去把你心爱的B站视频和那满屏的青春与回忆,永久地珍藏起来吧!