技术知识文章集合TECHNICAL ARCHIVE · 807 DOCUMENTS

显示模式

登录
ARCHIVE DOCUMENTETC

如何下载视频资源以 blob:http 开头的资源

所属分类
Other
文件格式
Markdown
原始路径
Other/28-如何下载视频资源以blob开头的资源
本文目录10 个章节
  1. 一、问题场景
  2. 二、结论:blob 不是协议
  3. 三、真实地址在哪
  4. 四、方案一:ffmpeg 直接下载(推荐)
  5. 五、方案二:手动下载 ts 分片再合并
  6. 六、方案三:专用工具
  7. 七、方案四:you-get 命令行下载(站内视频通用)
  8. 八、其他思路
  9. 总结:下载方法速查
  10. 整理者注

如何下载视频资源以 blob:http 开头的资源

Category(分类): Other Status: 已读

原文:如何下载视频资源以blob:http开头的资源(博客园,多出处合集文章)。 本文为整理版本:保留 blob 原理与 m3u8/ts 下载合并的完整技术方案。原文后半部分涉及"免费观看 VIP 视频"的解析操作,因版权风险本文略去,只保留技术原理层面的一句话说明。

一、问题场景

想下载某视频资源(如知乎视频),发现视频链接是这样的:

blob:https://v.vzuu.com/b6146956-6e52-406d-8909-f3f1b81ae461

blob:https 是什么牛逼的新协议吗?

二、结论:blob 不是协议

blob:https 并不是一种协议,而是 HTML5 中 blob 对象赋给 video 标签后生成的一串标记,blob 对象包含的数据由浏览器内部解析——服务端页面里并没有这个地址,它是浏览器执行 JS(URL.createObjectURL)后生成的。

详细原理见本分类《为什么视频网站的视频链接地址是blob?》:大多数视频站的 src 其实是 URL.createObjectURL(MediaSource),配合 MSE 边下边播。

三、真实地址在哪

资源的真实下载链接可在 Chrome 调试模式的 Network 面板中找到。

但有一种资源比较特殊——m3u8 格式:视频被分解成很多 ts 小片段,m3u8 链接下载到的是一个包含多个 ts 视频地址的索引集合。这样做的目的:

  1. 方便切换分辨率(多个 ts 支持无缝流畅播放,MP4 不行);
  2. 客观上起到了防下载的作用。

四、方案一:ffmpeg 直接下载(推荐)

拿到 m3u8 地址后一条命令搞定(拉流地址和输出地址用英文引号括起来):

ffmpeg -i "https://xxxxxx.m3u8" "out.mp4"

# 更完整的转封装写法
ffmpeg -i "http://xxx.m3u8" -vcodec copy -acodec copy -absf aac_adtstoasc 下载的视频名称.mp4

ffmpeg 会自动拉取索引里的所有 ts 分片、按序合并并转封装为 mp4。

五、方案二:手动下载 ts 分片再合并

不想装 ffmpeg 时可以纯手动(Chrome + 记事本):

  1. 下载 m3u8 文件:视频页面按 F12 打开调试工具 → Network → 刷新页面 → 找到 m3u8 请求 → 右击 → Open in new tab → 下载到本地;
  2. 补齐相对路径:有的 m3u8 里 ts 的 URL 是相对路径,在每个 ts URL 前面加上域名前缀(记事本替换功能即可);
  3. 去掉索引信息:删除 #EXTINF:~ 这类行,只保留 ts 文件的绝对路径 URL(可用正则批量删除);
  4. 批量下载:把所有 ts 的 URL 复制下来,用 Chrome 插件 Chrono 批量下载;
  5. 统一文件名序号位数:把 ts 全部放到同一文件夹,重命名使序号位数一致(1.ts → 001.ts,2.ts → 002.ts……),否则 copy /b 合并时顺序会乱;
  6. 合并:cmd 执行
copy /b D:\Downloads\*.ts D:\Downloads\new.ts

六、方案三:专用工具

  • 浏览器插件 HDS/HLS Video Downloader:安装后刷新页面,自动嗅探页面中可下载的 m3u8 视频地址,点击 download 一键下载(最终生成 ts 格式,同样可播放);
  • m3u8 downloader(blog.luckly-mjw.cn/tool-show/m3u8-downloader/index.html):网页工具,粘上链接就可以下载,自带帮助文档并提供不能下载、跨域等问题的解决方案;
  • 无差别视频提取工具:m3u8 downloader 的"胞弟",直接粘贴页面地址即可(SegmentFault 有原创文章介绍)。

七、方案四:you-get 命令行下载(站内视频通用)

you-get 是基于 Python 的下载工具,pip3 install you-get 安装(Windows 也有打包版),支持国内外大多数视频网站:YouTube、Twitter、网易云音乐、bilibili、爱奇艺、优酷、腾讯视频等。

查看视频属性(-i):

λ you-get -i https://www.bilibili.com/video/av36043614
site:                Bilibili
title:               一个MV 周杰伦《晴天》
streams:             # Available quality and codecs
  [ DASH ] ____________________________________
    - format:      dash-flv720
      container:   mp4
      quality:     高清 720P
      size:        80.8 MiB (84735780 bytes)
    # download-with: you-get --format=dash-flv720 [URL]
    ...

按清晰度下载:

λ you-get --format=flv720 https://www.bilibili.com/video/av36043614
Downloading 一个MV 周杰伦《晴天》.flv ... 100% ( 81.0/ 81.0MB) 8 MB/s
Downloading 一个MV 周杰伦《晴天》.cmt.xml ...

连弹幕(cmt.xml)都会一并下载好。

八、其他思路

  • 审查 JS 资源:Network 中搜索 m3u8 找不到时,可审查页面加载的 JS 资源,有些站点能直接从代码里找到 flv 格式的真实视频地址;
  • 爬虫场景:用爬虫抓取时发现视频链接打开 404,同样是 blob 形式——处理思路相同(找到 m3u8/flv 真实地址再下载);
  • 原文还提到用油猴脚本 + 解析网站"免费观看 VIP 视频"的做法,涉及版权问题,此处不做展开——技术原理上仍是"拦截真实分片地址 → 代理播放"同一套机制。

总结:下载方法速查

场景方法
已拿到 m3u8 地址ffmpeg -i "xxx.m3u8" out.mp4(最省事)
不想装 ffmpeg手动:下载 m3u8 → 补路径 → 批量下 ts → 统一序号 → copy /b 合并
想一键操作HDS/HLS Video Downloader 插件、m3u8 downloader 网页工具
站内视频(B 站等)you-get -i <url> 查清晰度 → you-get --format=<fmt> <url> 下载

整理者注

理解了《为什么视频网站的视频链接地址是blob?》就知道:blob URL 本身无法(也无意义)下载,要下载的是它背后 MediaSource 喂进去的分片(m3u8 索引的 ts/m4s)。本文所有方法本质上都是在找真实分片地址,然后下载合并。请注意尊重版权,下载内容仅供个人学习研究。

807 DOCUMENTS · 12 COLLECTIONS
ARCHIVE SEARCH807 篇文章