lux

iawia002MIT更新放缓 有专家点评

用 Go 写的视频下载库和命令行工具,支持 B 站、优酷、爱奇艺等站点,一条命令就能把网页视频存到本地。

👾 Fast and simple video download library and CLI tool written in Go

v0.24.1发布于 2024-05-06 01:32 UTC31,837star +12 / 7 天3,332fork同步于 2026-11-10 23:23 UTC

专家点评

上手难度:进阶更新于 2026-11-11

Go 写的多站点视频下载 CLI,顶替 youtube-dl 在需要单二进制分发和并发分片下载的场景

适用场景

  • 批量归档某个 UP 主或播放列表:-p 配合 -start/-end/-items 选范围,比逐条粘 URL 省事,youtube-dl 的 playlist 参数组合更绕
  • 在 CI 或容器里跑下载任务:Go 编译出单二进制,不用带 Python 运行时和一堆依赖,镜像体积和启动开销比 youtube-dl 小
  • 需要按清晰度精确挑流:-i 先列所有流再 -f 指定,适合只想要某一路音视频轨、后续自己用 FFmpeg 处理的流水线
  • 网络不稳的长任务:.download 临时文件保留,断了重跑能续,不用从头拉

踩坑

  • 站点解析靠内置 extractor,站点改版就会失效:issue 里 YouTube url parse failed、bilibili 1080p 下不了、年龄限制绕不过这几类反复出现,说明解析层是持续维护的战场,选它就要接受某天某个站点突然不工作、得等更新或自己改 extractor
  • FFmpeg 是硬前置:不装不影响下载但影响合并,最终拿到的可能是分离的音视频轨,容器里部署时容易漏装
  • 部分站点要 -c 传 Cookie 才能拿到高清晰度或过登录墙,mgtv 这类站点线程开多会 403、得把 -n 压到 1,并发参数不是全局越大越好

同类对比

youtube-dl/yt-dlp 的站点覆盖和维护活跃度更高,站点兼容性优先时选它;只要单二进制、Go 生态集成、不介意站点支持面窄一些,用 lux

怎么上手

由 README 提炼,执行前请确认
go install github.com/iawia002/lux@latest
brew install lux
硬件要求按 README 说明

README 未说明硬件要求,未提及显存或 GPU;工具为 Go 编写的命令行程序,需另行安装 FFmpeg 用于最终文件合并。

支持 Apple Silicon
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 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 才能访问视频。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.24.1
  1. v0.24.1最新正式版2024-05-06 · 2024-05-06 01:32 UTC

    What's Changed

    Full Changelog: https://github.com/iawia002/lux/compare/v0.24.0...v0.24.1

  2. v0.24.02024-04-22 · 2024-04-22 02:55 UTC
    查看更新说明

    What's Changed

    New Contributors

    Full Changelog: https://github.com/iawia002/lux/compare/v0.23.0...v0.24.0

  3. v0.23.02024-02-21 · 2024-02-21 01:51 UTC
    查看更新说明

    What's Changed

    New Contributors

    Full Changelog: https://github.com/iawia002/lux/compare/v0.22.0...v0.23.0

  4. v0.22.02023-11-06 · 2023-11-06 05:54 UTC
    查看更新说明

    What's Changed

    New Contributors

    Full Changelog: https://github.com/iawia002/lux/compare/v0.21.0...v0.22.0

  5. v0.21.02023-10-09 · 2023-10-09 08:11 UTC
    查看更新说明

    What's Changed

    New Contributors

    Full Changelog: https://github.com/iawia002/lux/compare/v0.20.0...v0.21.0

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    👾 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.

    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

    SiteURL🎬 Videos🌁 Images🔊 Audio📚 Playlist🍪 VIP adaptationBuild Status
    抖音https://www.douyin.com✓✓douyin
    哔哩哔哩https://www.bilibili.com✓✓✓bilibili
    半次元https://bcy.net✓bcy
    pixivisionhttps://www.pixivision.net✓pixivision
    优酷https://www.youku.com✓✓youku
    YouTubehttps://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
    芒果 TVhttps://www.mgtv.com✓mgtv
    糖豆广场舞https://www.tangdou.com✓tangdou
    Tumblrhttps://www.tumblr.com✓✓tumblr
    Vimeohttps://vimeo.com✓vimeo
    Facebookhttps://facebook.com✓facebook
    斗鱼视频https://v.douyu.com✓douyu
    秒拍https://www.miaopai.com✓miaopai
    微博https://weibo.com✓weibo
    Instagramhttps://www.instagram.com✓✓instagram
    Threadshttps://www.threads.net✓✓threads
    Twitterhttps://twitter.com✓twitter
    腾讯视频https://v.qq.com✓qq
    网易云音乐https://music.163.com✓netease
    音悦台https://yinyuetai.com✓yinyuetai
    极客时间https://time.geekbang.org✓geekbang
    Pornhubhttps://pornhub.com✓pornhub
    XVIDEOShttps://xvideos.com✓xvideos
    聯合新聞網https://udn.com✓udn
    TikTokhttps://www.tiktok.com✓tiktok
    Pinteresthttps://www.pinterest.com✓pinterest
    好看视频https://haokan.baidu.com✓haokan
    AcFunhttps://www.acfun.cn✓✓acfun
    Epornerhttps://eporner.com✓eporner
    StreamTapehttps://streamtape.com✓streamtape
    虎扑https://hupu.com✓hupu
    虎牙视频https://v.huya.com✓huya
    喜马拉雅https://www.ximalaya.com✓ximalaya
    快手https://www.kuaishou.com✓kuaishou
    Reddithttps://www.reddit.com✓✓reddit
    VKontaktehttps://vk.com✓vk
    知乎https://zhihu.com✓zhihu
    Rumblehttps://rumble.com✓rumble
    小红书https://xiaohongshu.com✓xiaohongshu
    Zing MP3https://zingmp3.vn✓✓zingmp3
    Bitchutehttps://www.bitchute.com✓bitchute
    Odyseehttps://odysee.com✓✓odysee

    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