开源工具评测:Lux 一个 8MB 的 Go 单文件,搞定 49 个站点的视频下载
你是不是也经历过这样的场景:想把 B 站一个开源课程的视频归档下来,浏览器插件装了七八个,不是要会员就是弹广告;用 yt-dlp 吧,brew install 完第一条命令就报 ImportError: cannot import name 'brotli',跟本机其他 Python 包打架,折腾半小时还没下到一个视频。
中文视频站的下载一直是个老大难问题:
- B 站的 DASH 音视频分流,手动抓包要拼半天
- 优酷的签名参数隔三差五变,老脚本直接失效
- 抖音/小红书有动态签名,普通下载器根本拿不到直链
- 想批量下一个合集,只能一页页复制链接
今天要聊的 Lux(iawia002/lux)就是来解决这件事的——一个用 Go 写的单文件二进制,8MB,没有 Python 依赖,一条命令搞定 B 站、YouTube、抖音、小红书、知乎、网易云等 49 个站点的视频、图片和音频下载。
一、项目是什么

Lux 的作者是 Xinzhao Xu,项目从 2018 年开始维护,目前在 GitHub 上收获了 31.5k Star、3.3k Fork,采用 MIT 开源协议。它的定位很直接:fast and simple video downloader——slogan "Let there be Lux!" 玩了圣经"要有光"的双关。
| 项目信息 | 详情 |
|---|---|
| 仓库地址 | github.com/iawia002/lux |
| 开发语言 | Go |
| 开源协议 | MIT |
| GitHub Star | 31.5k+ |
| 支持站点 | 49 个(视频/图片/音频/合集) |
| 二进制体积 | ~8MB(无运行时依赖) |
| 唯一外部依赖 | FFmpeg(仅用于音视频合并) |
它的核心设计理念是 "Do one thing well":抓取媒体、暴露所有清晰度选项、然后退出。不做播放器、不做库管理、不做推荐——就是纯粹地把视频从 URL 变成本地文件。
支持的站点覆盖了几乎所有你能想到的中文视频平台:哔哩哔哩、抖音、快手、小红书、微博、知乎、爱奇艺、优酷、腾讯视频、芒果 TV、AcFun、好看视频、西瓜视频、斗鱼、虎牙、网易云音乐、喜马拉雅、极客时间;海外则有 YouTube、Vimeo、Twitter、Instagram、TikTok、Reddit、Facebook 等。
二、为什么推荐它

1. 单文件二进制,部署零摩擦
这是 Lux 最打动我的一点。Go 编译出来就是一个静态二进制文件,你不需要装 Python、不需要管理虚拟环境、不需要 pip install 一堆依赖。下载下来 chmod +x 就能用,拷到任何机器上都能跑。对比 yt-dlp 每次升级都要处理依赖冲突,这种"拿起来就用"的体验在命令行工具里非常奢侈。
2. 中文站覆盖是它的主战场
yt-dlp 在 YouTube/Twitter/Instagram 这些海外站上是行业顶配,社区几乎每周都在打补丁。但中文站的维护靠的是志愿者:B 站的 DASH 格式修复、抖音的动态签名、优酷的 ccode/ckey 机制,这些细节长期以来 Lux 比 yt-dlp 上心得多。49 个 extractor 里差不多一半是中文站,这是它和 yt-dlp 最大的差异化。
3. 一条命令完成全流程
不需要打开浏览器、不需要装插件、不需要进网页版后台。复制链接,终端里敲一行命令,清晰度选择、多线程下载、音视频合并、字幕下载全部自动完成。对于需要批量归档视频的开发者和内容工作者来说,这种可脚本化的能力非常关键。
4. 断点续传 + 多线程,大文件不焦虑
B 站一个 1080P 的番剧动不动 800MB,网络不好断了怎么办?Lux 默认支持断点续传,Ctrl+C 之后再跑同一条命令会从断点继续。多线程模式下可以同时拉多个分片,下载速度比单线程快好几倍。
三、同类工具对比
| 对比维度 | Lux | yt-dlp | 浏览器插件(Video DownloadHelper 等) |
|---|---|---|---|
| 核心方式 | Go 单文件 CLI | Python CLI | 浏览器扩展 |
| 运行时依赖 | 仅 FFmpeg(合并用) | Python + 依赖链 | 无 |
| 中文站覆盖 | 49 个,中文站为主战场 | 靠社区志愿维护 | 不稳定,常被检测屏蔽 |
| 海外站覆盖 | 基础覆盖 | 行业顶配,更新极快 | 一般 |
| 批量/合集下载 | ✅ -p 模式 + 范围指定 | ✅ | ❌ 基本不支持 |
| 多线程加速 | ✅ -n 参数 | 有限 | ❌ |
| Cookie 支持 | ✅ 字符串/文件 | ✅ 还支持自动读浏览器 | ✅ |
| 可脚本化 | ✅ 纯 CLI | ✅ | ❌ |
| 数据隐私 | 本地运行,数据不出机器 | 本地运行 | 插件有权限读所有网页 |
| 价格 | 免费开源 | 免费开源 | 基础免费,高级功能要订阅 |
Lux 的差异化亮点可以总结为:
- 零依赖部署——8MB 单文件,拷过去就能跑
- 中文站深耕——B 站/抖音/小红书/优酷的适配比 yt-dlp 更及时
- 可脚本化——天然适合写进自动化脚本和 CI 流程
- 资源占用极低——Go 二进制内存占用远小于 Python 解释器
四、手把手实操教程

环境准备
- 操作系统:Windows / macOS / Linux / FreeBSD 都支持
- FFmpeg:如果需要合并 B 站/YouTube 的音视频分片,需要单独安装 FFmpeg;只下单文件视频则不需要
- Go 环境(推荐方式):如果想拿到最新代码,需要装 Go(macOS 可以
brew install go)
第一步:安装
推荐用 go install 拿 master 最新代码(后面会解释为什么不要用 brew 装老版本):
go install github.com/iawia002/lux@latest安装完成后二进制在 $GOPATH/bin 或 $HOME/go/bin 下,确认一下:
which lux
lux -v其他安装方式(版本会偏旧):
# macOS
brew install lux
# Windows
scoop install lux
choco install lux第二步:查看视频清晰度
先不加任何下载,用 -i(info-only)看看这个链接有哪些清晰度可选:
lux -i "https://www.bilibili.com/video/BV1xx411c7mD"输出大概长这样:
Site: 哔哩哔哩 bilibili.com
Title: 示例视频标题
Type: video
Streams:
[default] -------------------
Quality: 高清 1080P
Size: 245.32 MiB
# download with: lux -f default "URL"
[720] -------------------
Quality: 高清 720P
Size: 128.66 MiB
# download with: lux -f 720 "URL"第三步:基础下载
默认直接下最高清晰度:
lux "https://www.bilibili.com/video/BV1xx411c7mD"或者用 -f 指定上一步看到的 stream ID:
lux -f 720 "https://www.bilibili.com/video/BV1xx411c7mD"第四步:进阶用法
批量下载合集(-p 是 playlist 模式):
lux -i -p "https://www.bilibili.com/bangumi/play/ep198061"只下合集里的第 1、3、5 到 8 集:
lux -p -items "1,3,5-8" "https://www.bilibili.com/bangumi/play/ep198061"多线程加速(-n 指定线程数,默认 10):
lux --multi-thread -n 16 "https://www.youtube.com/watch?v=dQw4w9WgXcQ"带 Cookie 下载(B 站高清、知乎付费内容需要登录态):
# 直接传 cookie 字符串
lux -c "SESSDATA=xxx; bili_jct=yyy" "https://www.bilibili.com/video/BV..."
# 或者从文件读
lux -c cookies.txt "https://www.bilibili.com/video/BV..."通过代理下载(YouTube 需要科学上网):
HTTPS_PROXY=http://127.0.0.1:7890 lux "https://www.youtube.com/watch?v=..."批量下载 URL 列表:
# urls.txt 每行一个链接
lux -F urls.txt指定输出路径和文件名:
lux -o ~/Downloads -O "我的归档视频" "https://www.bilibili.com/video/BV..."下载 YouTube 字幕并嵌入(master 最新功能):
lux -C -items en,zh -embed "https://www.youtube.com/watch?v=..."常用参数速查表
| 参数 | 作用 |
|---|---|
-i | 只查看信息,不下载 |
-f <id> | 指定清晰度 stream ID |
-p | 下载整个合集/播放列表 |
-n <num> | 下载线程数(默认 10) |
-c <cookie> | 传入 Cookie(字符串或文件路径) |
-o <path> | 指定输出目录 |
-O <name> | 指定输出文件名 |
-F <file> | 从文件读取 URL 列表批量下载 |
-r <url> | 指定 Referrer |
-d | 调试模式,输出网络请求详情 |
-j | 以 JSON 格式输出抓取的元数据 |
-retry <num> | 失败重试次数(默认 10) |
-start / -end / -items | 合集下载范围控制 |
-C | 下载字幕(YouTube) |
五、适用场景

场景一:开发者归档开源课程。很多技术 UP 主在 B 站发免费课程,课程可能随时下架。用 Lux 写一个脚本,把整个合集批量拉到本地,配合 NAS 永久保存。一条 lux -p 命令比手动一集集下高效太多。
场景二:内容创作者素材备份。做视频剪辑需要参考大量素材,用 Lux 把参考视频快速下到本地,不需要在线缓冲。多线程模式下一个 500MB 的视频几十秒就拉完了。
场景三:播客/讲座音频提取。网易云音乐、喜马拉雅上的讲座节目,用 Lux 可以直接抓音频流,不用装 App 也不用开会员。配合 --audio-only 模式,只拿音轨不拿视频。
场景四:自动化数据采集。Lux 支持 -j 输出 JSON 元数据,可以把它嵌到自己的数据采集 pipeline 里,先解析视频信息再决定要不要下载,非常适合需要程序化处理的场景。
六、客观优劣总结

优势:
- 单文件零依赖——Go 编译产物拷过去就能跑,不污染系统环境
- 中文站覆盖全面——49 个 extractor,国内主流视频平台基本全覆盖
- 命令简洁——基本用法就是
lux URL,学习成本极低 - 多线程 + 断点续传——大文件下载体验好
- 支持 Cookie 和代理——需要登录态和科学上网的场景都能覆盖
- MIT 协议——商用和二次开发都没有限制
- 可嵌入为库——除了 CLI,还可以作为 Go library 集成到自己项目里
局限性:
- 最新 release 停在 v0.24.1(2024-05)——虽然 master 分支还在活跃提交,但如果你用 brew/scoop 装到的都是过时版本,推荐一定走
go install @latest拿 master - 海外站不如 yt-dlp——YouTube 的边缘 case、Twitter 的新反爬机制,Lux 的响应速度不如 yt-dlp 社区
- 优酷 ccode 经常变——这是已知问题,优酷签名参数不定期更换,需要手动传
-ccode和-ckey,或者带登录 Cookie - 西瓜/头条视频必须带 Cookie——不带 Cookie 基本下不动,而且 Cookie 有效期较短
- 芒果 TV 多线程会 403——下芒果 TV 时建议把线程数设为 1
- 没有自动读浏览器 Cookie 的能力——yt-dlp 的
--cookies-from-browser很方便,Lux 需要手动导出 cookie 文件 - 复杂后处理能力弱——音频转码、章节切片这些 yt-dlp 的高级后处理,Lux 不做
合规提醒:请仅用于归档你自己有权访问的内容(自己上传的视频、已购买的课程、公开授权的素材)。不要用于绕过付费墙或下载受版权保护的内容。Cookie 是你的账号凭证,不要在公开渠道分享。
七、写在最后
如果你经常需要在中文视频站上归档内容,还在靠浏览器插件 + 抓包脚本那一套,Lux 值得你花 5 分钟试一下。它不会帮你破解任何付费内容,但会把"合法地把公开视频下载到本地"这件事从半小时压缩到十秒钟。
# 30 秒上手
go install github.com/iawia002/lux@latest
lux -i "https://www.bilibili.com/video/BV1xx411c7mD"
lux "https://www.bilibili.com/video/BV1xx411c7mD"仓库地址:github.com/iawia002/lux,觉得有用记得去给作者点个 Star。