如何使用yt-dlp下载B站高清视频和弹幕? – wiki基地


终极指南:使用 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站视频的理由:

  1. 完全免费与开源:无任何广告和隐藏费用,代码公开透明,安全可靠。
  2. 功能极其强大:支持全球上千个视频网站,对B站的支持尤为出色。
  3. 最高画质支持:能够解析并下载B站提供的最高分辨率(如4K、8K)和最高帧率(如60fps)的视频。
  4. 音视频分离下载与合成:现代流媒体网站(包括B站)为了节省带宽,通常将高清视频流和音频流分开传输。yt-dlp 能自动检测并下载最佳的视频流和音频流,然后调用 FFmpeg 工具将其完美合成为一个完整的视频文件。
  5. 弹幕与字幕下载:可以轻松下载B站视频的XML格式弹幕文件以及官方字幕。
  6. 登录与Cookies支持:支持使用个人账户的Cookies信息,从而可以下载需要登录才能观看的视频、会员专享内容或获取更高质量的音视频流。
  7. 高度可定制化:通过丰富的命令行参数,可以自定义文件名、下载格式、下载分P、代理设置等,满足各种精细化需求。
  8. 跨平台运行:完美支持 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下是 CMDPowerShell),输入以下命令:

bash
yt-dlp --version

如果能正确显示版本号,说明 yt-dlp 已成功安装并配置好。

2. 安装 FFmpeg

FFmpeg 是一个处理音视频的瑞士军刀,yt-dlp 依赖它来合并B站分离的音视频流。没有它,你将无法下载高清视频。

  • Windows 用户:

    1. 访问 FFmpeg 官网推荐的构建版本下载页面(如 Gyan.devBtbN)。
    2. 下载 release 版本的 full build 压缩包。
    3. 解压后,进入 bin 文件夹,你会看到 ffmpeg.exe, ffprobe.exe, ffplay.exe 三个文件。
    4. 将这个 bin 文件夹的路径(例如 D:\Tools\ffmpeg\bin)也添加到系统的环境变量 Path 中。
  • 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 来模拟登录状态。

步骤:

  1. 获取 Cookies:

    • 在你的浏览器(推荐 Chrome 或 Firefox)中登录B站。
    • 安装一个 Cookies 导出的浏览器扩展,例如 EditThisCookieCookie-Editor
    • 在B站页面上,点击扩展图标,选择导出 Netscape 格式的 Cookies。
    • 将导出的文本内容保存到一个文件中,例如 bilibili-cookies.txt。请将此文件保存在一个安全的位置,不要泄露给他人。
  2. 在命令中使用 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

结语

yt-dlp 是一款名副其实的下载神器。虽然初见时是一串串冰冷的命令行,但一旦你掌握了它的核心用法,它将为你打开一扇通往数字内容自由的大门。从简单地保存一个视频,到系统性地构建个人本地媒体库,yt-dlp 都能以其无与伦比的灵活性和稳定性,成为你最可靠的伙伴。

本文所介绍的只是其功能的冰山一角。当你对它越来越熟悉时,不妨通过 yt-dlp --help 命令去探索它那浩如烟海的参数选项,你会发现更多令人惊喜的玩法。现在,就动手实践,去把你心爱的B站视频和那满屏的青春与回忆,永久地珍藏起来吧!

发表评论

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

滚动至顶部