V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iawia002
V2EX  ›  程序员

我用 Go 语言写了一个类似 youtube-dl 和 you-get 的工具

  •  6
     
  •   iawia002 · 2018-03-19 19:53:59 +08:00 · 18071 次点击
    这是一个创建于 2201 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/iawia002/annie

    程序运行速度比 Python 写的工具提升很多(这不废话吗哈哈哈哈哈哈),下载速度也有提升,针对那些分了片的视频,用了 goroutine,总体速度提升很多

    $ annie -c cookies.txt https://www.bilibili.com/video/av20203945/
    
       Site:    哔哩哔哩 bilibili.com
      Title:     [ 2018 拜年祭单品] 相遇 day by day
       Type:    video
    Quality:    高清 1080P60
       Size:    220.65 MiB (231363071 Bytes)
    
     2.06 MiB / 220.65 MiB [>-----------------------------]   0.93% 1.94 MiB/s 1m52s
    

    现在大视频网站只支持 B 站,优酷,YouTube,爱奇艺和芒果 TV

    最后,静态编译型语言真 TM 爽 ເ😎ว

    第 1 条附言  ·  2018-03-20 12:09:48 +08:00
    如果大家有兴趣的话,欢迎 Pull requests ! make annie better!
    112 条回复    2020-02-25 19:04:43 +08:00
    1  2  
    AlwaysBehave
        1
    AlwaysBehave  
       2018-03-19 20:05:07 +08:00 via Android
    正好在计划类似项目
    找时间看看 pr 一波
    iawia002
        2
    iawia002  
    OP
       2018-03-19 20:06:01 +08:00   ❤️ 1
    @AlwaysBehave 欢迎 PR !
    fhefh
        3
    fhefh  
       2018-03-19 20:06:28 +08:00
    谢谢楼主 学习了~
    iawia002
        4
    iawia002  
    OP
       2018-03-19 20:07:00 +08:00   ❤️ 2
    现在基础的功能都有,断点续传,带 cookies 访问,支持 http 代理和 socks5 代理
    iawia002
        5
    iawia002  
    OP
       2018-03-19 20:07:58 +08:00
    @fhefh 那不给我点个 Star,哈哈哈哈哈哈
    AlwaysBehave
        6
    AlwaysBehave  
       2018-03-19 20:09:24 +08:00 via Android
    说个小建议:bilibili 的 key 做成动态获取的
    写死 build 很难受
    类似的都可以这样做一下🤔
    我记得类似的有 bilibili for mac
    justfortest
        7
    justfortest  
       2018-03-19 20:09:29 +08:00
    学习了
    FrankAdler
        8
    FrankAdler  
       2018-03-19 20:10:13 +08:00
    最近在写 go 项目, 参考下
    fhefh
        9
    fhefh  
       2018-03-19 20:11:14 +08:00
    @iawia002 哈哈 已点
    frozenthrone
        10
    frozenthrone  
       2018-03-19 20:11:36 +08:00 via iPhone
    求支持 avgle
    iawia002
        11
    iawia002  
    OP
       2018-03-19 20:12:42 +08:00
    @AlwaysBehave 你是说那个 seckey 吗,那个不能动态获取的,那个是写死的,现在的都不知道是哪位大神从 Android 客户端逆向出来的
    hlwjia
        12
    hlwjia  
       2018-03-19 20:12:59 +08:00
    为什么起名 annie,请说出你的故事
    hlwjia
        13
    hlwjia  
       2018-03-19 20:14:10 +08:00
    iawia002
        14
    iawia002  
    OP
       2018-03-19 20:14:52 +08:00
    大家如果还记得的话,我是 lulu 的维护者,就是那个 you-get 的 fork,https://www.v2ex.com/t/428150
    iawia002
        15
    iawia002  
    OP
       2018-03-19 20:15:38 +08:00
    @hlwjia 哈哈哈哈哈哈这位朋友你找的很快嘛
    anyfc
        16
    anyfc  
       2018-03-19 20:40:10 +08:00
    下载 youku 视频的时候,提示: 客户端无权播放,201
    怎么解决
    admirez
        17
    admirez  
       2018-03-19 20:41:58 +08:00
    为什么起名 annie,请说出你的故事
    pathbox
        18
    pathbox  
       2018-03-19 20:43:35 +08:00 via iPhone
    YouTube 要代理吗?
    expy
        19
    expy  
       2018-03-19 20:54:34 +08:00
    用过 lulu,star 感谢一波!
    lixuda
        20
    lixuda  
       2018-03-19 20:58:01 +08:00
    go 代替 python 节奏
    itfanr
        21
    itfanr  
       2018-03-19 21:15:43 +08:00 via Android
    好东西
    moro
        22
    moro  
       2018-03-19 21:22:51 +08:00
    学习
    iawia002
        23
    iawia002  
    OP
       2018-03-19 21:29:26 +08:00
    哎,刚才回复太快了,被禁了好久啊(哇,很惨啊,我就连回了两条消息),大家的问题我慢慢回吧

    @frozenthrone avgle 这是什么网站啊,看名字难道是🌚?我不知道他们的网页或者 api 怎么样,不好评估难度。我知道 pornhub 和 91 的视频都不难🌚

    @anyfc 那是因为 ccode 不对优酷出的提示,我都用了多个 ccode 来一个个试了都还不行啊,我呆会儿看看(单元测试为证,昨天都还可以)

    @admirez 别闹,取名字真的很难

    @pathbox 肯定要呀
    bigtan
        24
    bigtan  
       2018-03-19 21:56:40 +08:00   ❤️ 1
    提了个 issue youtube 的视频下载以后,rename 失败;
    支持楼主添加 91
    iawia002
        25
    iawia002  
    OP
       2018-03-19 22:13:04 +08:00   ❤️ 1
    @anyfc 优酷那个问题是个 bug🌚我的锅,我用多个 ccode 尝试的代码有点小问题,现在已经改好了,更新一下,0.4.1

    @bigtan 咦,是你呀,我回你了,你看下回复,我复现不了哎,这个问题有点奇怪
    winglight2016
        26
    winglight2016  
       2018-03-19 22:16:22 +08:00
    怎么控制视频质量呢?我用默认命令下载的视频分辨率是最小的
    mingyun
        27
    mingyun  
       2018-03-19 22:24:58 +08:00
    为什么安装失败
    fatal: unable to access 'https://github.com/iawia002/annie/': error:1407742E:SSL
    routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
    package github.com/iawia002/annie: exit status 128
    iawia002
        28
    iawia002  
    OP
       2018-03-19 22:25:38 +08:00
    @winglight2016 现在不支持选视频质量,但是 annie 都是下的最高清晰度的呀,你下载的哪个地址?
    iawia002
        29
    iawia002  
    OP
       2018-03-19 22:27:49 +08:00
    @mingyun 咦,你是怎么安装的,go get?,你这个报错信息看起来是网络问题呀,不行就下 https://github.com/iawia002/annie/releases,这个应该是下下来就能跑的
    winglight2016
        30
    winglight2016  
       2018-03-19 22:30:37 +08:00
    @iawia002 是我搞错了,一直以为 youtube 上最低都是 720p,谁知道这个是 360p
    就这个视频,网页上看是很清晰的:
    iawia002
        31
    iawia002  
    OP
       2018-03-19 22:37:27 +08:00
    @winglight2016 不是我的问题就好哈哈哈哈哈哈
    winglight2016
        32
    winglight2016  
       2018-03-19 22:42:13 +08:00
    @iawia002 我正在学 go,还要跟 lz 多学习
    wspsxing
        33
    wspsxing  
       2018-03-19 22:45:27 +08:00
    start + 1
    楼主厉害啦,自从 fx 57+后 flash-get 不能用了,总想找个或搞个下载 b 站视频的。
    mashirozx
        34
    mashirozx  
       2018-03-19 22:51:57 +08:00
    活捉!
    iawia002
        35
    iawia002  
    OP
       2018-03-19 22:52:49 +08:00
    @mashirozx 哈哈哈哈哈哈没想到又在 V 站上遇到你了
    mashirozx
        36
    mashirozx  
       2018-03-19 22:55:21 +08:00
    @iawia002 d=====( ̄▽ ̄*)b
    affyun
        37
    affyun  
       2018-03-19 23:00:14 +08:00
    请问下载 youtube 的 playlist 时能跳过里面失效的视频吗?
    iawia002
        38
    iawia002  
    OP
       2018-03-19 23:05:20 +08:00
    @affyun 现在 Youtube 还不支持 playlist 下载哦,现在只有 b 站支持 playlist
    以后要支持的话应该可以吧,你的意思就是只下载这个列表里面能下载的嘛?
    affyun
        39
    affyun  
       2018-03-19 23:11:09 +08:00
    @iawia002 #38 视频被删除或者设置为私享后就不能访问了。如果 playlist 里有这类视频的话,用 youtube-dl 会到那个视频就停止下载
    cchange
        40
    cchange  
       2018-03-19 23:12:55 +08:00
    请问是用什么软件开发的? 是 JetBrain 的 go 语言 IDE 吗? 实在是新手
    见谅
    iawia002
        41
    iawia002  
    OP
       2018-03-19 23:14:02 +08:00
    @affyun 哦它应该是 youtube 返回错误它就退出整个程序了,annie 现在还不知道以后这种情况怎么处理哎,以后增加了播放列表功能我再看看能不能实现你的需求吧
    iawia002
        42
    iawia002  
    OP
       2018-03-19 23:17:18 +08:00
    @cchange 我是用 Atom 写的,用什么编辑器不存在的吧,用你顺手的就行了
    zhongjidalao
        43
    zhongjidalao  
       2018-03-19 23:30:08 +08:00
    you-get 最近不能用了,你这个很厉害,已经点 start
    cchange
        44
    cchange  
       2018-03-19 23:58:38 +08:00
    @iawia002 谢谢
    看来调试过程是编译后看输出结果,我是想有没有办法打断点,方便调试。
    iawia002
        45
    iawia002  
    OP
       2018-03-20 07:29:28 +08:00
    @zhongjidalao 你知道 lulu 吗,一个 you-get 的 fork,lulu 应该还是能用的,只是没有 annie 快哈哈哈哈哈哈
    wweir
        46
    wweir  
       2018-03-20 07:47:02 +08:00 via Android
    Go 替代 python 是波大节奏了,支持一下
    iawia002
        47
    iawia002  
    OP
       2018-03-20 08:12:45 +08:00
    谈不上替代 python 吧,只是感觉这个场景适合 Go,需要速度,而且静态语言好维护
    liangzi
        48
    liangzi  
       2018-03-20 08:13:20 +08:00 via Android
    mark 感谢分享
    iawia002
        49
    iawia002  
    OP
       2018-03-20 08:20:56 +08:00
    但是 Go 调试起来确实比 python 差太远了啊,还是我 pdb 好用,毕竟解释型语言,可以各种折腾
    @cchange 想起来了,调试有个工具叫 Delve,我还没用过,应该比 gdb 好用
    seers
        50
    seers  
       2018-03-20 08:48:35 +08:00
    感谢,前两天还用了 lulu
    yedashuai
        51
    yedashuai  
       2018-03-20 09:21:30 +08:00
    火速 star,you-get 还在使用,就是从 you-get 开始入了 Python 的坑,看来又要从你这个 Annie 入 go 的坑了!!!
    iawia002
        52
    iawia002  
    OP
       2018-03-20 09:28:52 +08:00
    Golang 欢迎你 😆
    shuianfendi6
        53
    shuianfendi6  
       2018-03-20 09:29:55 +08:00
    @iawia002 大佬,annie 下 b 站经常下不完,下载 100%了去掉.download 也会提示权限失败,需要提 issue 么
    cozzz
        54
    cozzz  
       2018-03-20 09:30:48 +08:00 via iPhone
    prpr
    iawia002
        55
    iawia002  
    OP
       2018-03-20 09:34:06 +08:00
    @shuianfendi6 你是说报错了是吧,net/http: request canceled (Client.Timeout exceeded while reading body),这样的报错吗,那是网络原因下载中断了,你再执行一次命令就好了,有断点记录的,会从断的地方开始下
    123s
        56
    123s  
       2018-03-20 09:39:15 +08:00
    建议支持 tumblr
    stormwindcity
        57
    stormwindcity  
       2018-03-20 09:40:06 +08:00
    star
    OMGZui
        58
    OMGZui  
       2018-03-20 09:43:47 +08:00
    支持一波
    iawia002
        59
    iawia002  
    OP
       2018-03-20 09:44:24 +08:00
    @shuianfendi6 问题没有解决或者这里不好说就给我提 issue 吧
    @123s feature-request 也给我提个 issue 备忘吧
    archknight
        60
    archknight  
       2018-03-20 09:50:27 +08:00
    好厉害。
    missdeer
        61
    missdeer  
       2018-03-20 10:08:47 +08:00
    终于有用 go 写的这种工具了,star 一个
    caoyufei
        62
    caoyufei  
       2018-03-20 10:21:38 +08:00
    已 star,在多支持些站点更好
    iawia002
        63
    iawia002  
    OP
       2018-03-20 10:25:30 +08:00
    谢谢大家的支持,受宠若惊受宠若惊

    @caoyufei annie 才刚刚开始嘛,慢慢来

    如果大家有兴趣的话,欢迎 Pull requests ! make annie better!
    AlwaysBehave
        64
    AlwaysBehave  
       2018-03-20 10:40:53 +08:00 via Android
    @iawia002 那个也会变啊… TYPCN 的 Bilibili for mac 就是这样做的啊
    iawia002
        65
    iawia002  
    OP
       2018-03-20 10:43:35 +08:00
    @AlwaysBehave 那个 key 是算出来的?我一直觉得是 B 站写死的,他们好像定期会更新
    fork
        66
    fork  
       2018-03-20 10:51:34 +08:00
    本来想干移植 youtube-dl 这件事, 果然已经有人干了,晚上回家试试,python 的 youtube-dl 确实做的不错的。
    orangeade
        67
    orangeade  
       2018-03-20 10:58:39 +08:00
    python 版上 asyncio 的话下载速度是不是也有提升,我看 requests 作者已经开始为 requests 加入 asyncio 了
    hahasong
        68
    hahasong  
       2018-03-20 11:05:09 +08:00
    youtube-dl 如何把 1080p 视频跟音频合在一起,直接给出的格式里只有 1080p 视频无音轨
    iawia002
        69
    iawia002  
    OP
       2018-03-20 11:21:29 +08:00
    @orangeade 运行速度相比于 Go 还是硬伤啊

    @hahasong 你的意思是 youtube-dl 下载的视频是没有音频版本的?它应该是单独下载的视频音频最后用 ffmpeg 合在一起的
    ango
        70
    ango  
       2018-03-20 11:45:41 +08:00
    厉害,学习一下。star~
    wyd2004
        71
    wyd2004  
       2018-03-20 12:06:26 +08:00
    学习一下. 已 star.
    AlwaysBehave
        72
    AlwaysBehave  
       2018-03-20 12:10:45 +08:00 via Android
    @iawia002 是解包出来的,TYPCN 虚拟机跑 apk 从内存 dump 出来 key 的,做了自动化
    不知道现在还是这个样子不
    iawia002
        73
    iawia002  
    OP
       2018-03-20 12:12:15 +08:00
    @AlwaysBehave 卧槽这个方法可以啊,🤙🤙🤙
    jason0916
        74
    jason0916  
       2018-03-20 12:16:21 +08:00
    速度大概提升了多少啊?一直以为下载工具的瓶颈在网络 io
    mxalbert1996
        75
    mxalbert1996  
       2018-03-20 12:22:11 +08:00 via Android
    B 站支持大会员清晰度吗?支持的话还是相当优秀的
    iawia002
        76
    iawia002  
    OP
       2018-03-20 12:39:36 +08:00
    @jason0916 具体的没有测试过哎,毕竟编译型语言,各种响应速度都比 Python 快

    @mxalbert1996 必须支持啊(前提是你有 B 站大会员的 cookies 啊),你看我上面主题介绍里面那个视频,就是我带我的大会员账号的 cookies 下载的,高清 1080P60,大会员专属。B 站大概是我支持最好的网站了哈哈哈哈哈哈,因为我,iawia002,住 B 站
    jaycee110905
        77
    jaycee110905  
       2018-03-20 13:06:33 +08:00
    超棒
    lsls931011
        78
    lsls931011  
       2018-03-20 13:30:36 +08:00
    我本来也想这么做的 @iawia002
    iawia002
        79
    iawia002  
    OP
       2018-03-20 13:34:41 +08:00
    @lsls931011 那就一起搞啊
    lsls931011
        80
    lsls931011  
       2018-03-20 13:37:41 +08:00
    @iawia002 找到组织了, 找时间开搞
    shuianfendi6
        81
    shuianfendi6  
       2018-03-20 13:43:28 +08:00
    @iawia002 是的,那可能是网络问题,
    文件权限问题我复现下,提个 issue 看看

    多谢多谢~
    alittlewhitea
        82
    alittlewhitea  
       2018-03-20 14:20:55 +08:00
    嗯..那个..tumblr 可以吗
    iawia002
        83
    iawia002  
    OP
       2018-03-20 14:22:56 +08:00   ❤️ 1
    @alittlewhitea tumblr 的需求这么高的吗 @123s 也提了这个,现在已经支持图片下载了(不过还没发版本),视频的话还要等等,你们的主要需求是图片还是视频呀
    alittlewhitea
        84
    alittlewhitea  
       2018-03-20 14:30:57 +08:00
    @iawia002 嗯..视频
    iawia002
        85
    iawia002  
    OP
       2018-03-20 14:32:18 +08:00
    @alittlewhitea 我肤浅地问一句,是用来开..开车吗🌚
    123s
        86
    123s  
       2018-03-20 14:36:25 +08:00
    @iawia002 哈哈,就是开车的
    iawia002
        87
    iawia002  
    OP
       2018-03-20 14:44:42 +08:00
    那用 91 或者 pornhub 开不是更快吗哈哈哈哈哈哈

    tumblr 的很多视频都是 vimeo 或者其他网站上的,也就是说要支持 tumblr,我还得先支持 vimeo 那些

    有没有人能私聊我一辆车的地址啊,我看下页面的结构,看那种视频是存在 tumblr 上还是外站的
    cevincheung
        88
    cevincheung  
       2018-03-20 15:36:40 +08:00
    要是能有个 chrome 插件,正在看哪个视频就点一下自动带 cookies 过去然后就开始下载……美滋滋
    iawia002
        89
    iawia002  
    OP
       2018-03-20 16:07:02 +08:00
    @cevincheung 想法不错
    xuanyuanaosheng
        90
    xuanyuanaosheng  
       2018-03-20 17:38:09 +08:00 via Android
    mark 一下,有空测试下
    unique
        91
    unique  
       2018-03-20 19:44:33 +08:00 via iPhone
    感谢楼主分享,👏👏👏已 star
    iawia002
        92
    iawia002  
    OP
       2018-03-20 21:31:31 +08:00
    @123s @alittlewhitea 发车了,0.5.0 支持 tumblr 下载图片,站内视频下载( tumblr 很多视频是外链的 vimeo,ins 等等,这些暂不支持)
    123s
        93
    123s  
       2018-03-20 22:02:13 +08:00
    好快
    iawia002
        94
    iawia002  
    OP
       2018-03-20 22:31:15 +08:00
    @123s 有问题的话提 issue 吧,把下不了的那个网址也带上
    solaro
        95
    solaro  
       2018-03-21 10:22:18 +08:00
    膜拜大佬
    h4wklee
        96
    h4wklee  
       2018-03-21 10:26:57 +08:00 via Android
    @hahasong 需要 ffmpeg 下载来之后合成,楼主的这个同样也需要
    wwqgtxx
        97
    wwqgtxx  
       2018-03-21 10:46:32 +08:00
    个人感觉这一类下载解析软件对性能要求并不高,剩下就是网络库的优化了
    hahasong
        98
    hahasong  
       2018-03-21 11:33:12 +08:00
    @h4wklee 用 youtube-dl 下下来的格式要怎么合成,方便给个命令的 demo 吗
    h4wklee
        99
    h4wklee  
       2018-03-21 12:40:42 +08:00
    @hahasong 安装 ffmpeg 后 youtube-dl 会自己识别合成的,自己动动手谷歌一下吧
    lixuda
        100
    lixuda  
       2018-03-21 13:24:14 +08:00
    有没有 exe 编译版本
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1278 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 23:28 · PVG 07:28 · LAX 16:28 · JFK 19:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.