iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用Python怎么在m3u8文件中提取视频
  • 346
分享到

使用Python怎么在m3u8文件中提取视频

2023-06-15 02:06:01 346人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这期内容当中小编将会给大家带来有关使用python怎么在m3u8文件中提取视频,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. HLS协议与m3u8文件  HLS,即 H T T P   L

这期内容当中小编将会给大家带来有关使用python怎么在m3u8文件中提取视频,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

1. HLS协议与m3u8文件

  HLS,即 H T T P   L i v e   S t r e a m i n g Http\ Live\ Streaming HTTP Live Streaming的缩写,是由苹果公司提出基于HTTP的流媒体网络传输协议。是苹果公司QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的扩展 M3U (m3u8) 播放列表文件,用于寻找可用的媒体流。
  M3U8是 U n i c o d e Unicode Unicode 版本的 M3U,用 UTF-8 编码。"M3U"和"M3U8"文件都是苹果公司使用的 H T T P   L i v e   S t r e a m i n g HTTP\ Live\ Streaming HTTP Live Streaming 格式的基础,这种格式可以在 iPhone 和 Macbook 等设备播放。是一种播放多媒体列表的文件格式,文本内容是一系列媒体片段资源,顺序播放该片段资源,即可完整展示多媒体资源。其格式大致如下:

# 未加密#EXTM3U#EXT-X-VERSioN:3#EXT-X-TARGETDURATION:8#EXT-X-MEDIA-SEQUENCE:0#EXTINF:4.000000,1af12fece7a000000.ts#EXTINF:4.320000,1af12fece7a000001.ts...#EXTINF:3.800000,1af12fece7a001155.ts#EXT-X-ENDLIST# 加密#EXTM3U#EXT-X-VERSION:3#EXT-X-TARGETDURATION:6#EXT-X-PLAYLIST-TYPE:VOD#EXT-X-MEDIA-SEQUENCE:0#EXT-X-KEY:METHOD=AES-128,URI="https://ts1.yuyuangewh.com:9999/20200808/1XdSSbTb/2000kb/hls/key.key"#EXTINF:3,https://ts1.yuyuangewh.com:9999/20200808/1XdSSbTb/2000kb/hls/EUtRrqJU.ts#EXTINF:4.72,https://ts1.yuyuangewh.com:9999/20200808/1XdSSbTb/2000kb/hls/HF90vrrN.ts...#EXTINF:0.24,https://ts1.yuyuangewh.com:9999/20200808/1XdSSbTb/2000kb/hls/b7ZLcRQt.ts#EXT-X-ENDLIST

  中文维基百科----HTTP Live Streaming
  中文维基百科----M3U

  下面介绍几个m3u8文件中常见的标签:

标签格式作用
EXTM3U#EXTM3U表明该文件是一个m3u8文件,每个m3u8文件必须将该标签放置在第一行
EXT-X-VERSIONEXT-X-VERSION:<number>表明该文件是一个m3u8文件,每个m3u8文件必须将该标签放置在第一行
EXT-X-TARGETDURATION#EXT-X-TARGETDURATION:<s>表示每个视频分段最大的时长(单位秒)
EXT-X-PLAYLIST-TYPE#EXT-X-PLAYLIST-TYPE:<type-enum>表明流媒体类型,VOD 表示该视屏流为点播源,因此服务器不能更改该m3u8文件;EVENT表示该视频流为直播源,因此服务器不能更改或删除该文件任意部分内容,但是可以在文件末尾添加新内容
EXT-X-MEDIA-SEQUENCE#EXT-X-MEDIA-SEQUENCE:<number>表示播放列表第一个URL片段文件的序列号,每个媒体片段URL都拥有一个唯一的整型序列号,每个媒体片段序列号按出现顺序依次加 1,如果该标签未指定,则默认序列号从0开始
EXT-X-KEY#EXT-X-KEY:METHOD=AES-128,URI="http:xxxx",IV="xxxx"表明视频流文件的加解密方法,METHOD表示加密方式,URI表示密钥路径,该密钥是一个 16 字节的数据,IV是一个128位的十六进制数值
EXTINF#EXTINF:<duration>,[<title>]表示其后 URL 指定的媒体片段时长(单位为秒),duration可以为十进制的整型或者浮点型,其值必须小于或等于EXT-X-TARGETDURATION指定的值
EXT-X-ENDLIST#EXT-X-ENDLIST表明m3u8文件的结束

  简书:m3u8 文件格式详解 作者:Whyn

第三方库----m3u8

  m3u8是一个专门用于解析m3u8文件的解析器,有关库的详细操作请参阅官方示例

# 安装m3u8pip install m3u8
# 加载m3u8文件import m3u8# 返回一个M3U8对象playlist = m3u8.load(uri='http://videoserver.com/playlist.m3u8')# url# playlist = m3u8.load(uri='playlist.m3u8')# fileprint(playlist.segments)# 打印EXT-X-KEY标签和所有的EXTINF标签:print(playlist.target_duration)# 打印EXT-X-TARGETDURATION标签的值for key in playlist.keys:if key:# 如果视频文件加密,可以查看加密参数print(key.uri, key.method, key.iv)

3. 合成mp4文件

使用Python怎么在m3u8文件中提取视频

 本次就以这个视频为例,流程如下:
  1. 找到视频对应的.m3u8文件
  2. 解析.m3u8文件,从中提取.ts视频的url
  3. 下载.ts格式的视频
  4. 解密.ts格式的视频(如果视频流没有加密,则该步不是必须的)
  5. 合成.mp4或其他格式的视频

# 第1步,我载了m3u8文件,也可以直接使用m3u8文件对应的urlplaylist = m3u8.load(uri='./data/index.m3u8')# 第2步,提取URLfor seg in playlist.segments:        print(seg.uri)        # 第3步,下载ts视频    with open('xxxxx.ts', 'wb') as f:        ts = get_ts(url)        f.write(ts)   # 第4步,解密cipher_text = pad(data_to_pad=cipher_text, block_size=AES.block_size)    aes = AES.new(key=key, mode=AES.MODE_CBC, iv=iv)    cipher_text = aes.decrypt(cipher_text)    # 第5步,合成files = glob.glob(os.path.join('./video', '*.ts'))    for file in files:        with open(file, 'rb') as fr, open('./video_de/baitoushan.mp4', 'ab') as fw:            content = fr.read()            fw.write(content )

4. 完整代码

# -*- coding: utf-8 -*-# @Time    : 2021/5/10 20:11# @Author  : XiaYouRan# @Email   : youran.xia@foxmail.com# @File    : video.py# @Software: PyCharmfrom Crypto.Cipher import AESfrom Crypto.Util.Padding import padfrom concurrent.futures import ThreadPoolExecutorimport requestsimport m3u8import globimport osimport timeimport logginglogging.getLogger("urllib3").setLevel(logging.WARNING)def AESDecrypt(cipher_text, key, iv):    cipher_text = pad(data_to_pad=cipher_text, block_size=AES.block_size)    aes = AES.new(key=key, mode=AES.MODE_CBC, iv=iv)    cipher_text = aes.decrypt(cipher_text)    # clear_text = unpad(padded_data=cipher_text, block_size=AES.block_size)    return cipher_textheaders = {'User-Agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) '                         'AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}def get_ts(url):    try:        response = requests.get(url, verify=False)        response.raise_for_status()        response.encoding = 'utf-8'        return response.content    except Exception as err:        print(err)        return b''def save_ts(url, index):    filename = os.path.join('./video', str(index).zfill(5) + '.ts')    with open(filename, 'wb') as f:        ts = get_ts(url)        f.write(ts)    print(filename + ' is ok!')if __name__ == '__main__':    playlist = m3u8.load(uri='./data/index.m3u8')# 线程池,引入index可以防止合成时视频发生乱序    with ThreadPoolExecutor(max_workers=10) as pool:        for index, seg in enumerate(playlist.segments):            pool.submit(save_ts, seg.uri, index)    key = get_ts(playlist.keys[-1].uri)    files = glob.glob(os.path.join('./video', '*.ts'))    for file in files:        with open(file, 'rb') as fr, open('./video_de/baitoushan.mp4', 'ab') as fw:            content = fr.read()            encontent = AESDecrypt(content, key=key, iv=key)            fw.write(encontent)        print(file + ' is ok!')

  下载.ts文件效果如下:

使用Python怎么在m3u8文件中提取视频

  合成.mp4文件效果如下:

使用Python怎么在m3u8文件中提取视频

使用Python怎么在m3u8文件中提取视频

5. 结束语

Musicer开源代码仓库


  Musicer音乐爬虫已经开源了哦,持续更新中,欢迎来踩来Star哦!ヾ(≧∇≦*)ヾ

Python主要应用领域有哪些

1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型网站均为python开发。3.人工智能应用,基于大数据分析深度学习而发展出来的人工智能本质上已经无法离开python。4、系统运维工程项目自动化运维的标配就是python+Django/flask。5、金融理财分析,量化交易,金融分析。6、大数据分析。

上述就是小编为大家分享的使用Python怎么在m3u8文件中提取视频了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网Python频道。

--结束END--

本文标题: 使用Python怎么在m3u8文件中提取视频

本文链接: https://www.lsjlt.com/news/276734.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Python怎么在m3u8文件中提取视频
    这期内容当中小编将会给大家带来有关使用Python怎么在m3u8文件中提取视频,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. HLS协议与m3u8文件  HLS,即 H T T P   L ...
    99+
    2023-06-15
  • 怎么在Python中利用m3u8拼接mp4视频文件
    本篇文章为大家展示了怎么在Python中利用m3u8拼接mp4视频文件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pytho...
    99+
    2023-06-06
  • python怎么读取视频文件
    在python中使用cv2库读取视频文件的方法:1.新建python项目;2.导入cv2库;3.使用VideoCapture()函数获取视频路径;4.使用read()函数读取视频;具体步骤如下:首先,打开python,并新建一个python...
    99+
    2024-04-02
  • 怎么在Linux系统中从视频中提取音频
    本篇文章为大家展示了怎么在Linux系统中从视频中提取音频,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。方法如下:首先安装mencoder.对于Ubuntu来说,软件仓库里就有mencoder,可直...
    99+
    2023-06-07
  • Java怎么实现提取QSV文件视频内容
    今天小编给大家分享一下Java怎么实现提取QSV文件视频内容的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。创建类第一步新建一...
    99+
    2023-07-05
  • 使用python播放视频文件
    基于python和opencv实现的 import numpy as np import cv2 cap = cv2.VideoCapture('f:/rain_of_lovesickness.mp4') while (cap.i...
    99+
    2023-01-31
    视频文件 python
  • 教你使用Python提取视频中的美女图片
    目录前言安装模块you-getOpenCV结束前言 人类都是视觉动物,不管是男生还是女生看到漂亮的小姐姐、小哥哥就想截图保存下来。可是截图会对画质会产生损耗,截取的 画面不规整,像素...
    99+
    2024-04-02
  • [原创]使用python对视频/音频文件
    [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作 转载请注明出处   一.关于为什么用pymediainfo以及pymediainfo的安装   使用python对视频/音频文件进行详细信息采集,并进行去重操作的核...
    99+
    2023-01-30
    音频文件 视频 python
  • 怎么在Linux中使用shell 提取文件名
    怎么在Linux中使用shell 提取文件名?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个...
    99+
    2023-06-09
  • python中音频文件怎么读取
    使用python读取音频文件的方法:1.新建python项目;2.导入wave和numpy模块;3.使用wave.open()方法打开音频文件;4.使用getparams()方法读取文件数据;具体步骤如下:首先,打开python,并新建一个...
    99+
    2024-04-02
  • 怎么用Python提取小红书无水印视频
    这篇文章主要介绍“怎么用Python提取小红书无水印视频”,在日常操作中,相信很多人在怎么用Python提取小红书无水印视频问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python提取小红书无水印视频...
    99+
    2023-06-04
  • 怎么使用Python爬取抖音APP视频
    这篇文章主要讲解了“怎么使用Python爬取抖音APP视频”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python爬取抖音APP视频”吧!记录一下如何用python爬取app数据,...
    99+
    2023-06-15
  • Python怎么获取视频文件的大小和时长
    这篇文章主要介绍“Python怎么获取视频文件的大小和时长”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么获取视频文件的大小和时长”文章能帮助大家解决问题。1. 前置知识这里一共需要用...
    99+
    2023-07-05
  • Python使用PyAV提取视频关键帧的实践
    目录1.软件环境⚙️2.问题描述...
    99+
    2024-04-02
  • Python怎么提取小红书无水印视频
    这篇文章主要介绍“Python怎么提取小红书无水印视频”,在日常操作中,相信很多人在Python怎么提取小红书无水印视频问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么提取小红书无水印视频”的疑...
    99+
    2023-06-04
  • C#实现提取Word中插入的多媒体文件(视频,音频)
    目录dll文件安装(3种方法)提取文件完整代码C#VB.NET在Word中可将文件通过OLE对象嵌入的方式插入到文档,包括Word、excel、PDF、PPT、图片、宏文件、文件包等...
    99+
    2024-04-02
  • python怎么读取音频文件
    要读取音频文件,你可以使用Python中的音频处理库,如pydub或wave。首先,你需要安装相应的库。你可以使用以下命令来安装py...
    99+
    2023-10-27
    python
  • 怎么在python中使用opencv实现视频抽帧
    怎么在python中使用opencv实现视频抽帧,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、数据集简述:    &...
    99+
    2023-06-15
  • 怎么在python中使用moviepy对视频进行处理
    本篇文章为大家展示了怎么在python中使用moviepy对视频进行处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研...
    99+
    2023-06-08
  • 怎么在python中使用urlretriev获取远程文件
    怎么在python中使用urlretriev获取远程文件?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python可以做什么Python是一种编程语言,内置了许...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作