下载视频(m3u8格式)的4种方法 (附教程) ,你值得收藏

发表于 2023-1-18 12:29:09 | [复制链接] | 打印 |上一主题| 下一主题

下载视频(m3u8格式)的4种方法 (附教程) ,你值得收藏

之前写了篇下载网络视频的4种方法,见下:
上文的评论里,很多知友提到了关于blob:URL资源无法下载,通过网页代码检查视频资源得到<src>如下:


讲真,这事不好办。
为啥?
原因有2:
第1、视频作为内容的一种载体形式,是价值资源,价值性意味着可以直接商业化的产品,像很多超前点播、VIP可看等等,属于商业公司变现的方式,所以,视频 = 钱
既然如此,商业公司对视频的防下载,一定会让程序员们严防死守,不断技术上的更新升级,所以,下载难度也会逐渐增大。
第2、随着一种下载方式的广泛普及,伴随而来的一定是各种商业公司的技术围堵和打压,毕竟动了资本的奶酪,资本一定不会袖手旁观,一定会想法设法赶尽杀绝,尤其对于广泛普及的视频下载方式,所以,广普 = 被杀
这也是很多下载技术,只掌握在少数人手里的原因。
当然,我就是这少数人中的一员。
虽然下载这种blob:URL的视频资源比较难办。
正因为难,才要办嘛。

还有什么比 为人民服务更快乐的事情 么?
因此,今天我专门出一篇文章来分享下我个人下载blob:URL资源地址的方法。
先来点理论,啥是blob:URL?(温馨提示:实战派可以直接跳过理论,滑到下载方法)
blob:URL的地址,它其实是通过URL.createObjectURL这个API生成的blob对象,就是个临时的字符串地址,见下图红色框住的src地址。(这个地址有个特点:它是与当前页面窗口的document对象绑定的,是session级别的对象,所以你在刷新/打开新tab时,就会生成新的blob对象的地址,原有的blob:URL地址就无效了。这也是刷新网页后同样的视频地址拿到的blob:URL不一样的原因。)


部分实现代码如下:
/*
加载资源文件
fileDataList:文件流数组
fileName:文件名称
fileType:文件格式
*/
loadFile(fileDataList, fileName, fileType) {
      const fileBlob = new Blob(fileDataList, { type: 'video/MPEG4' }) // 创建一个Blob对象,并设置文件的 MIME 类型
      const a = document.createElement('a')
      a.download = fileName + '.' + fileType
      a.href = URL.createObjectURL(fileBlob)
      a.style.display = 'none'
      document.body.appendChild(a)
    },
因此,可以说,blob:URL就是对视频资源地址做了一层“加密”处理。
当然一般blob:URL地址背后一般是一堆视频片段集合,也就是我们常说的m3u8格式。
m3u8又是啥?
m3u8格式编码是utf-8格式的m3u文件,m3u文件是记录了一个按索引排序的多个.ts视频片段的文件。
也就是将一个完整视频,先拆分成多个.ts视频片段,然后把这些.ts视频片段以地址形式存放进.m3u8的文件里。
这种m3u8视频,播放又是咋回事呢?
打开某个视频地址时,播放工具并不是播放它,而是根据的.m3u8文件,解析视频索引文件后,再逐个下载播放 .ts 视频片段
简单点: m3u8相当于一个文件目录,目录里放着可直接获取到视频文件的网络地址的索引,根据这些索引找到视频片段.ts的地址,连续的播放出来的就是一个完整的视频。
好处显而易见:
其1、视频分段的,爬取成本高,规避整个视频时的下载风险;
其2、视频是分段的,可以断点播放,快进、快退加载视频速度更快。
最后,再说下一些知友常问的m3u8和mp4格式区别?
上面已经解释过了m3u8,而mp4格式文件是不同的,mp4格式则是标准的数字多媒体容器格式,包含一堆h256,mpeg-4视频编码,mpeg-4 als,sls音频编码,mpeg-4 定时文本字幕编码的格式,这种格式的文件本身存储的是音频、文本字幕和视频画面。
对,mp4格式存储的就是视频资源。
这也解释了为什么mp4格式的视频链接,可以直接通过右键下载。
例如:我要下载温铁军老师的视频,网页地址如下
可通过打开网页,右键,检查元素 -> 定位元素,就可以在下图红色框中找到<src>的地址,即视频资源的地址。


最终拿到的下载地址,我直接贴给大家:(该地址可能会变,一切以当时抓取的下载地址为准)
一看mp4格式的地址,大喜啊!
可以直接把地址放在浏览器地址栏了,打开后,右键下载视频就行了。


对于大部分视频,通过检查元素,查看到则是blob:URL格式的视频地址,步骤如下:
打开视频目标网页,鼠标右键「检查」,或者「开发者工具」,或者按下键盘的「F12」键
定位视频后,即可在代码区查看到视频地址,即红色框中blob:URL地址


然后找到 network,输入 m3u8,过滤 m3u8 文件。
刷新视频目标页,监听所有的 m3u8 文件,如下:


找到目标m3u8文件(ts文件),查看文件内容,是否符合格式。
如下虽然是索引文件,不是真正的视频 m3u8 文件:


一堆ts文件的m3u8才是我们要的文件。


至此,通过视频目标网站查看是blob:URL,再拿到对应的m3u8。

好了,废话到这就结束了。

开始正文,上干货!!!

关于下载m3u8(blob:URL)视频的4种方法,总结如下:

方法1、ffmpeg工具

先安装ffmpeg:
brew install ffmpeg


ffmpeg安装完成
ffmpeg使用:通过检查元素,元素定位,可以看到某视频地址的资源地址如下blob:URL的这种形式


然后通过查看Network,找到blob:URL地址背后的m3u8地址


用ffmpeg下载视频,并将m3u8格式转为mp4格式,指令如下
ffmpeg -i https://youku.com-youku.net/20180620/13336_33db73a9/index.m3u8 fileName.mp4

ffmpeg -i https://youku.com-youku.net/20180620/13336_33db73a9/index.m3u8 -c copy fileName.mp4



如上下载中
由于视频很大,下载需要很长长长时间(1个G的视频可能需下载几小时...)。
可以通过如下指令进行下载提速(下载速度大约能提升到几到十几分钟,很棒了哦,起码比百度云快):
ffmpeg -i https://youku.com-youku.net/20180620/13336_33db73a9/index.m3u8 -c copy -bsf:a aac_adtstoasc fileName.mp4

如果你想用终端工具拉起视频播放,直接通过如下指令就能 播放某链接的视频
ffplay -i https://youku.com-youku.net/20180620/13336_33db73a9/index.m3u8




下载完成,播放中
搞定!!!


方法2、google插件:Tampermonkey(油猴),一个强大到令人无语的脚本工具箱(Tampermonkey绝对是个大宝藏,里面有太多好用的脚本了,你真真真真真真的值得拥有)

关于Tampermonkey油猴的安装和基本使用,见我之前的一篇文章:
这里介绍油猴中1个好用的脚本:media-source-extract

在油猴脚本列表中暂时无法提供下载,目前需要手动创建安装,具体的视频下载和工具使用,见链接:

「安装或使用遇到问题的,直接私我,我看到了,一定会帮你解答」

media-source-extract是一款提取视频画面和音频的工具,最终下载得到的是音频文件和视频画面文件。
因此可以通过合并音视频来完成最终的视频。
具体音视频合成方法网上有很多,我这边提供一套ffmpeg的合并方法,具体分2步走:
1、先把音频「audio_mp4」(或多个「audio_mp4」) 进行合并转码,转为.aac格式:命令行执行如下:
ffmpeg -i "***-audio_mp4;codecs=***.mp4" -acodec copy "audio.aac"(记得命令行先切换到音频所在的文件路径下)
2、再将原始视频「video_mp4」(或多个「video_mp4」),和上一步得到的 aac 「audio.aac」组装到一起,命令行执行如下:
ffmpeg -i "***-video_mp4;codecs=***.mp4" -i "audio.aac" -c copy -shortest "result.mp4"(记得命令行先切换到音频所在的文件路径下)
最终result.mp4就是你要的合并了音频和画面的视频了!

media-source-extract这种提取音视频合并的方法,太麻烦了,有点像录屏的感觉。
下载操作的复杂度,以及过程可能会丢失的视频片段,我表示很淦。
但是作为一个下载方式,有价值,可作为备胎。
再介绍1个比较好油猴插件:m3u8-downloader

在油猴脚本地址栏 用户脚本 中去搜索下载安装,如下图:




使用:譬如下载一部烂片 动作片《蛇蝎情人2003正片》免费在线播放-星空影院,用google浏览器输入该视频网址,m3u8-downloader 脚本会自动识别blob:URL地址并拿到m3u8文件,如下:


点击“跳转下载”,会跳转到下载页面


选择“原格式下载”或“转码为MP4下载”


开始下载,同时可以看到下载进度,如下:


下载完成,本地播放,如图:


搞定!

方法3、google插件:NeatDownloadManager Extension

这是一款我常用的插件,很好用。
可以去下载1个PC端软件 和 google插件
PC端NeatDownloadManager下载地址:Neat Download Manager for Mac and Windows (Free Internet Download Manager Mac & Windows )
安装后,界面如下


在红色标记1的Setting中,可以设置对应代理,譬如常见的某d下载提速,可以像这样设置:


红色标记2的Browsers中,点击“Add Chrome Extension”就可以给google浏览器添加该插件啦:


当然也可以直接在google插件搜索 NeatDownloadManager Extension(需要f墙),进行安装:


安装已经完成啦:


NeatDownloadManager Extension插件的使用:
我想下载温老的视频:温铁军:四大文明古国为何只有中国没有灭亡?罗马的民主只对其10%的人口?【温铁军践闻录5-35】_哔哩哔哩_bilibili
在google浏览器里,打开该地址,就可以看到该插件拿到的视频资源:


点击那个size最大的视频资源,就会自动下载了:


下载完成


搞定!

方法4、google插件:视频下载器 - CoCoCut

在google网上应用商店(需要f墙),搜索“视频下载器 - CoCoCut”


安装该插件:


视频下载器 - CoCoCut使用:
譬如我想下载一个电影,我在goolge 浏览器上随便找了一个电影网站:《战狼2》高清完整版_最新电影_免费在线观看平台_猪蹄影院 ,然后该插件就会自动检测到该视频信息,点开该插件,就可以看到并执行下载了


下载中


下载完成。


搞定!


<hr/>最后,推荐几款我常用的解析.m3u8的在线网站:
真心希望,更多的技术为更多人使用。
该文持续更新......

关注不迷路!

有任何下载问题,都可以在评论区留言。

看到后,我一定会回复,帮你解决哒
回复

使用道具 举报

显示全部楼层
如果视频被加密了,是不是就不行了,CoCoCut和NeatDownloadManager Extension全都报错了,提示是加密视频无法下载
回复

使用道具 举报

显示全部楼层
m3u8-downloader被宰了,搜索不到了,博主您好,还有啥能识别html视频下载的插件不
回复

使用道具 举报

显示全部楼层
页面地址是多少?错误截图私信发我下
回复

使用道具 举报

显示全部楼层
大神你好,请问操作到方法三中的add chrome,跳转出来的网页总是现实无法显示网页,这个怎么解决喔。麻烦解答一下[爱]
回复

使用道具 举报

显示全部楼层
方法都是术,目的达到了就行
回复

使用道具 举报

显示全部楼层
温铁军老师的视频,这个直接用IDM可以下载啊
回复

使用道具 举报

显示全部楼层
条条大路通咸阳。只要能达到目的,就可以
回复

使用道具 举报

显示全部楼层
试了下楼主文里的好看视频,没查找到blob或<src>,但idm可以直接解析下载,就不用楼主这么麻烦了
回复

使用道具 举报

显示全部楼层
这几个方案除了迅雷百度云可能限速速度差,其他几个都能跑满带宽,基本不是速度的问题,主要在于速度快的,客户端有些bug,而且极简风格缺很多设置和功能,下载一两个没问题,批量下载还得找迅雷百度这种流氓。。。[捂脸]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|网络问答

GMT+8, 2024-12-26 08:51 , Processed in 0.120340 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表