从 youtube 和 B 站 下载视频的必要性 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chuankoog
V2EX    问与答

从 youtube 和 B 站 下载视频的必要性

  •  
  •   chuankoog 2020-10-09 07:01:57 +08:00 3046 次点击
    这是一个创建于 1845 天前的主题,其中的信息可能已经有所发展或是发生改变。

    云服务很方便, 直到我收藏的视频莫名其妙地被删掉了.

    现在都用上了 HTML5 video, 理论上只要能够下载 HTML5 video 就能从大多网站上下载视频了.

    所以直接 wget video.src 不就万事大吉了?

    实际上 B 站和 youtube 的 video 标签长这样:

    <video src="blob:https://www.youtube.com/xxx"></video>

    blob 是什么

    blob URL 是作用域仅在本页面的链接, 它是这样创建的:

     var mediaSource = new MediaSource(); video.src = URL.createObjectURL(mediaSource); console.log(video.src) // blob:https://xxxxxxx 

    这里有更好的介绍 mdn: https://developer.mozilla.org/en-US/docs/Web/API/MediaSource

    我们更关心如何下载它.

    下载 HTML5 video

    看起来劫持浏览器请求就能拿到视频数据, 但是实际执行起来, 判断识别组合, 都有难度.

    前面代码展示了 blob URL 指向了 mediaSource object. 实际上就是 mediaSource 内包含了视频的数据, appendBuffer() 方法向 mediaSource 内 feed 数据, 我们是否可以劫持这个方法拿数据?

    可行! 为此我还写了一篇博客和相应的包:

    https://www.tiaoxingyubolang.com/zh/article/2020-10-09_mediasource

    https://github.com/derekchuank/videox

    第 1 条附言    2020-10-09 08:23:25 +08:00
    我不用特定的软件 /浏览器插件去下载视频, 是因为起初是希望建一个网站提供下载服务, 就像那些 youtube get 一样.

    直到我想了想我那传家宝小鸡的配置, 便打消了建站的念头.

    但是建站用这个 idea 是绝对可行的. 那些浏览器插件也是可行的. 别人的具体实现就没看过了.
    13 条回复    2020-10-09 10:25:46 +08:00
    kookpua
        1
    kookpua  
       2020-10-09 07:42:11 +08:00 via iPhone
    b 站的客户端不是可以下载视频么
    ipadpro4k
        2
    ipadpro4k  
       2020-10-09 07:53:01 +08:00 via iPhone
    拜膜大佬,写英文博客
    sutking
        3
    sutking  
       2020-10-09 08:04:35 +08:00   1
    @kookpua #1 B 站客户端下载的视频离开了客户端怎么办?然后,将来换了手机怎么办?再然后,下载的多了,手机空间放不下怎么办?
    iConnect
        4
    iConnect  
       2020-10-09 08:05:39 +08:00 via Android
    那些 YouTube video get 的网站,是不是也是这样下载的?

    @kookpua 客户端下载的视频,可以提取视频源文件出来吗?
    weak
        5
    weak  
       2020-10-09 08:10:45 +08:00 via Android
    IDM 解君愁
    windseeker386
        6
    windseeker386  
       2020-10-09 08:15:05 +08:00 via iPhone
    b 站 ump 版本下载神器,最高分辨率,自动转 mp4 格式,弹幕同步下载
    shenlanAZ
        7
    shenlanAZ  
       2020-10-09 09:18:22 +08:00
    @sutking #3 那你有考虑过版权问题么。
    monkeyWie
        8
    monkeyWie  
       2020-10-09 09:25:32 +08:00
    这种实现方式做不到断点下载吧?
    Mikewu
        9
    Mikewu  
       2020-10-09 09:34:49 +08:00 via Android
    b 站 api 获取视频源文件 cdn 地址,改下 headers 就能直接下载了
    chuankoog
        10
    chuankoog  
    OP
       2020-10-09 09:35:48 +08:00
    @monkeyWie 理论上可以做到, 可能需要对劫持到的数据进行解析加工, 需要大量代码, 对我来说不切实际.

    这个方法本质上就是劫持浏览器得到的数据而已.
    Cu635
        11
    Cu635  
       2020-10-09 09:46:39 +08:00
    @shenlanAZ
    有版权问题的,网站会通过技术手段阻止你下载通用格式的视频。
    kookpua
        12
    kookpua  
       2020-10-09 09:48:26 +08:00
    TypeError
        13
    TypeError  
       2020-10-09 10:25:46 +08:00 via Android
    我还是喜欢直接用 YouTube-dl 、youget 这些工具,功能多解析全
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2851 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 13:53 PVG 21:53 LAX 06:53 JFK 09:53
    Do have faith in what you're doing.
    ubao msn 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