视频下载在内容创作中非常常见,尤其是需要收集素材、提取字幕、制作视频合集时。但不同的网站、不同的反爬机制,需要我们选择不同的下载策略。 之前我们也尝试下载过 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)。安装完成后,它会告诉你怎么验证安装成功。
如果你想手动安装,也可以:
# macOS
brew install yt-dlp
# 其他系统
pip install yt-dlp
基本用法
# 下载视频(默认最高画质)
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 长什么样、视频数据藏在哪个接口里、需要带什么参数。它会:
- 分析 URL 确定是哪个网站
- 调用对应的 extractor,向网站的 API 或页面发送 HTTP 请求
- 从返回的数据中解析出视频文件的实际下载地址
- 用下载器(内置或 aria2c)拉取文件
整个过程不需要浏览器,纯网络请求。
4.4 CDP 下载视频的原理
用 CDP 下载视频的流程和 yt-dlp 完全不一样:
- 用 CDP 连上一个真实浏览器(通常是用户已经登录的 Chrome)
- 让浏览器打开视频页面,正常加载、播放视频
- 通过 JavaScript 提取视频源地址:
- 直接读取
<video>标签的src或currentSrc属性 - 如果视频是 blob URL(MediaSource 加密流),从 Performance API 中提取底层流地址 - 或者用captureStream()+MediaRecorder录屏式捕获 - 立即用 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 下载公开视频
对于不需要登录的公开视频,直接一条命令搞定:
yt-dlp "https://www.bilibili.com/video/BV1LE411e7NE"
也可以对 Hermes 讲:
使用 yt-dlp,帮我下载 https://www.bilibili.com/video/BV1LE411e7NE
案例 2:处理需要登录的视频
如果视频需要登录才能观看,yt-dlp 需要额外处理 Cookie:
# 直接从浏览器导出 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 Hagemeister 和 dstftw。这十年间:
- 支持从 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ɪŋ/ | 从页面或请求中找到真实资源地址的过程 |