生活随笔
收集整理的這篇文章主要介紹了
用python下载ts视频
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先找一個視頻網站,分析網站:
找到這個iframe的src:
過去看看:
點擊觀看就發現了多了些東西:
具體分析下:
簡單猜測下這個key.key一定是解密的
現在視頻服務器地址列表有了,解密的密碼有了??梢灾苯优酪曨l下來了:
import os
import requests
import re
import time
#視頻視頻地址
pathUrl = 'https://video.dious.cc/20200617/fYdT3OVu/1000kb/hls/index.m3u8'
#整個文件夾裝
dir = "./dpcq/"if not os.path.exists(dir):os.makedirs(dir)def getVideo():headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",}res = requests.get(pathUrl, headers=headers)res.encoding = res.apparent_encoding#拿取視頻的全部路徑列表urlList = re.findall(r'\n(.*\.ts)', res.text)print(len(urlList))count = 0for item in urlList:#慢慢拿取,假裝人為,一共395個文件,沒加sleep,我只拿取了170個,加了全拿下來了time.sleep(6)count += 1res2 = requests.get(item, stream=True, headers=headers)res2.encoding = res2.apparent_encodingprint(res2.status_code)with open(dir + 'demo{}.mp4'.format(str(count)), "wb") as mp4:#邊拿邊從內存寫到硬盤里for chunk in res2.iter_content(chunk_size=1024 * 1024):if chunk:mp4.write(chunk)if __name__ == '__main__':getVideo()
給爺下來!!
但是。。放不起:
加個解密就完事了:
import osfrom Crypto.Cipher import AES
from Crypto.Util.Padding import pad# 之前key.key文件里的數字 '722c55ff989ded9a'
cryptorObj = AES.new(bytes('722c55ff989ded9a'.encode()), AES.MODE_CBC, bytes('722c55ff989ded9a'.encode()))dir = './dpcq/'if __name__ == "__main__":w = open('./video.mp4', "wb")files = os.listdir(dir)# 這里我是demoXXX.MP4命名的, os.listdir讀取時隨機的,sort排個序files.sort(key=lambda x: int(x.split('demo')[1][:-4]))print(files)for item in files:fileObj = open(dir + '{}'.format(item), 'rb')fc = fileObj.read()# 最開始沒加這個判斷會報錯 Data must be padded to 16 byte boundary in CBC mode 網上查了下解決方法:if fc and (len(fc) % 16) != 0:# EXT-X-KEY:METHOD=AES-128的加密方式,對應加密的key大小16byte,對應AES.MODE_CBC,# 如果視頻大小不是16的倍數,解密時出現:ValueError(“Data must be padded to %d byte boundary in CBC mode” % self.block_size)fc = pad(fc, 16) # 按16的倍數補齊長度w.write(cryptorObj.decrypt(fc))
over
總結
以上是生活随笔為你收集整理的用python下载ts视频的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。