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

Annie

👾 Annie is a fast, simple and clean 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 Annie, use go install, or download the binary file from Releases page.

$ go install github.com/iawia002/annie@latest

Homebrew (macOS only)

For macOS users, you can install annie via:

$ brew install annie

Arch Linux

For Arch Users AUR package is available.

Void Linux

For Void linux users, you can install annie via:

$ xbps-install -S annie

Scoop on Windows

$ scoop install annie

Chocolatey on Windows

$ choco install annie

Getting Started

Usage:

annie [OPTIONS] URL [URL...]

Download a video

-------------] 65.51% 4.22 MiB/s 00m05s">
$ annie "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: annie -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.

$ annie -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: annie -f 248 ...

     [137]  -------------------
     Quality:         1080p video/mp4; codecs="avc1.640028"
     Size:            43.45 MiB (45564306 Bytes)
     # download with: annie -f 137 ...

     [398]  -------------------
     Quality:         720p video/mp4; codecs="av01.0.05M.08"
     Size:            37.12 MiB (38926432 Bytes)
     # download with: annie -f 398 ...

     [136]  -------------------
     Quality:         720p video/mp4; codecs="avc1.4d401f"
     Size:            31.34 MiB (32867324 Bytes)
     # download with: annie -f 136 ...

     [247]  -------------------
     Quality:         720p video/webm; codecs="vp9"
     Size:            31.03 MiB (32536181 Bytes)
     # download with: annie -f 247 ...

Use annie -f stream "URL" to download a specific stream listed in the output of -i option.

Download anything else

If Annie is provided the URL of a specific resource, then it will be downloaded directly:

$ annie "https://img9.bcyimg.com/drawer/15294/post/1799t/1f5a87801a0711e898b12b640777720f.jpg"

annie 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: annie -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.

$ annie -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: annie -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: annie -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:

$ annie -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: annie -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: annie -f default "URL"

These URLs will be downloaded one by one.

You can also use the -F option to read URLs from file:

$ annie -F ~/Desktop/u.txt

 Site:      微博 weibo.com
 Title:     在Google,我们设计什么? via@阑夕
 Type:      video
 Stream:
     [default]  -------------------
     Size:            19.19 MiB (20118196 Bytes)
     # download with: annie -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 annie is ran with the same arguments, then the download progress will resume from the last session.

Auto retry

annie 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 annie 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:

$ annie -c "name=value; name2=value2" "https://www.bilibili.com/video/av20203945"

As a text file:

$ annie -c cookies.txt "https://www.bilibili.com/video/av20203945"

If the -c is not set, annie will try to get the cookies from the current user's Chrome or Edge automatically. To use this feature, you need to shutdown your Chrome or Edge for only one time and let annie launch the browser for you.

Proxy

You can set the HTTP/SOCKS5 proxy using environment variables:

$ HTTP_PROXY="http://127.0.0.1:1087/" annie -i "https://www.youtube.com/watch?v=Gnbch2osEeo"
$ HTTP_PROXY="socks5://127.0.0.1:1080/" annie -i "https://www.youtube.com/watch?v=Gnbch2osEeo"

Multi-Thread

Use -n option to set the number of download threads(default is 10, only works for multiple-parts video).

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:

$ annie -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: annie -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: annie -f default "URL"

Use specified Referrer

A Referrer can be used for the request with the -r option:

$ annie -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:

$ annie -o ../ -O "hello" "https://example.com"

Debug Mode

The -d option outputs network request messages:

$ annie -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: annie -f default "URL"

Reuse extracted data

The -j option will print the extracted data in JSON format.

$ annie -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 captions

Youku:

  -ccode string
    	Youku ccode (default "0590")
  -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 📚 Playlist 🍪 VIP adaptation
抖音 https://www.douyin.com
哔哩哔哩 https://www.bilibili.com
半次元 https://bcy.net
pixivision https://www.pixivision.net
优酷 https://www.youku.com
YouTube https://www.youtube.com
爱奇艺 https://www.iqiyi.com
芒果TV https://www.mgtv.com
糖豆广场舞 http://www.tangdou.com
Tumblr https://www.tumblr.com
Vimeo https://vimeo.com
Facebook https://facebook.com
斗鱼视频 https://v.douyu.com
秒拍 https://www.miaopai.com
微博 https://weibo.com
Instagram https://www.instagram.com
Twitter https://twitter.com
腾讯视频 https://v.qq.com
网易云音乐 https://music.163.com
音悦台 https://yinyuetai.com
极客时间 https://time.geekbang.org
Pornhub https://pornhub.com
XVIDEOS https://xvideos.com
聯合新聞網 https://udn.com
TikTok https://www.tiktok.com
好看视频 https://haokan.baidu.com
AcFun https://www.acfun.cn
Eporner https://eporner.com
StreamTape https://streamtape.com

Known issues

优酷

优酷的 ccode 经常变化导致 annie 不可用,如果你知道有新的可用的 ccode,可以直接使用 annie -ccode ... 而不用等待 annie 更新(当然,也欢迎你给我们提一个 Pull request 来更新默认的 ccode

最好是每次下载都附带登录过的 Cookie 以避免部分 ccode 的问题

Contributing

Annie is an open source project and built on the top of open-source projects. If you are interested, then you are welcome to contribute. Let's make Annie better, together. 💪

Check out the Contributing Guide to get started.

Special thanks to @Yasujizr who designed the amazing logo!

Thanks for JetBrains for the wonderful IDE.

Authors

Code with ❤️ by iawia002 and lovely contributors

Similar projects

License

MIT

Copyright (c) 2018-present, iawia002

Owner
Xinzhao Xu
Working on multi-cluster at @kubesphere, @karmada-io contributor. Previously @bytedance, @caicloud
Xinzhao Xu
Comments
  • 下载bilibili时,遇到奇怪的无动作,无流量,然后就出错,再无法运行了

    下载bilibili时,遇到奇怪的无动作,无流量,然后就出错,再无法运行了

    annie.exe -p "https://www.bilibili.com/bangumi/play/ss20611/?from=search&seid=14422128004608274375"
    
     Site:      哔哩哔哩 bilibili.com
     Title:     亿万富翁们的饕餮盛宴:第1集
     Type:      video
     Stream:
         [default]  -------------------
         Quality:         高清 1080P
         Size:            702.81 MiB (736947316 Bytes)
         # download with: annie -f default "URL"
    
     0 B / 702.81 MiB [-------------------------------------------------------------------------------------------------]   0.00%panic: runtime error: invalid memory address or nil pointer dereference
    [signal 0xc0000005 code=0x0 addr=0x38 pc=0x63bce9]
    
    goroutine 33 [running]:
    github.com/iawia002/annie/utils.FileSize(0xc04206f6e0, 0x2f, 0x70fd1c, 0x3)
            /Users/mac/iawia002/go/src/github.com/iawia002/annie/utils/utils.go:52 +0x59
    github.com/iawia002/annie/downloader.FormatData.urlSave(0xc04223c500, 0xb, 0x10, 0x7156e0, 0xc, 0x2becec74, 0xc042322240, 0x11c, 0x45ef0d5, 0x70fd1c, ...)
            /Users/mac/iawia002/go/src/github.com/iawia002/annie/downloader/downloader.go:62 +0xbd
    github.com/iawia002/annie/downloader.VideoData.Download.func1(0xc04201a500, 0xc04232d0e0, 0xc042322240, 0x11c, 0x45ef0d5, 0x70fd1c, 0x3, 0xc04200f200, 0x2e, 0xc04200fd40, ...)
            /Users/mac/iawia002/go/src/github.com/iawia002/annie/downloader/downloader.go:212 +0xf4
    created by github.com/iawia002/annie/downloader.VideoData.Download
            /Users/mac/iawia002/go/src/github.com/iawia002/annie/downloader/downloader.go:210 +0x3d6
    

    win10下运行 0.6.8,下载到第一集(显示)80%左右,网卡无流量,百分比不长,用 ctrl+c 退出后再运行,几分钟后再次进入无流量状态。

    再ctrl+c,再运行就是上面出错,无法再继续下载了。 看样子是合并时候出的问题?下面是残留的文件 ……

    -rw-r--r-- 1 Jerry 197121 702M 4月  28 02:51  亿万富翁们的饕餮盛宴:第1集.mp4
    -rw-r--r-- 1 Jerry 197121  70M 4月  28 01:30 '亿万富翁们的饕餮盛宴:第1集[3].flv'
    -rw-r--r-- 1 Jerry 197121    0 4月  28 03:00 '亿万富翁们的饕餮盛宴:第1集[9].flv.download'
    -rw-r--r-- 1 Jerry 197121 3.3M 4月  28 02:58 '亿万富翁们的饕餮盛宴:第2集[0].flv.download'
    -rw-r--r-- 1 Jerry 197121  58M 4月  28 02:56 '亿万富翁们的饕餮盛宴:第2集[1].flv'
    -rw-r--r-- 1 Jerry 197121  51M 4月  28 02:57 '亿万富翁们的饕餮盛宴:第2集[10].flv'
    -rw-r--r-- 1 Jerry 197121  54M 4月  28 02:55 '亿万富翁们的饕餮盛宴:第2集[2].flv'
    -rw-r--r-- 1 Jerry 197121  43M 4月  28 02:54 '亿万富翁们的饕餮盛宴:第2集[3].flv'
    -rw-r--r-- 1 Jerry 197121 889K 4月  28 02:58 '亿万富翁们的饕餮盛宴:第2集[4].flv.download'
    -rw-r--r-- 1 Jerry 197121  14M 4月  28 02:58 '亿万富翁们的饕餮盛宴:第2集[5].flv.download'
    -rw-r--r-- 1 Jerry 197121  88M 4月  28 02:54 '亿万富翁们的饕餮盛宴:第2集[6].flv'
    -rw-r--r-- 1 Jerry 197121  63M 4月  28 02:56 '亿万富翁们的饕餮盛宴:第2集[7].flv'
    -rw-r--r-- 1 Jerry 197121  64M 4月  28 02:54 '亿万富翁们的饕餮盛宴:第2集[8].flv'
    -rw-r--r-- 1 Jerry 197121 3.8M 4月  28 02:58 '亿万富翁们的饕餮盛宴:第2集[9].flv.download'
    
  • 优酷视频下载不完整

    优酷视频下载不完整

    你好: 我用annie -ccode 0590 -d https://v.youku.com/v_show/id_XMzk1NjM2OTAw.html?spm=a2h0j.11185381.listitem_page1.5!3~A&&s=cc003400962411de83b1下载的时候,内容只有12分钟,但是视频是有24分钟的,我哪里使用的有问题吗?

  • QQ panic: runtime error: index out of range

    QQ panic: runtime error: index out of range

    annie -i https://v.qq.com/x/cover/7xoocndx1w8g085.html panic: runtime error: index out of range

    goroutine 1 [running]: github.com/iawia002/annie/extractors.QQ(0xc0000102a0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) /Users/mac/iawia002/go/src/github.com/iawia002/annie/extractors/qq.go:155 +0x735 main.download(0xc0000102a0, 0x2d, 0xc000079de0, 0x4206d323cbecf015) /Users/mac/iawia002/go/src/github.com/iawia002/annie/main.go:104 +0x32f main.main() /Users/mac/iawia002/go/src/github.com/iawia002/annie/main.go:155 +0x123

  • 优酷下载失败

    优酷下载失败

    annie https://v.youku.com/v_show/id_XMzQ2NzU2NTg0MA.html -d panic: runtime error: index out of range

    goroutine 1 [running]: github.com/iawia002/annie/extractors.genData(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x8, ...) /Users/mac/iawia002/go/src/github.com/iawia002/annie/extractors/youku.go:83 +0x4e7 github.com/iawia002/annie/extractors.Youku(0x7fff88f748d3, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) /Users/mac/iawia002/go/src/github.com/iawia002/annie/extractors/youku.go:111 +0x185 main.main() /Users/mac/iawia002/go/src/github.com/iawia002/annie/main.go:55 +0x247

  • download video from bilibili.com which url not end with av+id will not exit after downloading.

    download video from bilibili.com which url not end with av+id will not exit after downloading.

    as the title says, tests below:

    tony@tony-VirtualBox:~/下载$ 
       Site:   哔哩哔哩 bilibili.com
      Title:   【Perfume】 Music Station (2018.02.23) 无限未来
       Type:   video
    Quality:   高清 720P
       Size:   52.13 MiB (54661154 Bytes)
    
     52.13 MiB / 52.13 MiB [============================] 100.00% 540.23 KiB/s 1m38s
    
    [1]+  已完成               annie https://www.bilibili.com/video/av19976437?from=search
    

    after downloading, the process will not exit, you should enter the "enter" key to exit.

  • Youku 的解析失效了

    Youku 的解析失效了

    annie -i -d https://v.youku.com/v_show/id_XNDYzODE0MjY0.html
    
    annie: version 0.6.11, A fast, simple and clean video downloader.
    
    
    URL:         http://log.mmstat.com/eg.js
    Method:      GET
    Headers:     http.Header{
        "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://v.youku.com"},
        "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"},
    }
    Status Code: 200
    
    URL:         https://ups.youku.com/ups/get.json?vid=XNDYzODE0MjY0&ccode=0502&client_ip=192.168.1.1&client_ts=1525951&utid=mxl7E06XFz0CASrs2aCPL0VV&ckey=DIl58SLFxFNndSV1GFNnMQVYkx1PP5tKe1siZu%2F86PR1u%2FWh1Ptd%2BWOZsHHWxysSfAOhNJpdVWsdVJNsfJ8Sxd8WKVvNfAS8aS8fAOzYARzPyPc3JvtnPHjTdKfESTdnuTW6ZPvk2pNDh4uFzotgdMEFkzQ5wZVXl2Pf1%2FY6hLK0OnCNxBj3%2Bnb0v72gZ6b0td%2BWOZsHHWxysSo%2F0y9D2K42SaB8Y%2F%2BaD2K42SaB8Y%2F%2BahU%2BWOZsHcrxysooUeND
    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"},
        "Accept":          {"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"},
        "Referer":         {"https://v.youku.com"},
    }
    Status Code: 200
    2018/05/10 19:23:08 用户账户异常、请重新登录
    
  • bilibili 1080p+有的视频无速度

    bilibili 1080p+有的视频无速度

    就像这样 bilibili='annie -c $HOME/cookie.txt -o $HOME/storage/downloads/'

    bilibili av94118198                                WARNING: linker: /data/data/com.termux/files/home/go/bin/annie: unsupported flags DT_FLAGS_1=0x8000001
    
     Site:      哔哩哔哩 bilibili.com
     Title:     【爱否速描】OPPO Find X2 Pro,今年的 Find 系列够黑科技吗?
     Type:      video
     Stream:
         [116]  -------------------
         Quality:         高清 1080P60
         Size:            306.14 MiB (321014228 Bytes)
         # download with: annie -f 116 ...
    
     0 B / 306.14 MiB [----------------------------]   0.00%Downloading https://www.bilibili.com/video/av94118198 error:
    http://upos-sz-mirrorks3.bilivideo.com/upgcxcode/16/68/160686816/160686816-1-116.flv?e=ig8euxZM2rNcNbR37zNVhwdlhW4ahbdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEVEuxTEto8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&deadline=1583503643&gen=playurl&nbs=1&oi=2045631344&os=ks3bv&platform=pc&trid=c324ffa9a21f4a719e24e897016b3082&uipk=5&upsig=f1b101b38c9db4becb58e45aa3e923e6&uparams=e,deadline,gen,nbs,oi,os,platform,trid,uipk&mid=0 request error: HTTP 403
    

    而且go get -u -v后,会报错

    # github.com/iawia002/annie/extractors/youtube
    go/src/github.com/iawia002/annie/extractors/youtube/youtube.go:190:27: videoInfo.GetDownloadURL undefined (type *ytdl.VideoInfo has no field or method GetDownloadURL)
    

    只能暂时手动把关于YouTube的代码和文件删除…

  • [Youku]客户端无权播放,201

    [Youku]客户端无权播放,201

    C:\Users\Administrator>annie https://v.youku.com/v_show/id_XMzE0ODM1ODg1Ng==.htm l 2018/08/20 05:33:04 客户端无权播放,201

    想请作者帮忙测试一下能不能解决这个问题呢?  youtube-dl,you-get,现在都不能正常下载优酷,个人尝试改了多个ccode都无法解决。

  • Archlinux Support

    Archlinux Support

    Hello,

    I just wrote a package build for Archlinux(https://aur.archlinux.org/packages/annie/), maybe can be useful for archusers if you mention that in README/install

    Regards, Joaquin

  • New Design

    New Design

    untitled-1

    Hi I have made a icon to help you in your project and to better present the program you have developed. If you want any change, you can contact me without hesitation. I hope you use it.

  • 增加了当下载视频时,多线程分段下载的功能

    增加了当下载视频时,多线程分段下载的功能

    1. 使用-m 参数启用多线程下载,线程数量由-n决定
    2. 代码上是增加Save的可选版本MultiThreadSave版本。与进度条兼容。
    3. MultiThreadSave的实现: 将文件分成指定的thread数量的part文件,每个part 文件记录着在整个文件中的偏移量,以及本part当前已下载的数据大小。恢复下载时,会同意所有part的信息,以支持继续下载。 当重新启动后,part数量与线程数量不同时,有以下两种情况:
      1. 线程数量小于现存part数,则按线程池调度去完成所有part(使用信号量控制)
      2. 线程数大于现存part数,则多于的线程不启用。 下载完成后,合并所有part,然后删除part文件(因此可能需要两倍大小的磁盘容量,回续可能优化) 线程调度方案也可能会优化,以尽量利用可能的线程
  • [download fail]: Bilibili Festival

    [download fail]: Bilibili Festival

    Website name: Bilibili

    OS: macOS Monterey (arm)

    Video URL: https://www.bilibili.com/video/BV1dZ4y1Y7bt

    url parse failed

    > lux 'https://www.bilibili.com/festival/lty10th?bvid=BV1dZ4y1Y7bt'
    Downloading https://www.bilibili.com/festival/lty10th?bvid=BV1dZ4y1Y7bt error:
    url parse failed
    github.com/iawia002/lux/extractors/bilibili.extractNormalVideo
    	/Users/iawia002/go/src/github.com/iawia002/lux/extractors/bilibili/bilibili.go:188
    github.com/iawia002/lux/extractors/bilibili.(*extractor).Extract
    	/Users/iawia002/go/src/github.com/iawia002/lux/extractors/bilibili/bilibili.go:301
    github.com/iawia002/lux/extractors.Extract
    	/Users/iawia002/go/src/github.com/iawia002/lux/extractors/extractors.go:52
    github.com/iawia002/lux/app.download
    	/Users/iawia002/go/src/github.com/iawia002/lux/app/app.go:270
    github.com/iawia002/lux/app.New.func1
    	/Users/iawia002/go/src/github.com/iawia002/lux/app/app.go:247
    github.com/urfave/cli/v2.(*App).RunContext
    	/Users/iawia002/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:322
    github.com/urfave/cli/v2.(*App).Run
    	/Users/iawia002/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:224
    main.main
    	/Users/iawia002/go/src/github.com/iawia002/lux/main.go:13
    runtime.main
    	/usr/local/Cellar/[email protected]/1.18.6/libexec/src/runtime/proc.go:250
    runtime.goexit
    	/usr/local/Cellar/[email protected]/1.18.6/libexec/src/runtime/asm_arm64.s:1270
    github.com/iawia002/lux/extractors.Extract
    	/Users/iawia002/go/src/github.com/iawia002/lux/extractors/extractors.go:54
    github.com/iawia002/lux/app.download
    	/Users/iawia002/go/src/github.com/iawia002/lux/app/app.go:270
    github.com/iawia002/lux/app.New.func1
    	/Users/iawia002/go/src/github.com/iawia002/lux/app/app.go:247
    github.com/urfave/cli/v2.(*App).RunContext
    	/Users/iawia002/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:322
    github.com/urfave/cli/v2.(*App).Run
    	/Users/iawia002/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:224
    main.main
    	/Users/iawia002/go/src/github.com/iawia002/lux/main.go:13
    runtime.main
    	/usr/local/Cellar/[email protected]/1.18.6/libexec/src/runtime/proc.go:250
    runtime.goexit
    	/usr/local/Cellar/[email protected]/1.18.6/libexec/src/runtime/asm_arm64.s:1270
    
    > lux -i https://www.bilibili.com/video/BV1dZ4y1Y7bt/
    Downloading https://www.bilibili.com/video/BV1dZ4y1Y7bt/ error:
    url parse failed
    github.com/iawia002/lux/extractors/bilibili.extractNormalVideo
    	github.com/iawia002/lux/extractors/bilibili/bilibili.go:187
    github.com/iawia002/lux/extractors/bilibili.(*extractor).Extract
    	github.com/iawia002/lux/extractors/bilibili/bilibili.go:300
    github.com/iawia002/lux/extractors.Extract
    	github.com/iawia002/lux/extractors/extractors.go:52
    github.com/iawia002/lux/app.download
    	github.com/iawia002/lux/app/app.go:271
    github.com/iawia002/lux/app.New.func1
    	github.com/iawia002/lux/app/app.go:248
    github.com/urfave/cli/v2.(*App).RunContext
    	github.com/urfave/cli/[email protected]/app.go:322
    github.com/urfave/cli/v2.(*App).Run
    	github.com/urfave/cli/[email protected]/app.go:224
    main.main
    	github.com/iawia002/lux/main.go:13
    runtime.main
    	runtime/proc.go:250
    runtime.goexit
    	runtime/asm_arm64.s:1259
    github.com/iawia002/lux/extractors.Extract
    	github.com/iawia002/lux/extractors/extractors.go:54
    github.com/iawia002/lux/app.download
    	github.com/iawia002/lux/app/app.go:271
    github.com/iawia002/lux/app.New.func1
    	github.com/iawia002/lux/app/app.go:248
    github.com/urfave/cli/v2.(*App).RunContext
    	github.com/urfave/cli/[email protected]/app.go:322
    github.com/urfave/cli/v2.(*App).Run
    	github.com/urfave/cli/[email protected]/app.go:224
    main.main
    	github.com/iawia002/lux/main.go:13
    runtime.main
    	runtime/proc.go:250
    runtime.goexit
    	runtime/asm_arm64.s:1259
    

    Screenshots

    截屏2022-12-31 19 23 38

    Additional context

    none

  • 下载失败:视频链接在b站可以正常显示视频,但是下载的时候报错:url parse failed

    下载失败:视频链接在b站可以正常显示视频,但是下载的时候报错:url parse failed

    https://m.bilibili.com/video/BV1ge411c7Nt?p=1671771893 Website name: name

    linux OS:: Windows/Linux/macOS

    Video URL:: url https://m.bilibili.com/video/BV1ge411c7Nt?p=1671771893

    url parse failed github.com/iawia002/lux/extractors/bilibili.extractNormalVideo /Users/iawia002/go/src/github.com/iawia002/lux/extractors/bilibili/bilibili.go:187 github.com/iawia002/lux/extractors/bilibili.(*extractor).Extract /Users/iawia002/go/src/github.com/iawia002/lux/extractors/bilibili/bilibili.go:300 github.com/iawia002/lux/extractors.Extract /Users/iawia002/go/src/github.com/iawia002/lux/extractors/extractors.go:52 github.com/iawia002/lux/app.download /Users/iawia002/go/src/github.com/iawia002/lux/app/app.go:271 github.com/iawia002/lux/app.New.func1 /Users/iawia002/go/src/github.com/iawia002/lux/app/app.go:248 github.com/urfave/cli/v2.(*App).RunContext /Users/iawia002/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:322 github.com/urfave/cli/v2.(*App).Run /Users/iawia002/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:224 main.main /Users/iawia002/go/src/github.com/iawia002/lux/main.go:13 runtime.main /usr/local/Cellar/go/1.18.1/libexec/src/runtime/proc.go:250 runtime.goexit /usr/local/Cellar/go/1.18.1/libexec/src/runtime/asm_amd64.s:1571 github.com/iawia002/lux/extractors.Extract /Users/iawia002/go/src/github.com/iawia002/lux/extractors/extractors.go:54 github.com/iawia002/lux/app.download /Users/iawia002/go/src/github.com/iawia002/lux/app/app.go:271 github.com/iawia002/lux/app.New.func1 /Users/iawia002/go/src/github.com/iawia002/lux/app/app.go:248 github.com/urfave/cli/v2.(*App).RunContext /Users/iawia002/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:322 github.com/urfave/cli/v2.(*App).Run /Users/iawia002/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:224 main.main /Users/iawia002/go/src/github.com/iawia002/lux/main.go:13 runtime.main /usr/local/Cellar/go/1.18.1/libexec/src/runtime/proc.go:250 runtime.goexit /usr/local/Cellar/go/1.18.1/libexec/src/runtime/asm_amd64.s:1571 Stack overflow

    error message here
    

    Screenshots

    none

    视频链接在b站可以正常显示视频,但是下载的时候报错:url parse failed Additional context

    none

  • feat: split-fragment

    feat: split-fragment

    This can speed up bilibili video download.

    Bilibili videos are usually divided into 2 fragments (A&V).

    Therefore, before this PR, the program uses only 2 threads to download when -thread 10.

  • 不能下载快手短视频[download fail]: 快手 https://www.kuaishou.com

    不能下载快手短视频[download fail]: 快手 https://www.kuaishou.com

    快手 https://www.kuaishou.com/short-video/3xhxsz8k44jdfh6

    Website name: 快手

    Windows 10 LTSC X64

    https://www.kuaishou.com/short-video/3xhxsz8k44jdfh6

    Video URL:: url https://www.kuaishou.com/short-video/3xhxsz8k44jdfh6

    Stack overflow

    error message here
    

    lux https://www.kuaishou.com/short-video/3xhxsz8k44jdfh6 Downloading https://www.kuaishou.com/short-video/3xhxsz8k44jdfh6 error: url parse failed github.com/iawia002/lux/extractors/kuaishou.(*extractor).Extract /Users/iawia002/go/src/github.com/iawia002/lux/extractors/kuaishou/kuaishou.go:78 github.com/iawia002/lux/extractors.Extract /Users/iawia002/go/src/github.com/iawia002/lux/extractors/extractors.go:52 github.com/iawia002/lux/app.download /Users/iawia002/go/src/github.com/iawia002/lux/app/app.go:270 github.com/iawia002/lux/app.New.func1 /Users/iawia002/go/src/github.com/iawia002/lux/app/app.go:247 github.com/urfave/cli/v2.(*App).RunContext /Users/iawia002/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:322 github.com/urfave/cli/v2.(*App).Run /Users/iawia002/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:224 main.main /Users/iawia002/go/src/github.com/iawia002/lux/main.go:13 runtime.main /usr/local/Cellar/[email protected]/1.18.6/libexec/src/runtime/proc.go:250 runtime.goexit /usr/local/Cellar/[email protected]/1.18.6/libexec/src/runtime/asm_amd64.s:1571 github.com/iawia002/lux/extractors.Extract /Users/iawia002/go/src/github.com/iawia002/lux/extractors/extractors.go:54 github.com/iawia002/lux/app.download /Users/iawia002/go/src/github.com/iawia002/lux/app/app.go:270 github.com/iawia002/lux/app.New.func1 /Users/iawia002/go/src/github.com/iawia002/lux/app/app.go:247 github.com/urfave/cli/v2.(*App).RunContext /Users/iawia002/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:322 github.com/urfave/cli/v2.(*App).Run /Users/iawia002/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:224 main.main /Users/iawia002/go/src/github.com/iawia002/lux/main.go:13 runtime.main /usr/local/Cellar/[email protected]/1.18.6/libexec/src/runtime/proc.go:250 runtime.goexit /usr/local/Cellar/[email protected]/1.18.6/libexec/src/runtime/asm_amd64.s:1571

    Screenshots

    none

    Additional context

    none

Command-line program to download videos from YouTube.com and other video sites

youtube-dl - download videos from youtube.com or other video platforms INSTALLATION DESCRIPTION OPTIONS CONFIGURATION OUTPUT TEMPLATE FORMAT SELECTION

Jan 9, 2023
Got: Simple golang package and CLI tool to download large files faster 🏃 than cURL and Wget!

Got. Simple and fast concurrent downloader. Installation ❘ CLI Usage ❘ Module Usage ❘ License Comparison Comparison in cloud server: [root@centos-nyc-

Dec 29, 2022
Go-file-downloader-ftctl - A file downloader cli built using golang. Makes use of cobra for building the cli and go concurrent feature to download files.

ftctl This is a file downloader cli written in Golang which uses the concurrent feature of go to download files. The cli is built using cobra. How to

Jan 2, 2022
CLI tool to upload object to s3-compatible storage backend and set download policy for it.
CLI tool to upload object to s3-compatible storage backend and set download policy for it.

typora-s3 CLI tool to upload object to s3-compatible storage backend and set download policy for it. Build $ git clone https://github.com/fengxsong/ty

Dec 29, 2021
A golang CLI tool to download malware from a variety of sources.

mlget _____ _____ _____ _____ _____ /\ \

Jan 2, 2023
zipspy - a CLI tool to extract files from zip archives in S3 without needing to download the entire archive

Zipspy allows you interact with ZIP archives stored in remote locations without requiring a local copy. For example, you can list the filenames in an S3 ZIP archive, download a subset of files, search and retrieve files with regular expressions, and more!

Feb 19, 2022
A tiny Go library + client for downloading Youtube videos. The library is capable of fetching Youtube video metadata, in addition to downloading videos.

A tiny Go library + client (command line Youtube video downloader) for downloading Youtube videos. The library is capable of fetching Youtube video metadata, in addition to downloading videos. If ffmpeg is available, client can extract MP3 audio from downloaded video files.

Oct 14, 2022
Build an interactive CLI application with Go, Cobra and promptui. Video tutorial available on the Div Rhino YouTube channel.

Build an interactive CLI app with Go, Cobra and promptui Text tutorial: https://divrhino.com/articles/build-interactive-cli-app-with-go-cobra-promptui

Dec 8, 2022
Gowget - A simple wget tool built using golang to download files from the internet whether it is zip

gowget wget built using golang About: A simple wget tool built using golang to d

May 21, 2022
A youtube library for retrieving metadata, and obtaining direct links to video-only/audio-only/mixed versions of videos on YouTube in Go.

A youtube library for retrieving metadata, and obtaining direct links to video-only/audio-only/mixed versions of videos on YouTube in Go. Install go g

Dec 10, 2022
A terminal-based download manager written in Go!

goload-manager About A terminal-based download manager written in Go! This project uses grab for downloading and tcell for the terminal interface. Hea

Oct 7, 2021
Downloader written in golang to download the public data files from RUC Paraguay.

rucpy-downloader Downloader written in golang to download the public data files(RUC Paraguay) from set.gov.py. The downloader will download the public

Dec 6, 2021
📥 Command-line tool to download videos from hanime.tv

hanime Command-line tool to download videos from hanime.tv Requirements Installation Install via go get Install from source Install from release Usage

Dec 18, 2022
This is the tool to download files from qiniu cruster manually.

This is the tool to download files from qiniu cruster manually. toCheck = []string{ sealPath, filepath.Join(cachePath, "p_aux"), filepath.Join(cachePa

Nov 25, 2021
Nebula Diagnosis CLI Tool is an information diagnosis cli tool for the nebula service and the node to which the service belongs.

Nebula Diagnosis CLI Tool is an information diagnosis cli tool for the nebula service and the node to which the service belongs.

Jan 12, 2022
VIP video downloader, such as: iqiyi, youku, qq, ...etc.

vip-video-downloader VIP Video Downloader, such as: iqiyi, youku, qq, ...etc. usage Download vip-video-downloader download URL [flags] Merge vip-video

Dec 22, 2022
Watch your favourite anime using the video player of your choice directly from the command line

anime-cli Watch your favourite anime using the video player of your choice direc

Feb 10, 2022
Video downloader, from youtube using golang

Video Downloader for Youtube This is a command line project which downloads videos from youtube using golang. Usage : Get your favourite music video f

Jan 10, 2022