- 批量归档某个 UP 主或播放列表:
-p配合-start/-end/-items选范围,比逐条粘 URL 省事,youtube-dl 的 playlist 参数组合更绕 - 在 CI 或容器里跑下载任务:Go 编译出单二进制,不用带 Python 运行时和一堆依赖,镜像体积和启动开销比 youtube-dl 小
- 需要按清晰度精确挑流:
-i先列所有流再-f指定,适合只想要某一路音视频轨、后续自己用 FFmpeg 处理的流水线 - 网络不稳的长任务:
.download临时文件保留,断了重跑能续,不用从头拉
专家点评
上手难度:进阶更新于 2026-11-11Go 写的多站点视频下载 CLI,顶替 youtube-dl 在需要单二进制分发和并发分片下载的场景
适用场景
踩坑
- 站点解析靠内置 extractor,站点改版就会失效:issue 里 YouTube url parse failed、bilibili 1080p 下不了、年龄限制绕不过这几类反复出现,说明解析层是持续维护的战场,选它就要接受某天某个站点突然不工作、得等更新或自己改 extractor
- FFmpeg 是硬前置:不装不影响下载但影响合并,最终拿到的可能是分离的音视频轨,容器里部署时容易漏装
- 部分站点要
-c传 Cookie 才能拿到高清晰度或过登录墙,mgtv 这类站点线程开多会 403、得把-n压到 1,并发参数不是全局越大越好
同类对比
youtube-dl/yt-dlp 的站点覆盖和维护活跃度更高,站点兼容性优先时选它;只要单二进制、Go 生态集成、不介意站点支持面窄一些,用 lux
go install github.com/iawia002/lux@latest
brew install luxREADME 未说明硬件要求,未提及显存或 GPU;工具为 Go 编写的命令行程序,需另行安装 FFmpeg 用于最终文件合并。
项目说明
由 README 自动翻译提炼用 Go 写的快速简洁视频下载库兼命令行工具,一条命令就能下载各站点视频
用 Go 写的视频下载库和命令行工具,支持 B 站、优酷、爱奇艺等站点,一条命令就能把网页视频存到本地。
核心能力
- 用 -i 列出所有清晰度,再用 -f 指定流下载
- 支持 -p 下载整个播放列表,可用 -start/-end/-items 选范围
- 用 -m 和 -n 开启多线程分片下载
- 中断后保留 .download 临时文件,可断点续传
- 支持 -c 传入 Cookie、HTTP/SOCKS5 代理和 -r 指定 Referer
容易踩的坑
FFmpeg 需单独安装,否则只影响最终文件合并而不影响下载;mgtv 下载线程过多会触发 HTTP 403,建议 -n 设为 1;部分站点需用 -c 提供 Cookie 才能访问视频。
- v0.24.1最新正式版2024-05-06 · 2024-05-06 01:32 UTC
What's Changed
- Bump go version to 1.22 by @iawia002 in https://github.com/iawia002/lux/pull/1350
Full Changelog: https://github.com/iawia002/lux/compare/v0.24.0...v0.24.1
- v0.24.02024-04-22 · 2024-04-22 02:55 UTC
查看更新说明
What's Changed
- fixes rumble loop by @rkrdeano in https://github.com/iawia002/lux/pull/1320
- 解決: windows os 下,嘗試在當前目錄中查找ffmpeg失敗 by @houzin in https://github.com/iawia002/lux/pull/1322
- fix: refactor instagram extractor by using embedding. by @omegaatt36 in https://github.com/iawia002/lux/pull/1327
- build(deps): bump google.golang.org/protobuf from 1.24.0 to 1.33.0 by @dependabot in https://github.com/iawia002/lux/pull/1328
- build(deps): bump github.com/antchfx/xmlquery from 1.2.4 to 1.3.1 by @dependabot in https://github.com/iawia002/lux/pull/1329
- chore: fix some typos in comments by @cuibuwei in https://github.com/iawia002/lux/pull/1335
- 优化小红书下载 by @iAsuma in https://github.com/iawia002/lux/pull/1337
- 重写iXigua(Toutiao)视频获取方式 by @iAsuma in https://github.com/iawia002/lux/pull/1338
- build(deps): bump golang.org/x/net from 0.17.0 to 0.23.0 by @dependabot in https://github.com/iawia002/lux/pull/1339
New Contributors
- @rkrdeano made their first contribution in https://github.com/iawia002/lux/pull/1320
- @houzin made their first contribution in https://github.com/iawia002/lux/pull/1322
- @omegaatt36 made their first contribution in https://github.com/iawia002/lux/pull/1327
- @cuibuwei made their first contribution in https://github.com/iawia002/lux/pull/1335
- @iAsuma made their first contribution in https://github.com/iawia002/lux/pull/1337
Full Changelog: https://github.com/iawia002/lux/compare/v0.23.0...v0.24.0
- v0.23.02024-02-21 · 2024-02-21 01:51 UTC
查看更新说明
What's Changed
- Update douyinData types.go by @hondajojo in https://github.com/iawia002/lux/pull/1299
- Update README.md by @sanfx in https://github.com/iawia002/lux/pull/1302
- Add --audio-only flag by @GNUSheep in https://github.com/iawia002/lux/pull/1304
- Bilibili Festival by @shavit in https://github.com/iawia002/lux/pull/1315
- 解决 bilibili 下载playlist时 LUX will skip files with same names by @leehow1988 in https://github.com/iawia002/lux/pull/1316
- 针对有-items参数时,视频的序号应该取整个合集中的序号,而不是取被下载的第几个 by @leehow1988 in https://github.com/iawia002/lux/pull/1317
New Contributors
- @hondajojo made their first contribution in https://github.com/iawia002/lux/pull/1299
- @sanfx made their first contribution in https://github.com/iawia002/lux/pull/1302
- @GNUSheep made their first contribution in https://github.com/iawia002/lux/pull/1304
- @leehow1988 made their first contribution in https://github.com/iawia002/lux/pull/1316
Full Changelog: https://github.com/iawia002/lux/compare/v0.22.0...v0.23.0
- v0.22.02023-11-06 · 2023-11-06 05:54 UTC
查看更新说明
What's Changed
- build(deps): bump golang.org/x/net from 0.7.0 to 0.17.0 by @dependabot in https://github.com/iawia002/lux/pull/1283
- Updated API for requesting subtitles from bilibili by @Nathaniel-Wu in https://github.com/iawia002/lux/pull/1285
- feat: support bilibili b23.tv domain by @long2ice in https://github.com/iawia002/lux/pull/1287
- Updated Bilibili bangumi extractor due to an API change by @Nathaniel-Wu in https://github.com/iawia002/lux/pull/1291
New Contributors
- @Nathaniel-Wu made their first contribution in https://github.com/iawia002/lux/pull/1285
- @long2ice made their first contribution in https://github.com/iawia002/lux/pull/1287
Full Changelog: https://github.com/iawia002/lux/compare/v0.21.0...v0.22.0
- v0.21.02023-10-09 · 2023-10-09 08:11 UTC
查看更新说明
What's Changed
- feat: add zingmp3 extractor by @hatienl0i261299 in https://github.com/iawia002/lux/pull/1280
- Add goreleaser action by @iawia002 in https://github.com/iawia002/lux/pull/1281
New Contributors
- @hatienl0i261299 made their first contribution in https://github.com/iawia002/lux/pull/1280
Full Changelog: https://github.com/iawia002/lux/compare/v0.20.0...v0.21.0
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
👾 Lux is a fast and simple video downloader built with Go.
- Installation
- Getting Started
- Supported Sites
- Known issues
- Contributing
- Authors
- Similar projects
- License
Installation
Prerequisites
The following dependencies are required and must be installed separately.
Note: FFmpeg does not affect the download, only affects the final file merge.
Install via go install
To install Lux, use go install, or download the binary file from Releases page.
$ go install github.com/iawia002/lux@latest
Homebrew (macOS only)
For macOS users, you can install lux via:
$ brew install lux
Arch Linux
For Arch Users AUR package is available.
Void Linux
For Void linux users, you can install lux via:
$ xbps-install -S lux
Scoop on Windows
$ scoop install lux
Chocolatey on Windows
$ choco install lux
Cask on Windows/macOS/Linux
$ cask install github.com/iawia002/lux
Getting Started
Usage:
lux [OPTIONS] URL [URL...]
Download a video
$ lux "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
Site: YouTube youtube.com
Title: Rick Astley - Never Gonna Give You Up (Video)
Type: video
Stream:
[248] -------------------
Quality: 1080p video/webm; codecs="vp9"
Size: 63.93 MiB (67038963 Bytes)
# download with: lux -f 248 ...
41.88 MiB / 63.93 MiB [=================>-------------] 65.51% 4.22 MiB/s 00m05s
The -i option displays all available quality of video without downloading.
$ lux -i "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
Site: YouTube youtube.com
Title: Rick Astley - Never Gonna Give You Up (Video)
Type: video
Streams: # All available quality
[248] -------------------
Quality: 1080p video/webm; codecs="vp9"
Size: 49.29 MiB (51687554 Bytes)
# download with: lux -f 248 ...
[137] -------------------
Quality: 1080p video/mp4; codecs="avc1.640028"
Size: 43.45 MiB (45564306 Bytes)
# download with: lux -f 137 ...
[398] -------------------
Quality: 720p video/mp4; codecs="av01.0.05M.08"
Size: 37.12 MiB (38926432 Bytes)
# download with: lux -f 398 ...
[136] -------------------
Quality: 720p video/mp4; codecs="avc1.4d401f"
Size: 31.34 MiB (32867324 Bytes)
# download with: lux -f 136 ...
[247] -------------------
Quality: 720p video/webm; codecs="vp9"
Size: 31.03 MiB (32536181 Bytes)
# download with: lux -f 247 ...
Use lux -f stream "URL" to download a specific stream listed in the output of -i option.
Download anything else
If Lux is provided the URL of a specific resource, then it will be downloaded directly:
$ lux "https://img9.bcyimg.com/drawer/15294/post/1799t/1f5a87801a0711e898b12b640777720f.jpg"
lux doesn't support this URL right now, but it will try to download it directly
Site: Universal
Title: 1f5a87801a0711e898b12b640777720f
Type: image/jpeg
Stream:
[default] -------------------
Size: 1.00 MiB (1051042 Bytes)
# download with: lux -f default "URL"
1.00 MiB / 1.00 MiB [===================================] 100.00% 1.21 MiB/s 0s
Download playlist
The -p option downloads an entire playlist instead of a single video.
$ lux -i -p "https://www.bilibili.com/bangumi/play/ep198061"
Site: 哔哩哔哩 bilibili.com
Title: Doctor X 第四季:第一集
Type: video
Streams: # All available quality
[default] -------------------
Quality: 高清 1080P
Size: 845.66 MiB (886738354 Bytes)
# download with: lux -f default "URL"
Site: 哔哩哔哩 bilibili.com
Title: Doctor X 第四季:第二集
Type: video
Streams: # All available quality
[default] -------------------
Quality: 高清 1080P
Size: 930.71 MiB (975919195 Bytes)
# download with: lux -f default "URL"
......
You can use the -start, -end or -items option to specify the download range of the list:
-start
Playlist video to start at (default 1)
-end
Playlist video to end at
-items
Playlist video items to download. Separated by commas like: 1,5,6,8-10
For bilibili playlists only:
-eto
File name of each bilibili episode doesn't include the playlist title
Multiple inputs
You can also download multiple URLs at once:
$ lux -i "https://www.bilibili.com/video/av21877586" "https://www.bilibili.com/video/av21990740"
Site: 哔哩哔哩 bilibili.com
Title: 【莓机会了】甜到虐哭的13集单集MAD「我现在什么都不想干,更不想看14集」
Type: video
Streams: # All available quality
[default] -------------------
Quality: 高清 1080P
Size: 51.88 MiB (54403767 Bytes)
# download with: lux -f default "URL"
Site: 哔哩哔哩 bilibili.com
Title: 【莓救了】甜到虐哭!!!国家队单集MAD-当熟悉的bgm响起,眼泪从脸颊滑下
Type: video
Streams: # All available quality
[default] -------------------
Quality: 高清 1080P
Size: 77.63 MiB (81404093 Bytes)
# download with: lux -f default "URL"
These URLs will be downloaded one by one.
You can also use the -F option to read URLs from file:
$ lux -F ~/Desktop/u.txt
Site: 微博 weibo.com
Title: 在Google,我们设计什么? via@阑夕
Type: video
Stream:
[default] -------------------
Size: 19.19 MiB (20118196 Bytes)
# download with: lux -f default "URL"
19.19 MiB / 19.19 MiB [=================================] 100.00% 9.69 MiB/s 1s
......
You can use the -start, -end or -items option to specify the download range of the list:
-start
File line to start at (default 1)
-end
File line to end at
-items
File lines to download. Separated by commas like: 1,5,6,8-10
Resume a download
Ctrl+C interrupts a download.
A temporary .download file is kept in the output directory. If lux is ran with the same arguments, then the download progress will resume from the last session.
Auto retry
lux will auto retry when the download failed, you can specify the retry times by -retry option (default is 100).
Cookies
Cookies can be provided to lux with the -c option if they are required for accessing the video.
Cookies can be the following format or Netscape Cookie format:
name=value; name2=value2; ...
Cookies can be a string or a text file, supply cookies in one of the two following ways.
As a string:
$ lux -c "name=value; name2=value2" "https://www.bilibili.com/video/av20203945"
As a text file:
$ lux -c cookies.txt "https://www.bilibili.com/video/av20203945"
Proxy
You can set the HTTP/SOCKS5 proxy using environment variables:
$ HTTP_PROXY="http://127.0.0.1:1087/" lux -i "https://www.youtube.com/watch?v=Gnbch2osEeo"
$ HTTP_PROXY="socks5://127.0.0.1:1080/" lux -i "https://www.youtube.com/watch?v=Gnbch2osEeo"
Multi-Thread
Use --multi-thread or -m multiple threads to download single video.
Use --thread or -n option to set the number of download threads(default is 10).
Note: If the video has multi fragment, the number of actual download threads will increase.
For example:
- If
-nis set to 10, and the video has 2 fragments, then 20 threads will actually be used.- If the video has 20 fragments, only 10 fragments are downloaded in the same time, the actual threads count is 100.
Special Tips: Use too many threads in mgtv download will cause HTTP 403 error, we recommend setting the number of threads to 1.
Short link
bilibili
You can just use av or ep number to download bilibili's video:
$ lux -i ep198381 av21877586
Site: 哔哩哔哩 bilibili.com
Title: 狐妖小红娘:第79话 南国公主的吃货本色
Type: video
Streams: # All available quality
[default] -------------------
Quality: 高清 1080P
Size: 485.23 MiB (508798478 Bytes)
# download with: lux -f default "URL"
Site: 哔哩哔哩 bilibili.com
Title: 【莓机会了】甜到虐哭的13集单集MAD「我现在什么都不想干,更不想看14集」
Type: video
Streams: # All available quality
[default] -------------------
Quality: 高清 1080P
Size: 51.88 MiB (54403767 Bytes)
# download with: lux -f default "URL"
Use specified Referrer
A Referrer can be used for the request with the -r option:
$ lux -r "https://www.bilibili.com/video/av20383055/" "http://cn-scnc1-dx.acgvideo.com/"
Specify the output path and name
The -o option sets the path, and -O option sets the name of the downloaded file:
$ lux -o ../ -O "hello" "https://example.com"
Debug Mode
The -d option outputs network request messages:
$ lux -i -d "http://www.bilibili.com/video/av20088587"
URL: http://www.bilibili.com/video/av20088587
Method: GET
Headers: http.Header{
"Referer": {"http://www.bilibili.com/video/av20088587"},
"Accept": {"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"},
"Accept-Charset": {"UTF-8,*;q=0.5"},
"Accept-Encoding": {"gzip,deflate,sdch"},
"Accept-Language": {"en-US,en;q=0.8"},
"User-Agent": {"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36"},
}
Status Code: 200
URL: https://interface.bilibili.com/v2/playurl?appkey=84956560bc028eb7&cid=32782944&otype=json&qn=116&quality=116&type=&sign=fb2e3f261fec398652f96d358517e535
Method: GET
Headers: http.Header{
"Accept-Charset": {"UTF-8,*;q=0.5"},
"Accept-Encoding": {"gzip,deflate,sdch"},
"Accept-Language": {"en-US,en;q=0.8"},
"User-Agent": {"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36"},
"Referer": {"https://interface.bilibili.com/v2/playurl?appkey=84956560bc028eb7&cid=32782944&otype=json&qn=116&quality=116&type=&sign=fb2e3f261fec398652f96d358517e535"},
"Accept": {"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"},
}
Status Code: 200
Site: 哔哩哔哩 bilibili.com
Title: 燃油动力的遥控奥迪R8跑赛道
Type: video
Streams: # All available quality
[default] -------------------
Quality: 高清 1080P
Size: 64.38 MiB (67504795 Bytes)
# download with: lux -f default "URL"
Reuse extracted data
The -j option will print the extracted data in JSON format.
$ lux -j "https://www.bilibili.com/video/av20203945"
{
"site": "哔哩哔哩 bilibili.com",
"title": "【2018拜年祭单品】相遇day by day",
"type": "video",
"streams": {
"15": {
"urls": [
{
"url": "...",
"size": 18355205,
"ext": "flv"
}
],
"quality": "流畅 360P",
"size": 18355205
},
"32": {
"urls": [
{
"url": "...",
"size": 40058632,
"ext": "flv"
}
],
"quality": "清晰 480P",
"size": 40058632
},
"64": {
"urls": [
{
"url": "...",
"size": 82691087,
"ext": "flv"
}
],
"quality": "高清 720P",
"size": 82691087
},
"80": {
"urls": [
{
"url": "...",
"size": 121735559,
"ext": "flv"
}
],
"quality": "高清 1080P",
"size": 121735559
}
}
}
Options
-i Information only
-F string
URLs file path
-d Debug mode
-j Print extracted data
-s Minimum outputs
-v Show version
Download:
-f string
Select specific stream to download
-p Download playlist
-n int
The number of download thread (only works for multiple-parts video) (default 10)
-c string
Cookie
-r string
Use specified Referrer
-cs int
HTTP chunk size for downloading (in MB) (default 1)
Network:
-retry int
How many times to retry when the download failed (default 10)
Playlist:
-start int
Playlist video to start at (default 1)
-end int
Playlist video to end at
-items string
Playlist video items to download. Separated by commas like: 1,5,6,8-10
Filesystem:
-o string
Specify the output path
-O string
Specify the output file name
Subtitle:
-C Download subtitles
-C -items en,zh
Download specific languages (YouTube only)
-C -items en,zh -embed
Embed subtitles into the video (YouTube only)
Youku:
-ccode string
Youku ccode (default "0502")
-ckey string
Youku ckey (default "7B19C0AB12633B22E7FE81271162026020570708D6CC189E4924503C49D243A0DE6CD84A766832C2C99898FC5ED31F3709BB3CDD82C96492E721BDD381735026")
-password string
Youku password
aria2:
Note: If you use aria2 to download, you need to merge the multi-part videos yourself.
-aria2
Use Aria2 RPC to download
-aria2addr string
Aria2 Address (default "localhost:6800")
-aria2method string
Aria2 Method (default "http")
-aria2token string
Aria2 RPC Token
Supported Sites
Known issues
优酷
优酷的 ccode 经常变化导致 lux 不可用,如果你知道有新的可用的 ccode,可以直接使用 lux -ccode ... 而不用等待 lux 更新(当然,也欢迎你给我们提一个 Pull request 来更新默认的 ccode)
最好是每次下载都附带登录过的 Cookie 以避免部分 ccode 的问题
西瓜/头条视频
西瓜/头条视频必须带 Cookie 才能下载成功,西瓜和头条可共用西瓜视频的 Cookie,Cookie 的有效期可能较短,下载失败就更新 Cookie 尝试:
$ lux -c "msToken=yoEh0-qLUq4obZ8Sfxsem_CxCo9R3NM6ViTrWaRcM1...; ttwid=1%7C..." "https://m.toutiao.com/is/iYbTfJ79/"
Contributing
Lux is an open source project and built on the top of open-source projects. Check out the Contributing Guide to get started.
Authors
Code with ❤️ by iawia002 and lovely contributors
Similar projects
License
MIT
Copyright (c) 2018-present, iawia002