基于m3u8流媒体格式的视频下载软件编写(一)m3u文件的提取

2023-10-21 08:30

本文主要是介绍基于m3u8流媒体格式的视频下载软件编写(一)m3u文件的提取,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于m3u8流媒体格式的视频下载软件编写(一)m3u8文件的提取

写在前面:
  本内容仅作为个人学习python语言、pyqt软件和makedown笔记的记录笔记使用,由于笔者水平较差,由此程序带来的一切问题本人概不负责,文章版权属于笔者个人,转载注明即可

前言

  在日常生活使用中可以从互联网上获得大量的影视资源,但是当处于网络通讯不够通畅的环境时往往希望提前将影视资源进行下载以方便日后的观看,由于笔者在学习python的过程中产生了下载视频的需求,以此为契机,进行了部分研究,作为笔者学习python语言的练习小项目。目前关于html+jsp+css的知识储备不足。在以后的论述中,如果有值得改进的部分,希望读者能指出,笔者也能进一步提升自己的能力。

零.开发环境

  计算机系统:windows 10
  python版本:3.9.0
  编译环境:vscode+Python(插件)+Pylance(插件)
  pyqt版本:待定(还没到这一步)

一.m3u8流媒体格式简述

  m3u8是多数视频网站使用的流媒体格式,主要以文件列表的形式存在,既支持直播又支持点播。它是一种UTF-8编码格式的M3U文件,用于记录索引的纯文本文件。打开M3U8文件时,播放软件并不是直接播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。[1]视频网站将视频片段切分为很短的.ts文件,根据m3u8文件进行播放。因此从视频网站上下载视频需要下完成对m3u8文件的下载。
  使用诸如potplayer的播放器可以直接播放m3u8格式的视频,但是需要从网络上下载,并且要切换视频,使用起来不如直接在网页上观看,因此不推荐直接观看该格式视频。

二.m3u8文件的获取

2.1 浏览器检查功能直接提取

  以chrome为例按下F12或者鼠标在页面空白处右键——>检查——>Network(如图1所示),浏览器右侧会进入如图2所示数据包页面。图2中画圈的m3u8文件下载下来,长的那个就是存.ts视频链接的m3u8文件。直接下载下来即可。
图1

图1.右键检查

图2

图2.Chrome检查面板

2.2 基于urllib库对m3u8文件进行下载

  如果要进行批量下载,显然人工进行下载就不太适合了,经过我在互联网上初步的搜索,目前没有特别直观的自动化处理方法,所以笔者还是使用python来进行处理。使用urllib获取网页信息,beautifulsoup解析urllib的数据,re进行正则替换来获得最终的网址

import urllib.request  # 获取网页数据#
import urllib.parse
import re  # 正则
from bs4 import BeautifulSoup  # 解析网址
2.2.1 m3u8索引下载

  根据笔者目前使用的两个视频网站,如图2所示有两个m3u8文件,但只有一个是真正的.ts视频片段索引文件,另一个存的是这个真正索引文件的部分链接,就是第三行那个。以后将存有.ts文件链接的m3u8文件称为.ts视频索引,而储存m3u8文件链接的称为m3u8索引。

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608
1000k/hls/index.m3u8

  虽然这些视频网站的源码里也、不会直接出现.ts视频索引的链接,但是会出现m3u8索引的链接(笔者对该网页的链接进行了部分屏蔽处理):

<script>var zanpiancms_player = {"player":"\/public\/","url":"https:\/\/**********\/index.m3u8","next":"http:\/\/www.*******.com\/***********\/1-2.html","name":"1080zyk","apiurl":null,"adtime":"0","adurl":"\/loading.html","copyright":0,"danmu":{"status":0}};</script>

就是这个index.m3u8,将文件打开,就有了.ts视频索引的部分地址,将m3u8索引的连接中的index.m3u8替换为1000k/hls/index.m3u8就可以下载.ts视频索引了

REquest = '视频播放页的网页链接(http://.....com)'  #网页链接
try:response = urllib.request.urlopen(REquest)     #urllib获取网页源码REsponse = response.read().decode('utf-8')     #以utf-8格式解析
except urllib.error.URLError:print("time out")                              #错误处理
bs = BeautifulSoup(REsponse, "html.parser")        #用beautifulsoup分析网页
result = bs.find_all('script')                     #找到<script>段
result_str = str(result)                           #转str
m3u8_Complie = re.compile("https.*m3u8")           #建立正则替换规则获取m3u8索引链接
m3u8_add0 = re.findall(m3u8_Complie, result_str)   #正则提取(https:\/\/*******\/index.m3u8)
m3u8_add_Complie = re.compile(r"\\")               #建立删除'\\'的正则替换规则
m3u8_add = m3u8_add_Complie.sub("", m3u8_add0[0])  #删除'\\'
try:                                               #下载m3u8索引urllib.request.urlretrieve(m3u8_add, 'downaddress.m3u8')
finally:print('downaddress.m3u8_done')

  先使用urllib获取到网页信息,再用beautifulsoup库对网页信息进行解析,使用正则对beautifulsoup解析出的数据进行提取和修改来获得m3u8索引的下载链接。这部分学习了B站up主IT私塾的《Python课程天花板,Python入门+Python爬虫+Python数据分析5天项目实操/Python基础.Python教程》17-23内容[2],re库的部分参考了知乎Wayne的《内行必看!Python Re 模块超全解读!》[3]

  然后再使用 urllib.request.urlretrieve() 下载该文件

f = open('downaddress.m3u8', encoding='utf-8')    #打开m3u8索引
index = f.readlines()                             #按行读取内容
url_tail_Complie = re.compile(".*m3u8")           #提取.ts视频所以规则
for url in index:                                 #正则提取尾部链接URL_tail = re.findall(url_tail_Complie, url)URL = re.sub("index.m3u8", URL_tail[0], m3u8_add) #.ts视频索引提取
try:                                              #下载.ts视频索引urllib.request.urlretrieve(URL, 'index.m3u8')
finally:print('index.m3u8_done')

  在获得了m3u8索引以后,正则提取.ts视频索引的尾部链接,并拼接成对应的下载链接然后下载。至此完成了对m3u8文件的自动化下载,不再需要手动下载了。

最后推荐一个笔者用起来很方便的正则表达式在线测试工具[4]

参考文献

[1]https://baijiahao.baidu.com/s?id=1771477818317416305&wfr=spider&for=pc
[2]https://www.bilibili.com/video/BV12E411A7ZQ/?p=20&vd_source=6bb230b3262b4647b393176cec65c7c5
[3]https://zhuanlan.zhihu.com/p/68014839
[4]https://c.runoob.com/front-end/854/

这篇关于基于m3u8流媒体格式的视频下载软件编写(一)m3u文件的提取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/253175

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

2. 下载rknn-toolkit2项目

官网链接: https://github.com/airockchip/rknn-toolkit2 安装好git:[[1. Git的安装]] 下载项目: git clone https://github.com/airockchip/rknn-toolkit2.git 或者直接去github下载压缩文件,解压即可。

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank&nbsp;正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试