Python下载加密m3u8视频
一些网站会提供m3u8视频地址,以供下载观看。或者一些网站经过分析后发现是使用m3u8格式进行播放的,这时使用m3u8的地址链接就可以下载到相应的视频。
一、关于m3u8:(https://blog.csdn.net/baidu_34418350/article/details/64922512)
m3u8是苹果公司推出一种视频播放标准,是m3u的一种,不过 编码方式是utf-8,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般存在服务器的内存中),通过m3u8解析出来路径,然后去请求。
http://t.elecfans.com/live/749.html?room=1
直接F12查看视频播放列表链接
## 一、实际地址获取
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:22
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="video.key"
#EXTINF:16.666667,
index0.ts
#EXTINF:16.666667,
index1.ts
#EXTINF:16.666667,
index2.ts
#EXTINF:16.666667,
index3.ts
#EXTINF:8.333333,
index4.ts
看到ts结尾的文件,这才是视频真正的存放路径:
下载到本地,视频软件无法播放:
## 二、视频下载
可以用python脚本自动下载这些ts文件,但实际上有些网站的ts文件是用AES-128加密过的,所以需要解密才能播放。
加密过的视频在第二层m3u8中会有一个key文件链接:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:22
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="video.key"
#key密钥文件
需要去读取这个key文件,才能拿到解密密钥。
然后开始【Python抄写】
# -*- coding:utf-8 -*-
import os
import sys
import requests
import datetime
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex#reload(sys)
#sys.setdefaultencoding('utf-8')def download(url):download_path = os.getcwd() + "\download"if not os.path.exists(download_path):os.mkdir(download_path)#新建日期文件夹download_path = os.path.join(download_path, datetime.datetime.now().strftime('%Y%m%d_%H%M%S'))#print download_pathos.mkdir(download_path)all_content = requests.get(url).text # 获取第一层M3U8文件内容if "#EXTM3U" not in all_content:raise BaseException("非M3U8的链接")if "EXT-X-STREAM-INF" in all_content: # 第一层file_line = all_content.split("\n")for line in file_line:if '.m3u8' in line:url = url.rsplit("/", 1)[0] + "/" + line # 拼出第二层m3u8的URLall_content = requests.get(url).textfile_line = all_content.split("\n")unknow = Truekey = ""for index, line in enumerate(file_line): # 第二层if "#EXT-X-KEY" in line: # 找解密Keymethod_pos = line.find("METHOD")comma_pos = line.find(",")method = line[method_pos:comma_pos].split('=')[1]print ("Decode Method:", method)uri_pos = line.find("URI")quotation_mark_pos = line.rfind('"')key_path = line[uri_pos:quotation_mark_pos].split('"')[1]key_url = url.rsplit("/", 1)[0] + "/" + key_path # 拼出key解密密钥URLres = requests.get(key_url)key = res.contentprint ("key:" , key)if "EXTINF" in line: # 找ts地址并下载unknow = Falsepd_url = url.rsplit("/", 1)[0] + "/" + file_line[index + 1] # 拼出ts片段的URL#print pd_urlres = requests.get(pd_url)c_fule_name = file_line[index + 1].rsplit("/", 1)[-1]if len(key): # AES 解密cryptor = AES.new(key, AES.MODE_CBC, key) with open(os.path.join(download_path, c_fule_name + ".mp4"), 'ab') as f:f.write(cryptor.decrypt(res.content))else:with open(os.path.join(download_path, c_fule_name), 'ab') as f:f.write(res.content)f.flush()if unknow:raise BaseException("未找到对应的下载链接")else:print ("下载完成")merge_file(download_path)def merge_file(path):os.chdir(path)cmd = "copy /b * new.tmp"os.system(cmd)os.system('del /Q *.ts')os.system('del /Q *.mp4')os.rename("new.tmp", "new.mp4")if __name__ == '__main__': url = "http://media.elecfans.com/topic/gongkaike/2019/03/d220246a27f399509fc2022731b8ae3b/30/hls/index.m3u8" download(url)
代码照搬---------------------
作者:a33445621
来源:CSDN
原文:https://blog.csdn.net/a33445621/article/details/80377424
Python下载加密m3u8视频相关推荐
- 使用python下载加密的流媒体m3u8视频文件,获取电影资源
使用python下载加密的流媒体m3u8视频文件,获取电影资源 m3u8简介 代码示例 获取文件名与m3u8地址 媒体序列解密 视频序列片段下载 完整代码 后记 m3u8简介 M3U8是Unicode ...
- python需要花钱下载吗_用Python下载知乎视频,非常实用
原标题:用Python下载知乎视频,非常实用 Python下载知乎视频. # -*- coding: utf-8 -*- """ 下载知乎视频: 依赖: pip inst ...
- 参考 | Python 下载网页端视频
Python | 下载网页端视频
- python下载B站视频(简单)
python下载B站视频资料 众所周知,网页版的B站无法下载视频,然本人喜欢经常在B站学习,奈何没有网时,无法观看视频资源,手机下载后屏幕太小又不想看,遂写此程序以解决此问题 话不多说,进入正题 1. ...
- python下载加密视频_Python下载未加密的m3u8文件(流媒体文件)
很多时候我们用手机浏览器缓存视频时发现缓存下来的文件后缀是.m3u8格式的,按文件目录找过去发现是一个几十K大小的系统不可读的文件,那我们缓存下来的文件去哪儿了呢? 其实.m3u8文件就相当于一个协议 ...
- python 实现多线程下载加密m3u8格式视频,使用FFmpeg合并
如果你要下载的m3u8文件未加密: 请移步:https://blog.csdn.net/s_kangkang_A/article/details/103071822 上次做完了没加密的,再次记一下加密 ...
- python下载合并m3u8文件
使用浏览器开发者工具获取index.m3u8文件,直接复制访问路径进行请求即可下载相应的m3u8文件,文件里是ts视频的路径,一般长这样: 每一个.ts路径都是一段流视频访问地址,拼接主域名可以直接下 ...
- python下载b站视频_【python】抖音无水印视频下载和b站视频下载
本帖最后由 370125229 于 2020-3-27 17:38 编辑 萌新一枚,拿这个练练手 用python写的,部分视频可能还是会有水印 抖音 蓝奏: https://www.lanzous.c ...
- python编程实例视屏-python 下载抖音视频示例源码
[实例简介] 下载抖音视频 [实例截图] [核心代码] #code:utf-8 import requests from bs4 import BeautifulSoup import json se ...
最新文章
- 关于STM32系统构架的一点见解
- tcpdump -i eth0 -n -vvv src or dst port 443
- 重拾python Day 1
- 全栈工程师薪水_2019Java 全栈工程师 进阶路线图!一定要收藏!
- WPS长文档编辑技巧之二:对样式的设置与修改
- matlab连接mysql数据库_matlab连接数据库的问题
- 联合国应考虑建设第二总部
- 雨林木风GhostXPSP3装机版YN9.9_09.11更新
- 03-Spark MLib
- ncre计算机职业英语,NCRE计算机职业英语一级考试样卷.doc
- jquery的eval的使用
- [AS日记]MacOS的Android Studio卡在Building Gradle Project info走不动 的处理方法
- android游戏后台运行点击桌面游戏图标游戏重启的解决方法
- R语言3.6版本安装ggplot2报错解决方法
- NEX让人们对vivo刮目相看,这个互联网巨头出了一份力
- python将图片拼接为视频
- maven 中央仓库网址
- Linux系统设置命令大全
- react根据浏览器的尺寸动态调整布局
- Markdown使用小笔记