什么是m3u8文件?M3U8文件是指UTF-8编码格式的M3U文件。

M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。

原视频数据分割为很多个TS流,每个TS流的地址记录在m3u8文件列表中

比如我这里有一个m3u8文件,文件内容如下:#EXTM3U

#EXT-X-VERSION:3

#EXT-X-MEDIA-SEQUENCE:0

#EXT-X-ALLOW-CACHE:YES

#EXT-X-TARGETDURATION:15

#EXTINF:6.916667,

out000.ts

#EXTINF:10.416667,

out001.ts

#EXTINF:10.416667,

out002.ts

#EXTINF:1.375000,

out003.ts

#EXTINF:1.541667,

ts 文件一般怎么处理?

1 只有m3u8文件,需要下载ts文件

2 有ts文件,但因为被加密无法播放,需要解码

3 ts文件能正常播放,但太多而小,需要合并

4 本篇文章处理第1和第2条内容,加密部分跳过。

上面我提供的ts文件中并没有加密,也就是没有关键字key ,下载ts文件之后直接合并即可

ts文件路径获取

由于上面的m3u8文件中所有的ts文件都是相对地址,所以需要依据上篇博客中获取到的链接{'url': 'https://videos5.jsyunbf.com/2019/02/07/iQX7y3p1dleAhIv7/playlist.m3u8', 'ext': 'dplay', 'msg': 'ok', 'playertype': None}

其中前面的部分是ts的播放地址的前缀地址# https://videos5.jsyunbf.com/2019/02/07/iQX7y3p1dleAhIv7/out005.ts

import datetime,requests

# m3u8是本地的文件路径

def get_ts_urls(m3u8_path,base_url):

urls = []

with open(m3u8_path,"r") as file:

lines = file.readlines()

for line in lines:

if line.endswith(".ts\n"):

urls.append(base_url+line.strip("\n"))

return urls

ts文件下载

所有的路径读取完毕之后,需要对ts文件进行下载,文件的下载办法很多def download(ts_urls,download_path):

for i in range(len(ts_urls)):

ts_url = ts_urls[i]

file_name = ts_url.split("/")[-1]

print("开始下载 %s" %file_name)

start = datetime.datetime.now().replace(microsecond=0)

try:

response = requests.get(ts_url,stream=True,verify=False)

except Exception as e:

print("异常请求:%s"%e.args)

return

ts_path = download_path+"/{0}.ts".format(i)

with open(ts_path,"wb+") as file:

for chunk in response.iter_content(chunk_size=1024):

if chunk:

file.write(chunk)

end = datetime.datetime.now().replace(microsecond=0)

print("耗时:%s"%(end-start))

下载过程显示,表示下载成功,剩下的就是拼网速的时候了。

下载完毕,是一大堆ts文件,记住,只要一个可以看,就可以合并了

合并ts文件     使用copy命令 如果不清楚,就去百度即可

在windows系统下面,直接可以使用:copy/b *.ts video.mp4  把所有ts文件合成一个mp4格式文件copy/b D:\newpython\doutu\sao\ts_files\*.ts d:\fnew.ts

代码合并import os

from os import path

def file_walker(path):

file_list = []

for root, dirs, files in os.walk(path): # 生成器

for fn in files:

p = str(root+'/'+fn)

file_list.append(p)

print(file_list)

return file_list

def combine(ts_path, combine_path, file_name):

file_list = file_walker(ts_path)

file_path = combine_path + file_name + '.ts'

with open(file_path, 'wb+') as fw:

for i in range(len(file_list)):

fw.write(open(file_list[i], 'rb').read())

if __name__ == '__main__':

#urls = get_ts_urls("playlist.m3u8","https://videos5.jsyunbf.com/2019/02/07/iQX7y3p1dleAhIv7/")

#download(urls,"./tsfiles")

combine("./ts_files","d:/ts","haha")

最终合并之后,形成一个ts文件,当然你还可以用软件把视频转换成mp4格式

也可以利用FFMPEG可以直接实现m3u8 转MP4

备注部分

m3u8文件中的 m3u8标签与属性说明#EXTM3U

每个M3U文件第一行必须是这个tag,请标示作用

#EXT-X-VERSION:3

该属性可以没有

#EXT-X-MEDIA-SEQUENCE:140651513

每一个media URI在PlayList中只有唯一的序号,相邻之间序号+1,

一个media URI并不是必须要包含的,如果没有,默认为0

#EXT-X-TARGETDURATION

指定最大的媒体段时间长(秒)。所以#EXTINF中指定的时间长度必须小于或是等于这

个最大值。这个tag在整个PlayList文件中只能出现一 次(在嵌套的情况下,一般有

真正ts url的m3u8才会出现该tag)

#EXT-X-PLAYLIST-TYPE

提供关于PlayList的可变性的信息,这个对整个PlayList文件有效,是可选的,格式

如下:#EXT-X-PLAYLIST-TYPE::如果是VOD,则服务器不能改变PlayList 文件;

如果是EVENT,则服务器不能改变或是删除PlayList文件中的任何部分,但是可以向该

文件中增加新的一行内容。

#EXTINF

duration指定每个媒体段(ts)的持续时间(秒),仅对其后面的URI有效,title是

下载资源的url

#EXT-X-KEY

表示怎么对media segments进行解码。其作用范围是下次该tag出现前的所有media

URI,属性为NONE 或者 AES-128。NONE表示 URI以及IV(Initialization

Vector)属性必须不存在, AES-128(Advanced EncryptionStandard)表示URI

必须存在,IV可以不存在。

#EXT-X-PROGRAM-DATE-TIME

将一个绝对时间或是日期和一个媒体段中的第一个sample相关联,只对下一个meida

URI有效,格式如#EXT-X-PROGRAM-DATE-TIME:

For example: #EXT-X-PROGRAM-DATETIME:2010-02-19T14:54:23.031+08:00

#EXT-X-ALLOW-CACHE

是否允许做cache,这个可以在PlayList文件中任意地方出现,并且最多出现一次,作

用效果是所有的媒体段。格式如下:#EXT-X-ALLOW-CACHE:

#EXT-X-ENDLIST

表示PlayList的末尾了,它可以在PlayList中任意位置出现,但是只能出现一个,格

式如下:#EXT-X-ENDLIST

python下载ts视频文件_Python3爬虫通过m3u8文件下载ts视频 Python爬虫相关推荐

  1. 将DAT格式视频文件转换成ASF和WMV格式视频文件

    以*.ASF和*.WMV为后缀名的视频文件,是微软针对RM格式视频文件而产生的,它们也是WindowsMedia的核心.它们的共同特点是采用MPEG-4压缩算法,所以压缩率和图像的质量都很不错(只比V ...

  2. python下载图片到文件夹_python 移动图片到另外一个文件夹的实例

    python 移动图片到另外一个文件夹的实例 如下所示: # -*- coding:utf8 -*- import os import shutil import numpy as np import ...

  3. python 下载qq群文件_python作业/练习/实战:下载QQ群所有人的头像

    步骤与提示: 1.在腾讯群网页中进入任意一个群,获取相关信息,可以用postman是试一下,可以看到我们要的是mems里面的数据,需要获取到QQ号和群名片,如果没有群名片的话取昵称 2.根据QQ号下载 ...

  4. python下载显示文件丢失连不上网_python39.dll文件下载,金山毒霸dll修复工具帮您解决文件丢失导致“python39.dll找不到”的系统问题...

    我该如何安装从金山毒霸下载的DLL文件? 一: 1.从金山毒霸下载压缩文件. 2.将DLL文件解压到电脑上的某个地方. 3.把该文件跟要求使用它的程序放在同一路径上.注意32位程序需要使用32位的DL ...

  5. PHP七牛云上传大视频文件异步存为m3u8格式(包括回调过程)

    问题引入 视频的第一帧加载缓慢. 简介 HTTP Live Streaming,缩写为HLS,是由苹果公司提出基于HTTP的流媒体网络传输协议.它的工作原理是把整个流分成一个个小的基于HTTP的文件来 ...

  6. 编程软件python下载怎么读-使用最方便的计算机编程软件,Python下载使用完美教程...

    Python是一种通用的计算机编程软件,Python对程序员来说是一个非常有用的工具,它允许你快速地编写代码,并且我们使用软件做出的代码运行速度异常快,Python还具有别的软件不具有的突出点那么就是 ...

  7. 复制并重命名文件_视频文件太大怎么办?快速压制视频只需一招,好多大咖都在用...

    在当今,短视频可以说是一个非常火爆的行业,很多朋友们可能都会遇到一种情况,那就是我们下载下来的或者是录制出来的一些视频文件非常大,那如何才能够在不改变清晰度的情况下将这些视频快速压缩呢?这主要可以通过 ...

  8. PHP + NGINX 控制视频文件播放,并防止文件下载

    最简单的方法是使用NGINX的 internal 功能 server {     listen 80;     server_name www.xxx.com;     location / {    ...

  9. u盘/移动硬盘的视频文件出现损坏怎么办?修复损坏视频办法分享!

    一般情况下,视频文件都是比较大,如果直接存放于电脑,就会占用比较大的存储空间.不少小伙伴都会把它存放于U盘或者移动硬盘,而且作为一种便携式硬盘,可以在各电脑之间使用,非常方便.但这也造成文件很容易出现 ...

最新文章

  1. 对于java的命名规范(标识符)
  2. 系列(七)—测试用例设计
  3. 计算面平均边_计算机图形学补充2:齐次空间裁剪(Homogeneous Space Clipping)
  4. linux arm9视频哪个好,谈谈ARM7与ARM9的区别
  5. android camera fragment,Android Camera 模块分析(三)
  6. 犯病的chorme(谷歌浏览器)之css加载失败
  7. 80端口被占用时的终极解决方法
  8. 字符串拼接的双引号和单引号问题,转义字符
  9. Codeforces Round #224 (Div. 2)
  10. 华为数通部门软开9.16凉经
  11. 软考计算机硬件知识,软考程序员考点计算机硬件基础知识之指令系统
  12. 蚂蚁小程序--自学笔记
  13. Git学习使用方法总结(1)
  14. PMP项目进度网络图详解——第2篇:CPM关键路径法
  15. 洛谷P5437/5442 约定(概率期望,拉格朗日插值,自然数幂)
  16. 苹果产品中投影的秘密在这里
  17. 五大列级庄_什么是“列级庄”
  18. 数字孪生论文阅读笔记【1.1】
  19. 字节进军外卖,抖音内测“心动外卖”
  20. c语言添加字库,如何添加新的字库

热门文章

  1. 某网数据crawler
  2. 用SQL Server 2005构建高性能数据仓库
  3. Java中final、finally和finalize的区别
  4. 计算机基础-了解软硬件-00:文章内容规划、了解软件和硬件的区别
  5. CSS3实现边框锯齿效果
  6. (附源码)ssm生鲜超市管理系统的设计与实现 毕业设计261635
  7. Gym报错 The observation returned by the `reset()` method is not contained with the .......
  8. 华为手机集成高德地图定位必须开启定位服务(不是申请定位权限,是打开GPS定位)
  9. 如何将应用程序的打开方式还原或者设置成另外的打开方式
  10. 腾讯面试万字攻略,想进鹅厂的同学看看!