m3u8.zip

  • 低声dees
    了解作者
  • Python
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2021-02-28 13:55
    上传日期
输入m3u8地址,解析m3u8内容,进行下载并合并成为MP4文件
m3u8.zip
  • m3u8.py
    4.7KB
内容介绍
import requests import os, time from concurrent.futures import ThreadPoolExecutor, wait import sys # from Crypto.Cipher import AES finishedNum = 0 allNum = 0 fileList = [] headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0'} class m3u8_downloader(): def download(self,downloadLink, name): global finishedNum global allNum for _ in range(10): try: req = requests.get(downloadLink, headers=headers, timeout=15) with open(f"{name}", "wb") as f: f.write(req.content) f.flush() finishedNum += 1 print(f"{name}下载成功, 总进度{round(finishedNum / allNum * 100, 2)}% ({finishedNum}/{allNum})") break except: if _ == 9: print(f"{name}下载失败") else: print(f"{name}正在进行第{_}次重试") def merge_file(self,path, name): global fileList cmd = "copy /b " for i in fileList: if i != fileList[-1]: cmd += f"{i} + " else: cmd += f"{i} {name}" os.chdir(path) with open('combine.cmd', 'w') as f: f.write(cmd) os.system("combine.cmd") if ".ts" in fileList[0]: os.system('del /Q *.ts') # elif ".mp4" in fileList[0]: # os.system('del /Q *.mp4') os.system('del /Q *.cmd') def downloader(self,url, downloadPath, name, threadNum): global allNum global fileList print("读取文件信息中...") if not os.path.exists(downloadPath): os.mkdir(downloadPath) # 查看是否存在 if os.path.exists(f"{downloadPath}/{name}"): print(f"视频文件已经存在,如需重新下载请先删除之前的视频文件") return content = requests.get(url, headers=headers).text.split('\n') if "#EXTM3U" not in content[0]: raise BaseException(f"非M3U8链接") # .m3u8 跳转 for video in content: if ".m3u8" in video: if video[0] == '/': url = url.split('//')[0] + "//" + url.split('//')[1].split('/')[0] + video elif video[:4] == 'http': url = video else: url = url.replace(url.split('/')[-1], video) print(url) content = requests.get(url, headers=headers).text.split('\n') urls = [] for index, video in enumerate(content): if '#EXTINF' in video: if content[index + 1][0] == '/': downloadLink = url.split('//')[0] + "//" + url.split('//')[1].split('/')[0] + content[index + 1] elif content[index + 1][:4] == 'http': downloadLink = content[index + 1] elif content[index + 1][:5] == 'https': downloadLink = url.replace(url.split('/')[-1], content[index + 1]) else: if content[index + 2][0] == '/': downloadLink = url.split('//')[0] + "//" + url.split('//')[1].split('/')[0] + content[index + 2] elif content[index + 2][:4] == 'http': downloadLink = content[index + 2] elif content[index + 2][:5] == 'https': downloadLink = content[index + 2] else: downloadLink = url.replace(url.split('/')[-1], content[index + 1]) urls.append(downloadLink) allNum = len(urls) pool = ThreadPoolExecutor(max_workers=threadNum) futures = [] start = time.time() for i, downloadLink in enumerate(urls): print(downloadLink) if ".mp4" in downloadLink: tsname = str(i) + '.mp4' elif ".ts" in downloadLink: tsname = str(i) + '.ts' fileList.append(tsname) futures.append(pool.submit(self.download, downloadLink, f"{downloadPath}/{tsname}")) wait(futures) end = time.time() print(f"运行完成,共用时", end - start) self.merge_file(downloadPath, name + '.mp4') print(f"合并完成") print(f"文件下载成功,尽情享用吧") if __name__ == '__main__': videoUrl = input("请输入m3u8地址:") name = input('请输入视频名称:') dpath = "G:/films/" + name # threadNum = int(sys.argv[3]) d=m3u8_downloader() d.downloader(videoUrl, dpath, name, 64)
评论
    相关推荐
    • m3u8.rar
      自动识别key和iv,然后自动下载列表中的文件,并通过openssl解码,通过ffmepg组合视频成mp4,使用java编写,JFrame窗口程序,需要自己修改代码指定openssl的目录和ffmepg目录(请先下载),m3u8文件格式比较多样,...
    • m3u8视频下载类库.rar
      errferfewrewrewrew453534534535435435345353
    • M3U8 Downloader 基于 FFmpeg 的M3U8下载
      这个事情就只好用大名鼎鼎的 FFmpeg 了,而 M3U8 Downloader 则是一款基于 FFmpeg 的M3U8下载器。如果你需要下载HLS 的M3U8和TS视频,也可以使用我们刚刚介绍过的Stream Recorder插件。 M3U8 Downloader简介 M3U8 ...
    • The-New-M3U8-Downloader, M3U8下载程序的Rebulid ( 停止永久更新).zip
      The-New-M3U8-Downloader, M3U8下载程序的Rebulid ( 停止永久更新) The-New-M3U8-DownloaderM3U8-Downloader的Rebulid 。整合Batch下载 4.0 [ https://github.com/nilaoda/Batch-Download ]
    • hls-downloader:简单的HLS.m3u.m3u8下载
      简单的HLS / .m3u / .m3u8下载器 使用ffmpeg下载流式视频 可能不支持所有功能,但应适用于大多数简单情况 如何? 安装Java 8u112或更高版本: : 安装ffmpeg: : 将此代码放在某处 在该文件夹中运行“ gradlew ...
    • media-downloader:m3u8 视频在线提取工具 流媒体下载 m3u8下载 桌面客户端 windows mac
      media-downloader m3u8 视频在线提取工具 流媒体下载 m3u8下载 桌面客户端 windows mac
    • m3u8-downloader:一个M3U8 视频下载(M3U8 downloader)工具。跨平台
      golang 多线程下载直播流m3u8格式的视屏,跨平台。 你只需指定必要的 flag (u、o、n、ht) 来运行, 工具就会自动帮你解析 M3U8 文件,并将 TS 片段下载下来合并成一个文件。 功能介绍 下载和解析 M3U8 下载 TS 失败重...
    • m3u8下载工具.zip
      复制以下代码,在浏览器收藏夹新建标签(快捷键是Ctrl+D),网址处粘贴以下代码。[removed]var a=prompt(PLAYER._DownloadMonitor.context....接着会处一段M3U8链接,我们复制粘贴链接使用M3U8下载器下载即可
    • C#开发的m3u8下载器含源代码.zip
      软件采用c# 4.7.2开发 如果软件打不开的 请自行安装运行库 功能: 多线程 多任务 自动解密 自动错误校验 断点续传 自动合并文件 手动合并文件 自定义添加请求头 批量添加任务
    • 视频会议系统.rar
      一套商用的视频会议程序(cool)。