我用 Go 语言写了一个类似 youtube-dl 和 you-get 的工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
iawia002
V2EX    程序员

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

a href="Javascript:" Onclick="upVoteTopic(439486);" class="vote">
  •  6  
  •   iawia002 2018-03-19 19:53:59 +08:00 19493 次点击
    这是一个创建于 2765 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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  
    PRO
       2018-03-19 20:12:59 +08:00
    为什么起名 annie,请说出你的故事
    hlwjia
        13
    hlwjia  
    PRO
       2018-03-19 20:14:10 +08:00
    iawia002
        14
    iawia002  
    OP
       2018-03-19 20:14:52 +08:00
    大家如果还记得的话,我是 lulu 的维护者,就是那个 you-get 的 fork,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 卧槽这个方法可以啊,
    JhZ7z587cYROBgVQ
        74
    JhZ7z587cYROBgVQ  
       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
      &nsp;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     Solana     4791 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 04:02 PVG 12:02 LAX 21:02 JFK 00:02
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86