💡阅读指南

视频下载在内容创作中非常常见,尤其是需要收集素材、提取字幕、制作视频合集时。但不同的网站、不同的反爬机制,需要我们选择不同的下载策略。 之前我们也尝试下载过 B 站和抖音的视频,当时我们主要使用的是 CDP 这种策略。本节来看看另外一种方案 yt-dlp。

4.1 yt-dlp 是什么

yt-dlp 是一个开源的命令行音视频下载工具。给它一个视频链接,它能自动找到视频文件的真实地址并下载到本地。

它是最流行的 youtube-dl 的社区分支,目前是同类工具中功能最强、更新最活跃的。

4.2 支持什么网站

yt-dlp 支持海量的网站:

YouTube、Bilibili、抖音(有限支持)、Twitter/X、Instagram、Reddit、Facebook、Twitch、Niconico……以及几百个其他网站。

完整列表可以运行 yt-dlp --list-extractors 查看。

4.3 安装

直接跟 Hermes 说:

帮我安装 yt-dlp

Hermes 会根据你的操作系统选择对应的安装方式(macOS 用 Homebrew,Windows 用 pip,Linux 用 apt)。安装完成后,它会告诉你怎么验证安装成功。

如果你想手动安装,也可以:

Bash
# macOS
brew install yt-dlp

# 其他系统
pip install yt-dlp

基本用法

Bash
# 下载视频(默认最高画质)
yt-dlp "https://www.bilibili.com/video/BV1xxxxe7NE"

# 指定格式和画质
yt-dlp -f "bestvideo[height<=1080]+bestaudio" "URL"

# 仅下载音频并转为 mp3
yt-dlp -x --audio-format mp3 "URL"

# 下载字幕
yt-dlp --write-subs --sub-langs zh-Hans "URL"

# 列出所有可用格式
yt-dlp -F "URL"

核心原理

yt-dlp 内置了每个网站对应的 extractor(提取器)。每个 extractor 知道对应网站的 API 长什么样、视频数据藏在哪个接口里、需要带什么参数。它会:

  1. 分析 URL 确定是哪个网站
  2. 调用对应的 extractor,向网站的 API 或页面发送 HTTP 请求
  3. 从返回的数据中解析出视频文件的实际下载地址
  4. 用下载器(内置或 aria2c)拉取文件

整个过程不需要浏览器,纯网络请求。

4.4 CDP 下载视频的原理

用 CDP 下载视频的流程和 yt-dlp 完全不一样:

  1. 用 CDP 连上一个真实浏览器(通常是用户已经登录的 Chrome)
  2. 让浏览器打开视频页面,正常加载、播放视频
  3. 通过 JavaScript 提取视频源地址: - 直接读取 <video> 标签的 srccurrentSrc 属性 - 如果视频是 blob URL(MediaSource 加密流),从 Performance API 中提取底层流地址 - 或者用 captureStream() + MediaRecorder 录屏式捕获
  4. 立即用 curl 下载(CDN URL 有效期通常只有几秒)

CDP 的功能更强大、更灵活,下载视频只是它能力的一小部分。它的核心价值是让 Agent 能够完整操作网页,比如自动登录、填写表单、点击按钮、滚动页面等。

4.5 yt-dlp vs CDP:什么时候用谁

对比维度 yt-dlp CDP
是否需要浏览器 ✗ 不需要 ✓ 需要真实 Chrome
速度 快(毫秒级返回) 慢(等页面加载、视频缓冲)
复杂度 一条命令 需要连接浏览器、写自动化脚本
登录态支持 弱(cookies 方式,容易过期) 强(直接用浏览器里的登录态)
反爬对抗 弱(改个 API 就废) 强(真实浏览器指纹,难检测)
blob 加密流 ✗ 不能 ✓ 能捕获
简单公开视频(YouTube/B 站) ✓ 最佳方案 杀鸡用牛刀
反爬严重(抖音) ✗ 经常失效 ✓ 当前唯一可靠方案
加密/DRM(教育平台) ✗ 不能 ✓ 有限支持
批量下载 ✓ 原生支持 需要自己写循环

一句话决策

你还不知道yt-dlp 能不能下载?没关系,这些都交给 Hermes 判断:

首先使用yt-dlp,帮我下载 https://www.bilibili.com/video/BV1LE411e7NE。如果失败该用 CDP 下载。

4.6 实战案例

案例 1:yt-dlp 下载公开视频

对于不需要登录的公开视频,直接一条命令搞定:

Bash
yt-dlp "https://www.bilibili.com/video/BV1LE411e7NE"

也可以对 Hermes 讲:

code
使用 yt-dlp,帮我下载 https://www.bilibili.com/video/BV1LE411e7NE

案例 2:处理需要登录的视频

如果视频需要登录才能观看,yt-dlp 需要额外处理 Cookie:

Bash
# 直接从浏览器导出 Cookie(推荐,最方便)
yt-dlp --cookies-from-browser chrome "URL"

# 或者手动指定 Cookie 文件
yt-dlp --cookies cookies.txt "URL"

这种方式的问题是,Cookie 会过期,每次都需要重新导出。所以不推荐这种方式(普通人根本不知道 cookie 文件在哪儿)。

而 CDP 方案直接用浏览器的登录态,不需要处理 Cookie,这也是 CDP 在处理需要登录的视频时最大的优势。

4.7 附录:yt-dlp 的历史

2008:youtube-dl 诞生

一个叫 Ricardo Garcia 的程序员写了 youtube-dl。当时 YouTube 刚刚兴起,市面上几乎没有能下载 YouTube 视频的工具。youtube-dl 是第一个成气候的命令行方案。

2010-2020:社区维护

Ricardo 后来把项目交给了社区。核心维护者先后是 Philipp Hagemeisterdstftw。这十年间:

  • 支持从 YouTube 扩展到 1000+ 网站
  • 成为 Linux/Unix 圈子的事实标准视频下载工具
  • 被集成到很多图形界面工具(如 YouTube-DLG)背后

2020 年 10 月:RIAA 下架事件

美国唱片业协会(RIAA)向 GitHub 发送 DMCA 通知,声称 youtube-dl 违反《数字千年版权法》第 1201 条——因为它绕过了 YouTube 的技术保护措施。GitHub 下架了仓库。

这件事激怒了开发者社区。电子前沿基金会(EFF)为 youtube-dl 提供法律援助,一周后 GitHub 恢复了仓库。但很多人对 youtube-dl 的维护速度感到不满——RIAA 投诉之前项目就已经更新缓慢了。

2020 年 10 月 26 日:yt-dlp 诞生

就在 youtube-dl 下架风波中,有人 fork 了代码,取名 yt-dlp

起初只是一个补丁集,给 youtube-dl 加一些缺失的功能、修一些长期未修复的 bug。但因为更新速度快、功能多,很快社区就迁移过来了。

2021-2026:反超原版

今天的 yt-dlp:

  • 17.5 万 GitHub Stars,远超原版 youtube-dl
  • 核心维护者是一支团队,以 pukkandan 为首
  • 更新极其频繁,最新版 2026.07.04(2026 年 7 月 4 日发布)
  • 原版 youtube-dl 事实上已基本停滞,社区已全面迁移到 yt-dlp

名字由来

"yt" = YouTube,"dlp" = downloader。名字取得很随意,就这么叫开了。

4.8 ■ 学点英语

中文 English 音标 说明
------ --------- ------ ------
下载后端 Download Backend /ˈdaʊnloʊd ˈbækend/ 真正负责下载数据的底层工具或服务
Cookie 提取 Cookie Extraction /ˈkʊki ɪkˈstrækʃən/ 从浏览器或文件中取出登录态信息的过程
登录态 Login Session /ˈlɔːɡɪn ˈseʃən/ 用户已登录状态在浏览器或请求中的保存形式
资源解析 Resource Parsing /ˈriːsɔːrs ˈpɑːrsɪŋ/ 从页面或请求中找到真实资源地址的过程