m3u8下载

m3u8文件下载

最近电锯人动漫好像出来了,一个朋友想要下载~~高清无码版~~(免费版)的视频。但是提供视频的良心网站并没有提供下载选项,于是乎便找到我,希望我能通过一些特殊的手法帮她下载。闲着也是闲着,就看了一下。

首先打开该网站,按下F12开启审查模式,然后选中左上角出现的小三角,将鼠标移动到视频上接着点击鼠标左键。这个时候已经能够看到视频的链接了(如图一所示),然后直接双击这个链接鼠标右键 -> 转到该网址,在这个新出来的页面就可以下载了。

在这里插入图片描述

图一

在这里插入图片描述

图二

本以为接下来两集用这个简单的方法就可以了,但是后来发现最新出来的一集不能采用这个方法。它的链接前面加上了blob: ,如果直接访问会得到下面这个界面,而加上blob: 则直接出现一个空白页,这是因为blob:表示后面的对象是一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,格式比较灵活,一方面适合实时加载(常常见于视频文件),一方面可以有一定反爬效果。但是当浏览器识别了blob对象之后就会向服务器请求真实的文件地址,所以这个时候我们整点特殊手段就可以了。

在这里插入图片描述

在这里插入图片描述

还是老样子,先按下F12,但是发现这个时候视频无法播放了,还出现了已在调试程序中暂停,这个直接点下面这个停用断点按钮就可以了。而且再检查呈现的信息,发现出现了m3u8.php字样,经检查视频的格式果然为m3u8。那没什么好说的,按照经验应该还会存在一个m3u8文件,里面保存了对应的视频地址。于是打开网络选项,按照指示重新记录了一下网络活动,果然让我找到了一个ChainsawMan03.m3u8文件

在这里插入图片描述
在这里插入图片描述

简单看一下文件的内容,发现给了很多链接而且均为png格式,这个应该就是我们需要下载的视频片段。但是按照常理这些文件应该是ts格式,这里猜测一下是该网站对视频片段进行了加密。果断把文件后缀名修改为ts,发现下载下来的文件已经可以用播放器正常播放了。接下来要做的就是把所有的片段下载下来,然后再使用ffmpeg将片段拼接起来,组成一个完整的视频。但是在拼接的过程中,ffmpeg报错,error code = -3,具体的原因是虽然强制修改了名称,但是其二进制文件并没有png头,所以需要在视频片段中写入png

在这里插入图片描述

talk is cheap, show me code!

import re
import requests
import tqdm
import time

if __name__ == '__main__':
  # 提取所有链接
  with open(r"ChainsawMan03.m3u8", "r") as f:
    text = f.read()
    fragments = re.findall(r"https.*?png",text)
  
  # 一些需要使用到的
  error_list = []
  error_num  = []
  headers = {
    'User-Agent':"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
    'Sec-Fetch-Mode':'cors',
    'Sec-Fetch-Dest':'empty'
}
  timeout = 30
  base_dir = r"D:\ffmpeg\bin\m3u8\{}.ts"
  
  # 获取视频片段并修改
  for i in tqdm.tqdm(range(len(fragments))):
  	try:
        r = requests.get(fragments[i], headers=headers,timeout=30)
        frag_dir = base_dir.format(i)
        with open(frag_dir, "wb") as f:
            f.write(r.content)
            f.seek(0x00)
            f.write(b'\xff\xff\xff\xff')
            f.flush()
    except:
        error_list.append(fragments[i])
        error_num.append(i)
  
  # 创建一个文本,用于后续使用ffmpeg拼接视频
  file_dir = r"D:\ffmpeg\bin\videos.txt"
  with open(file_dir, "w") as f:
    for i in range(len(fragments)):
        frag_dir = base_dir.format(i)
        f.write("file " + "'" + frag_dir + "'" + "\n")

使用上述代码我们就可以下载下来所有的视频片段了,接下来到ffmpeg文件夹下(偷懒,并没有把ffmpeg放到环境变量,因此下载下来的文件都放在ffmpeg可执行文件同级目录下),在此处打开cmd,并输入如下指令就可以得到最终的视频了。ffmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,功能十分强大,很多视频播放软件都是ffmpeg的套壳,上面已经放了链接感兴趣可以看看。

ffmpeg.exe -f concat -safe 0 -i videos.txt -c copy out.ts
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值