lux README

The project's README from github.com/iawia002/lux. As one markdown file: README.md.

Lux

Let there be Lux!

Codecov GitHub Workflow Status Go Report Card GitHub release Homebrew

👾 Lux is a fast and simple video downloader built with Go.

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 -n is 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.

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

Site URL 🎬 Videos 🌁 Images 🔊 Audio 📚 Playlist 🍪 VIP adaptation Build Status
抖音 https://www.douyin.com ✓ ✓ douyin
哔哩哔哩 https://www.bilibili.com ✓ ✓ ✓ bilibili
半次元 https://bcy.net ✓ bcy
pixivision https://www.pixivision.net ✓ pixivision
优酷 https://www.youku.com ✓ ✓ youku
YouTube https://www.youtube.com ✓ ✓ youtube
西瓜视频(头条) https://m.toutiao.com, https://v.ixigua.com, https://www.ixigua.com ✓ ixigua
爱奇艺 https://www.iqiyi.com ✓ iqiyi
新片场 https://www.xinpianchang.com ✓ [xinpianchang](htt

lux (iawia002/lux)

Searching Database…

31.8K ·GitHub
这是什么东西?Lux 是一个用 Go 编写的快速、简洁的视频下载器——一个命令行工具,可以从 YouTube、bilibili、抖音、优酷、爱奇艺等网站下载视频、图片和音频。
它是一个终端命令,还是我在代码里用的库?两者都是——Lux 既有 Go 库,也有命令行工具,但大多数人只是打开一个终端,带上网址和参数运行 lux 命令。
我怎么把它装到自己电脑上?可以用 go install 安装,或者从 Releases 页面下载编译好的文件;包管理器也行——macOS 上用 Homebrew,Arch 上用 AUR,Void Linux 有软件包,Windows 上可以用 Scoop、Chocolatey 或 Cask。
要正常运行还需要装别的东西吗?必须安装 FFmpeg,而且要单独装——它不影响下载本身,只影响最后把文件合并的步骤。
有哪些坑需要注意?有几个:下载 mgtv 的视频时线程开太多会报 HTTP 403(把 threads 设为 1 即可);如果用 aria2 下载,分段视频得自己手动合并;另外 README 里列出了优酷和西瓜/头条视频的已知问题。
它在 Windows 上能跑吗,还是只有 macOS 和 Linux 能用?三个系统都能跑:macOS 用 Homebrew,Arch 用 AUR,Void Linux 有软件包,Windows 用 Scoop、Chocolatey 或 Cask——其他情况还可以用 go install 或预编译的可执行文件。
它支持哪些网站?支持站点列表里包括抖音、bilibili、YouTube、优酷、爱奇艺、西瓜/头条、bcy、pixivision、新片场等等——视频、图片、音频和整个播放列表都能下。Bilibili 和优酷还有 VIP 适配,bilibili 甚至不用完整网址,只给 av 号或 ep 号就行。
能一次下载整个播放列表或多个视频吗?可以——用 -p 选项下载整个播放列表,再用 -start、-end 或 -items 缩小范围。也可以在一条命令里传入多个网址,或者用 -F 从文件里读取。
如果下载到一半中断或者失败了怎么办?按 Ctrl+C 会留下一个临时的 .download 文件,用同样的参数重新运行 lux 就能从断开的地方继续下载。失败的下载还会自动重试——默认重试 100 次,可以用 -retry 调整。
登录、代理和下载速度方面呢?需要登录的视频可以用 -c 传入 cookies(字符串或 Netscape cookie 文件都行);通过环境变量配置 HTTP/SOCKS5 代理来走代理流量;下载单个视频时可以用多线程提速:用 -m 开启,用 -n 设置线程数(默认 10)。
Creator
iawia002
Size
2.5 MB
Stars
31.8K
Age
8y
Commits · 90 Days