Skip to content

开源工具评测: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 Star31.5k+
支持站点49 个(视频/图片/音频/合集)
二进制体积~8MB(无运行时依赖)
唯一外部依赖FFmpeg(仅用于音视频合并)

它的核心设计理念是 "Do one thing well":抓取媒体、暴露所有清晰度选项、然后退出。不做播放器、不做库管理、不做推荐——就是纯粹地把视频从 URL 变成本地文件。

支持的站点覆盖了几乎所有你能想到的中文视频平台:哔哩哔哩、抖音、快手、小红书、微博、知乎、爱奇艺、优酷、腾讯视频、芒果 TV、AcFun、好看视频、西瓜视频、斗鱼、虎牙、网易云音乐、喜马拉雅、极客时间;海外则有 YouTube、Vimeo、Twitter、Instagram、TikTok、Reddit、Facebook 等。

二、为什么推荐它 ​

GitHub 项目界面示意

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 之后再跑同一条命令会从断点继续。多线程模式下可以同时拉多个分片,下载速度比单线程快好几倍。

三、同类工具对比 ​

对比维度Luxyt-dlp浏览器插件(Video DownloadHelper 等)
核心方式Go 单文件 CLIPython CLI浏览器扩展
运行时依赖仅 FFmpeg(合并用)Python + 依赖链无
中文站覆盖49 个,中文站为主战场靠社区志愿维护不稳定,常被检测屏蔽
海外站覆盖基础覆盖行业顶配,更新极快一般
批量/合集下载✅ -p 模式 + 范围指定✅❌ 基本不支持
多线程加速✅ -n 参数有限❌
Cookie 支持✅ 字符串/文件✅ 还支持自动读浏览器✅
可脚本化✅ 纯 CLI✅❌
数据隐私本地运行,数据不出机器本地运行插件有权限读所有网页
价格免费开源免费开源基础免费,高级功能要订阅

Lux 的差异化亮点可以总结为:

  1. 零依赖部署——8MB 单文件,拷过去就能跑
  2. 中文站深耕——B 站/抖音/小红书/优酷的适配比 yt-dlp 更及时
  3. 可脚本化——天然适合写进自动化脚本和 CI 流程
  4. 资源占用极低——Go 二进制内存占用远小于 Python 解释器

四、手把手实操教程 ​

核心优势信息图(示意)

环境准备 ​

  • 操作系统:Windows / macOS / Linux / FreeBSD 都支持
  • FFmpeg:如果需要合并 B 站/YouTube 的音视频分片,需要单独安装 FFmpeg;只下单文件视频则不需要
  • Go 环境(推荐方式):如果想拿到最新代码,需要装 Go(macOS 可以 brew install go)

第一步:安装 ​

推荐用 go install 拿 master 最新代码(后面会解释为什么不要用 brew 装老版本):

bash
go install github.com/iawia002/lux@latest

安装完成后二进制在 $GOPATH/bin 或 $HOME/go/bin 下,确认一下:

bash
which lux
lux -v

其他安装方式(版本会偏旧):

bash
# macOS
brew install lux

# Windows
scoop install lux
choco install lux

第二步:查看视频清晰度 ​

先不加任何下载,用 -i(info-only)看看这个链接有哪些清晰度可选:

bash
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"

第三步:基础下载 ​

默认直接下最高清晰度:

bash
lux "https://www.bilibili.com/video/BV1xx411c7mD"

或者用 -f 指定上一步看到的 stream ID:

bash
lux -f 720 "https://www.bilibili.com/video/BV1xx411c7mD"

第四步:进阶用法 ​

批量下载合集(-p 是 playlist 模式):

bash
lux -i -p "https://www.bilibili.com/bangumi/play/ep198061"

只下合集里的第 1、3、5 到 8 集:

bash
lux -p -items "1,3,5-8" "https://www.bilibili.com/bangumi/play/ep198061"

多线程加速(-n 指定线程数,默认 10):

bash
lux --multi-thread -n 16 "https://www.youtube.com/watch?v=dQw4w9WgXcQ"

带 Cookie 下载(B 站高清、知乎付费内容需要登录态):

bash
# 直接传 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 需要科学上网):

bash
HTTPS_PROXY=http://127.0.0.1:7890 lux "https://www.youtube.com/watch?v=..."

批量下载 URL 列表:

bash
# urls.txt 每行一个链接
lux -F urls.txt

指定输出路径和文件名:

bash
lux -o ~/Downloads -O "我的归档视频" "https://www.bilibili.com/video/BV..."

下载 YouTube 字幕并嵌入(master 最新功能):

bash
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 里,先解析视频信息再决定要不要下载,非常适合需要程序化处理的场景。

六、客观优劣总结 ​

应用工作台示意

优势:

  1. 单文件零依赖——Go 编译产物拷过去就能跑,不污染系统环境
  2. 中文站覆盖全面——49 个 extractor,国内主流视频平台基本全覆盖
  3. 命令简洁——基本用法就是 lux URL,学习成本极低
  4. 多线程 + 断点续传——大文件下载体验好
  5. 支持 Cookie 和代理——需要登录态和科学上网的场景都能覆盖
  6. MIT 协议——商用和二次开发都没有限制
  7. 可嵌入为库——除了 CLI,还可以作为 Go library 集成到自己项目里

局限性:

  1. 最新 release 停在 v0.24.1(2024-05)——虽然 master 分支还在活跃提交,但如果你用 brew/scoop 装到的都是过时版本,推荐一定走 go install @latest 拿 master
  2. 海外站不如 yt-dlp——YouTube 的边缘 case、Twitter 的新反爬机制,Lux 的响应速度不如 yt-dlp 社区
  3. 优酷 ccode 经常变——这是已知问题,优酷签名参数不定期更换,需要手动传 -ccode 和 -ckey,或者带登录 Cookie
  4. 西瓜/头条视频必须带 Cookie——不带 Cookie 基本下不动,而且 Cookie 有效期较短
  5. 芒果 TV 多线程会 403——下芒果 TV 时建议把线程数设为 1
  6. 没有自动读浏览器 Cookie 的能力——yt-dlp 的 --cookies-from-browser 很方便,Lux 需要手动导出 cookie 文件
  7. 复杂后处理能力弱——音频转码、章节切片这些 yt-dlp 的高级后处理,Lux 不做

合规提醒:请仅用于归档你自己有权访问的内容(自己上传的视频、已购买的课程、公开授权的素材)。不要用于绕过付费墙或下载受版权保护的内容。Cookie 是你的账号凭证,不要在公开渠道分享。

七、写在最后 ​

如果你经常需要在中文视频站上归档内容,还在靠浏览器插件 + 抓包脚本那一套,Lux 值得你花 5 分钟试一下。它不会帮你破解任何付费内容,但会把"合法地把公开视频下载到本地"这件事从半小时压缩到十秒钟。

bash
# 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。

📖本文阅读--次|📊全站访问--次|👥访客--人