使用Python下载m3u8流视频

发布时间:2026-01-24 17:15

手机上如何下载并安装视频编辑软件 #生活技巧# #数码产品使用技巧# #视频剪辑基础#

最新推荐文章于 2023-10-12 22:30:00 发布

原创 于 2019-12-16 09:21:47 发布 · 3.5k 阅读

· 1

· 2 ·

CC 4.0 BY-SA版权

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

requirement:

pip3 install pycrypto

sh

1

code:

# -*- coding:utf-8 -*- import os import shutil import requests import datetime from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex def download(url):#指定存储目录 download_path = os.getcwd() + "/Downloads" if not os.path.exists(download_path): os.mkdir(download_path) #新建日期文件夹 download_path = os.path.join(download_path, datetime.datetime.now().strftime('%Y%m%d_%H%M%S')) #print download_path os.mkdir(download_path) # 获取第一层M3U8文件内容 all_content = requests.get(url).text if "#EXTM3U" not in all_content: raise BaseException("非M3U8的链接")# 第一层 if "EXT-X-STREAM-INF" in all_content: file_line = all_content.split("\n") for line in file_line: if '.m3u8' in line:# 拼出第二层m3u8的URL url = url.rsplit("/", 1)[0] + "/" + line all_content = requests.get(url).text file_line = all_content.split("\n") unknow = True key = "" # 第二层 for index, line in enumerate(file_line):# 找解密Key if "#EXT-X-KEY" in line: method_pos = line.find("METHOD") comma_pos = line.find(",") method = line[method_pos:comma_pos].split('=')[1] print("Decode Method:", method) uri_pos = line.find("URI") quotation_mark_pos = line.rfind('"') key_path = line[uri_pos:quotation_mark_pos].split('"')[1] # 拼出key解密密钥URL key_url = url.rsplit("/", 1)[0] + "/" + key_path res = requests.get(key_url) key = res.content print("key:" , key) # 找ts地址并下载 if "EXTINF" in line: unknow = False # 拼出ts片段的URL pd_url = url.rsplit("/", 1)[0] + "/" + file_line[index + 1] res = requests.get(pd_url) c_fule_name = file_line[index + 1].rsplit("/", 1)[-1] # AES 解密 if len(key): cryptor = AES.new(key, AES.MODE_CBC, key) with open(os.path.join(download_path, c_fule_name + ".mp4"), 'ab') as f: f.write(cryptor.decrypt(res.content)) else: with open(os.path.join(download_path, c_fule_name), 'ab') as f: f.write(res.content) f.flush() if unknow: raise BaseException("未找到对应的下载链接") else: print("下载完成") merge_file(download_path) delete_ts(download_path) def merge_file(path): path_list = [] for file in os.listdir(path): if file.endswith('.ts'): path_list.append(file) path_list.sort() li = [os.path.join(path,filename) for filename in path_list] input_file = '|'.join(li) output_file = path + '.mp4' command = 'ffmpeg -i "concat:{}" -acodec copy -vcodec copy -absf aac_adtstoasc {}'.format(input_file, output_file)) os.system(command) def delete_ts(path): try: shutil.rmtree(path) print('ts文件已经删除') except: print('ts文件删除失败') if __name__ == '__main__': url = "https://xxxxxxxxxxx.m3u8" download(url)

python3

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103

2019年12月21日更新

如果出现

too many open files 1

则是因为打开的文件数量超过系统允许的数量
可以手动修改允许的数量

ulimit -n 2048

bash

1

参考

网址:使用Python下载m3u8流视频 https://www.yuejiaxmz.com/news/view/1439289

相关内容

使用Python自动下载电视节目
基于opencv,使用python提取视频帧以及提取TVL1光流
python 学习笔记24 图片视频修复
转载:KNIME + Python = 数据分析+报表全流程
python 音频去除噪音
使用 Python 将工作流程自动化
猫抓浏览器扩展:网络视频资源一键获取实战手册
使用Python自动化电脑监控软件的工作流程
python毕设养生视频推荐系统设计与实现84384.程序+论文
腾讯视频app下载

随便看看