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

2020-10-09 07:01:57 +08:00
 chuankoog

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

现在都用上了 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

2621 次点击
所在节点    问与答
13 条回复
kookpua
2020-10-09 07:42:11 +08:00
b 站的客户端不是可以下载视频么
ipadpro4k
2020-10-09 07:53:01 +08:00
拜膜大佬,写英文博客
sutking
2020-10-09 08:04:35 +08:00
@kookpua #1 B 站客户端下载的视频离开了客户端怎么办?然后,将来换了手机怎么办?再然后,下载的多了,手机空间放不下怎么办?
iConnect
2020-10-09 08:05:39 +08:00
那些 YouTube video get 的网站,是不是也是这样下载的?

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

这个方法本质上就是劫持浏览器得到的数据而已.
Cu635
2020-10-09 09:46:39 +08:00
@shenlanAZ
有版权问题的,网站会通过技术手段阻止你下载通用格式的视频。
kookpua
2020-10-09 09:48:26 +08:00
TypeError
2020-10-09 10:25:46 +08:00
我还是喜欢直接用 YouTube-dl 、youget 这些工具,功能多解析全

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/713170

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX