youtube-dl
ytdl-org/youtube-dl加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2013年,菲律宾马尼拉的一位音乐爱好者小陈(化名)想把自己喜欢的独立乐队视频下载到本地——那时候在线视频平台对菲律宾用户的版权限制极为苛刻,很多MV在当地根本看不了。他找到了 youtube-dl,在终端敲下几行命令,几秒钟后,一段高清视频就静静躺在他的硬盘里。
这不是个例。从那一刻起,youtube-dl 就成了一款让科技界、法律界和普通用户都为之侧目的工具——它支持的网站超过1000个,几乎覆盖了互联网上所有主流视频平台,而它本身只是一个不到2MB的Python脚本。
youtube-dl 由 philippkeller 于2006年在 Google Code 上发起,最初只是一个针对 YouTube 的简单下载脚本。随着支持的视频网站数量爆发式增长,项目逐渐演变为支持全球1000+视频平台的通用下载工具。2013年,该项目迁移至 GitHub,并吸引了全球开发者贡献 extractor(提取器)来适配各大视频网站。
该项目的技术定位非常清晰:不提供视频转换/播放功能,专注于"下载"这一件事。它通过解析各平台的视频元数据接口(如 YouTube 的 get_video_info),提取视频的真实下载地址,然后直接下载原始文件。这种"轻量解析 + 直接下载"的模式让它保持了极低的资源占用和极高的稳定性。
核心作者dstftw 从2012年起持续维护至今(截至2026年仍有推送),是GitHub上维护时间最长的开源项目之一。项目最后一次重大更新发布于2021年12月17日,之后主要进行安全补丁维护。
youtube-dl 的代码结构堪称教科书级别的模块化设计:
youtube_dl/
├── YoutubeDL.py # 核心引擎,处理下载流程
├── extractor/ # 各平台专用提取器(超过1000个)
├── postprocessor/ # 下载后处理(嵌入字幕、添加元数据)
├── downloader/ # 下载器(HTTP/HTTPS/FTP/DASH等协议)
├── utils.py # 工具函数库
├── jsinterp.py # JavaScript解释器(解密混淆签名)
├── aes.py # AES加密解密(AES-CBC/AES-CTR)
└── swfinterp.py # Flash/SWF解释器
Extractor(提取器) 是 youtube-dl 架构的核心。每个支持的网站都有一个对应的 extractor,继承自 InfoExtractor 基类。Extractor 负责:解析URL → 调用平台API → 提取视频元数据 → 返回可下载的媒体流信息。这种设计使得添加新平台支持非常简单——只需实现一个新的 extractor 类即可,无需改动核心代码。
Postprocessor(后处理器) 负责下载完成后的处理工作:嵌入字幕、添加元数据、切割片段、调用 ffmpeg 进行格式转换等。youtube-dl 本身不进行转码,但如果用户安装了 ffmpeg,后处理器可以自动调用它完成格式转换。
JS Interpreter 是 youtube-dl 的"独门绝技"。许多视频网站(如 YouTube)使用 JavaScript 混淆来隐藏视频的真实地址。youtube-dl 内置了一个精简的 JavaScript 解释器(jsinterp.py),能够执行这些混淆脚本并解密出真实下载地址。这是 youtube-dl 长期保持有效性的关键所在——即使平台频繁更新反爬机制,只要Extractor的解密逻辑能跟上,就能继续工作。
youtube-dl 的命令行设计极为强大,但学习曲线较陡。以下是最实用的几个场景:
基础下载:youtube-dl "https://www.youtube.com/watch?v=xxxxx" 直接下载默认格式。
格式选择:youtube-dl -f "bestvideo+bestaudio/best" URL 组合下载最佳画质视频+音频,或指定具体格式码如 -f 18(360p MP4)、-f 22(720p MP4)。
字幕处理:--write-sub --write-auto-sub --embed-subs 自动下载字幕并嵌入视频文件。
播放列表:youtube-dl --playlist-items 1-3 --playlist-start 1 支持播放列表选择和范围下载。
元数据提取:youtube-dl --dump-json URL 输出视频的完整JSON元数据,可用于数据分析。
代理与重试:--proxy 设置代理,--retries 设置重试次数,保证在网络不稳定环境下的下载成功率。
2016年,youtube-dl 的开发社区出现了重大分裂。一批开发者认为原项目维护速度太慢(YouTube频繁更新导致Extractor失效),fork 出了 yt-dlp 项目。yt-dlp 保持了与 youtube-dl 的兼容性,但在以下方面做了显著改进:
目前,yt-dlp 的活跃度和功能丰富度已远超 youtube-dl,GitHub stars 数也已超越原项目。但 youtube-dl 依然在持续维护,作为"官方"版本被各大Linux发行版默认收录。
youtube-dl 的部署是真正的"零门槛":
pip install youtube-dl 一行命令完成brew install youtube-dl唯一需要注意的依赖是 ffmpeg(可选但强烈推荐):安装 ffmpeg 后,youtube-dl 可以自动合并分离的视频流和音频流,输出完整的 MP4 文件。
硬件要求极低:256MB 内存、50MB 磁盘空间,无需 GPU。Python 版本要求宽松:Python 2.6+/3.2+ 均支持,覆盖了几乎所有现役系统。
2020年,RIAA(美国唱片工业协会)向 GitHub 发出 DMCA 删除通知,要求移除 youtube-dl。GitHub 起初遵从了通知,但在一周内恢复了项目——GitHub 联合 EFF(电子前哨基金会)发表了声明,认为 youtube-dl 具备"合理使用"的合法用途(如存档、教育、无DRM内容下载等)。
这个事件引发了开源社区对 DMCA 122条款(避风港条款)的广泛讨论。最终 youtube-dl 恢复了正常运营,但该事件也提醒了开源社区:工具本身是中立的,法律争议往往取决于使用场景而非工具本身。
截至2026年,youtube-dl 依然保持着活跃维护(最近推送:2026年2月)。项目目前处于 "维护模式"——主要修复Extractor失效问题和安全问题,不再引入重大新功能。这种策略合理:核心功能已非常完善,格式解析能力已高度成熟,继续增加feature的边际收益递减。
从增长趋势看,youtube-dl 的 star 数量趋于稳定(14.1万),新增 star 主要来自新人发现这款"经典工具"以及技术博客/视频的推荐。与此相对,yt-dlp 的 star 增长更为迅猛,代表了社区对"更活跃fork"的认可。
youtube-dl 值得关注的理由:
youtube-dl 证明了最简单的想法往往最持久:一个只做"下载"这一件事的工具,服务了全球数亿用户近20年。如果你需要处理任何视频下载需求,它仍然是那个绕不开的选项。