Python3 根据m3u8下载视频,批量下载ts文件并且合并

m3u8是苹果公司推出一种视频播放标准,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般存在服务器的内存中),通过m3u8解析出来路径,然后去请求,是现在比较流行的一种加载方式,诸如腾讯视频之类大多都是切割成ts流进行加载。

示例代码:

import os, shutil
import urllib.request, urllib.error, requests# 打开并读取网页内容
def getUrlData(url):try:urlData = urllib.request.urlopen(url, timeout=20)  # .read().decode('utf-8', 'ignore')return urlDataexcept Exception as err:print(f'err getUrlData({url})\n', err)return -1# 下载文件-urllib.request
def getDown_urllib(url, file_path):try:urllib.request.urlretrieve(url, filename=file_path)return Trueexcept urllib.error.URLError as e:# hasttr(e, 'code'),判断e 是否有.code属性,因为不确定是不是HTTPError错误,URLError包含HTTPError,但是HTTPError以外的错误是不返回错误码(状态码)的if hasattr(e, 'code'):print(e.code)  # 打印服务器返回的错误码(状态码),如403,404,501之类的elif hasattr(e, 'reason'):print(e.reason)  # 打印错误原因def getVideo_urllib(url_m3u8, path, videoName):print('begin run ~~\n')# urlData = getUrlData(url_m3u8).readlines()urlData = getUrlData(url_m3u8)num = 0tempName_video = os.path.join(path, f'{videoName}.ts')  # f'{}' 相当于'{}'.format() 或 '%s'%videoName# print(urlData)for line in urlData:# 解码,由于是直接使用了所抓取的链接内容,所以需要按行解码,如果提前解码则不能使用直接进行for循环,会报错# 改用上面的readlines()或readline()也可以,但更繁琐些,同样需要按行解码,效率更低url_ts = line.decode('utf-8')tempName_ts = os.path.join(path, f'{num}.ts')  # f'{}' 相当于'{}'.format()if not '.ts' in url_ts:continueelse:if not url_ts.startswith('http'):  # 判断字符串是否以'http'开头,如果不是则说明url链接不完整,需要拼接# 拼接ts流视频的urlurl_ts = url_m3u8.replace(url_m3u8.split('/')[-1], url_ts)print(url_ts)getDown_urllib(url_ts, tempName_ts)  # 下载视频流if num == 0:# 重命名,已存在则自动覆盖
            shutil.move(tempName_ts, tempName_video)num += 1continuecmd = f'copy /b {tempName_video}+{tempName_ts} {tempName_video}'res = os.system(cmd)if res == 0:os.system(f'del {tempName_ts}')if num == 20:  # 限制下载的ts流个数,这个视频挺长有四百多个.ts文件,所以限制一下breaknum += 1continueprint(f'Wrong, copy {num}.ts-->{videoName}.ts failure')return Falseos.system(f'del {path}/*.ts')  # 调用windows命令行(即cmd)工具,运行命令filename = os.path.join(path, f'{videoName}.mp4')shutil.move(tempName_video, filename)print(f'{videoName}.mp4 finish down!')if __name__ == '__main__':url_m3u8 = 'http://wscdn.alhls.xiaoka.tv/201886/2f5/75a/HoHdTc1LjUaBjZbJ/index.m3u8'path = r'E:\pydevworkspaces\project\product\epgw\videos'videoName = url_m3u8.split('/')[-2]getVideo_urllib(url_m3u8, path, videoName)

注:(1)仅限windows下使用,如果要在Linux上使用需要修改合并命令;

(2)修改文件名时,特意选择shutil模块(可以看作os的高级版)的move方法,虽然move主要是用来移动文件的,重命名算是附带的,不过强制覆盖的特点在这里很有用,避免中断后重新下载时重命名产生异常。

转载于:https://www.cnblogs.com/lizm166/p/10262394.html

Python3 根据m3u8下载视频,批量下载ts文件并且合并相关推荐

  1. Python爬取m3u8格式视频并解密ts文件合并转为mp4格式

    一. m3u8是什么格式 m3u8是苹果公司推出的视频播放标准,是m3u的一种,只是编码格式采用的是UTF-8. m3u8准确来说是一种索引文件,使用m3u8文件实际上是通过它来解析对应的放在服务器上 ...

  2. m3u8 视频提取工具(下载web中的ts文件)

    m3u8 视频提取工具(下载web中的ts文件) 开发背景 m3u8视频格式简介(借用他人描述) m3u8视频格式原理:将完整的视频拆分成多个 .ts 视频碎片,.m3u8 文件详细记录每个视频片段的 ...

  3. 爬虫进阶教程:抖音APP无水印视频批量下载

    一.前言 本文为两类人准备:技术控和工具控. 如果你是工具控,想简单方便地下载无水印的视频,那么可以使用第三方去水印平台: 抖音短视频解析下载平台 如果你是技术控,想要使用自己写的代码下载视频,那么可 ...

  4. 关于抖音抓包的一些分析和抖音视频批量下载

    上一篇介绍了抓包软件的使用: Fiddler+夜神模拟器+xposed+justTrustMe手机抓包 这一篇介绍下对抖音里**"喜欢"**的视频批量下载,和一些分析. 1.根据上 ...

  5. [Windows] 哔哩下载姬—B站视频批量下载

    哔哩下载姬 简介:哔哩下载姬是一款下载哔哩哔哩视频的免费软件.适用:windows系统文件大小:18.7 MB 特点: 1.无需登录即可下载. 2.可以多线程,多任务同时下载.(最高支持10线程,10 ...

  6. video downloadhelper 无时间限制_Python实现超简单【抖音】无水印视频批量下载

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:python乱炖 转载: Python实现超简单[抖音]无水印视频批 ...

  7. twitter图片视频批量下载

    twitter图片视频批量下载 学python之前试用过一个twitter批量下载图片的软件,甚至没有视频下载,官方收费还是蛮贵的,学了python之后尝试着自己写了一个,把代码发布出来,和大家交流一 ...

  8. 天图视频批量下载工具

    介绍 功能介绍 视频合并 可一键合并MP4.FLV等多段视频.视频片段位置调整. 爆笑一刻 在线观看.批量下载搞笑视频,将快乐传递给大家. 视频素材下载 可将各网店平台视频(主图视频.描述视频.评论视 ...

  9. 哪里可以下载大量短视频?高质量短视频批量下载

    哪里可以下载大量短视频,高质量短视频批量下载,哪里可以下载大量短视频,现在很多人都觉得自媒体运营很难,其实它的确是很难,不过你学会运营技巧之后,就会容易很多,最近有些小伙伴问我哪里可以去批量下载视频素 ...

最新文章

  1. 线程池的工作原理与源码解读
  2. python爬虫原理-python学习之python爬虫原理
  3. 中国发布自主开发的域名系统基础软件 “红枫”
  4. 移动芯片领域变天?苹果宣布重大决定,芯片霸主市值一夜蒸发近千亿
  5. 近世代数--极大理想--I是R的极大理想↔R/I是域
  6. python中的创建对象
  7. Zxing二维码重复扫描,不退出。
  8. matlab中结束脚本运行_MATLAB脱单指南
  9. cad图层管理插件_设计大神CAD常用七个插件你会用几个?
  10. linux 修I改资源限制1024,Re:如何解决1024的限制???
  11. 21天Jenkins打卡Day14-maven服务
  12. rsync使用(二)
  13. 基金公司产品管理系统搭建与推广
  14. Linux系统与服务构建(一)
  15. 整理:几款好用的Markdown编辑器
  16. JS生成验证码、卡密,生成指定位数的字符串
  17. 《Redis开发与运维》学习第六章
  18. 基于STM32的自由度云台运动姿态控制系统
  19. 史上最全介绍--新能源汽车整车控制器VCU开发流程功能概述
  20. 写乐100道练习题_【写乐钢笔使用】_摘要频道_什么值得买

热门文章

  1. SecureCRT9.0.1、SecureFX9.0.1,windows与mac版本下载
  2. NetBeans 打开/保存具有指定编码的文件插件
  3. 多任务学习综述:推荐系统多任务学习(multitask)的实战总结和常见问题(一)
  4. 阿里 P7 到底是怎样的水平 ???
  5. “云适配”获1亿元B+轮融资,盯上了大企业的移动化需求
  6. Go语言学习笔记(三)---指针,运算符及流程控制
  7. 3D打印成型技术:看得见摸得着的真实
  8. 幼儿园小班上计算机课 作业内容是手口一致,幼儿园1-10数字手口一致,对物数数教案...
  9. 知道生产日期和保质期来计算有效期至的方法和代码
  10. android模拟器 对比,安卓模拟器多开用哪个模拟器好?实测数据对比哪个好用