V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
chuankoog
V2EX  ›  问与答

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

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

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

    现在都用上了 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   ·   实用小工具   ·   2727 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 09:50 · PVG 17:50 · LAX 01:50 · JFK 04:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.