:怎么說呢,一直想寫一個下載小電影的程序,之前搞過爬蟲,只是看到過m3u8的文件,
近日有時間,心血來潮想搞一下,可是現在竟然加密了,是我out了,還是技術發展太快。
話不多說,直接上思路:
1 讀取m3u8文件,給他標記上型號 2 根據標記,然后下載,並以標記給文件命名, 3 然后合並視頻 4 操作說明: 5 1.需要自己去下載m3u8文件,命名:index.m3u8 6 2.自己去找密鑰 ,下載的時候會遇到密鑰,自己下載函數里面去改 7 key = "fad2a57ccb9deefc"
代碼奉上:有本事就留個腳印,沒有本事就算了,因為我已經把你們能對我的所有可見操作都關閉了。

from concurrent.futures import ThreadPoolExecutor from Crypto.Cipher import AES import requests,os,uuid # 合並文件 def merge(): tmp = [] for root, dirs, files in os.walk("video/"): for f in files: if f.split(".", 1)[1] == "ts": tmp.append(int(f.split(".", 1)[0])) tmp.sort() for i in range(len(tmp)): tmp[i] = f"{tmp[i]}.ts" shell_str = '+'.join(tmp) shell_str = 'copy /b ' + shell_str + ' ' + "0.ts" os.chdir(os.path.join(os.getcwd(), "video")) os.system(shell_str) # 接下來復制,並且轉換成MP4 shell_str = f"copy /b 0.ts {uuid.uuid1()}.mp4" os.system(shell_str) os.system('del /Q *.ts') print("整合完畢,快去看吧") def downVideo(obj,key=None): print(f"正在下載第{obj['num']}") url = obj["url"] res = requests.get(url) key = "fad2a57ccb9deefc".encode("utf-8") cryptor = AES.new(key, AES.MODE_CBC, b'qqqqqqqqqqqqqqqq') with open(f"video/{obj['num']}.ts",'ab')as fp: fp.write(cryptor.decrypt(res.content)) def start(file_src="index.m3u8"): # 創建目錄 if not os.path.isdir("video"): os.mkdir("video") file_src = "index.m3u8" arr = [] with open(file_src)as f: index = 1 for line in f.readlines(): if "#" not in line: obj = {} obj["url"] = line.replace("\n", "") obj["num"] = index index = index + 1 arr.append(obj) return arr if __name__ == "__main__": # 准備工作 arr = start() # 利用線程池 下載視頻 tps = ThreadPoolExecutor(10) # 最大線程數 for obj in arr: tps.submit(downVideo, obj) tps.shutdown() # 下載完畢自動整合數據 merge()