欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python3.6根據(jù)m3u8下載mp4視頻

系統(tǒng) 2096 0

需要下載某網(wǎng)站的視頻,chrome瀏覽器按F12打開(kāi)開(kāi)發(fā)者模式,發(fā)現(xiàn)視頻鏈接是以"blob:http"開(kāi)頭的鏈接,打開(kāi)這個(gè)鏈接后找不到網(wǎng)頁(yè),網(wǎng)上查了下,找到了下載方法,在這里做個(gè)記錄,如果有錯(cuò)誤,歡迎指出。

程序在Windows 10下運(yùn)行,不過(guò)Linux應(yīng)該也沒(méi)問(wèn)題。

使用到的有re模塊,requests模塊和Crypto模塊,其中requests模塊和Crypto模塊如果沒(méi)安裝可以使用pip命令安裝。(Crypto模塊安裝感覺(jué)比較坑,我是從anaconda里拷貝了一份)

下面開(kāi)始正題:

注:以下使用的m3u8文件所在的網(wǎng)站是自己搭建用來(lái)測(cè)試的,鏈接可能會(huì)失效。

首先在chrome的network里找到一個(gè)m3u8文件的請(qǐng)求,可以通過(guò)它下載視頻。

python3.6根據(jù)m3u8下載mp4視頻_第1張圖片

通過(guò)Preview可以看到m3u8文件的內(nèi)容。

python3.6根據(jù)m3u8下載mp4視頻_第2張圖片

這里m3u8文件比較重要的內(nèi)容有兩個(gè)。

一個(gè)是URI后面的鏈接,這個(gè)是加密和解密的秘鑰,如果m3u8文件里有這個(gè)URI,那么這個(gè)視頻就是經(jīng)過(guò)了加密的,加密的方法可以看URI前面,這里是AES-128加密算法。

另一個(gè)是以ts結(jié)尾鏈接,這個(gè)是視頻片段,如果是沒(méi)進(jìn)行加密的,可以直接打開(kāi)這個(gè)鏈接下載視頻片段,下載下來(lái)的是后綴為ts的文件,一般可以直接播放,不過(guò)時(shí)間很短。如果是加密過(guò)的,下載后播放會(huì)提示視頻文件已損壞。

知道這些后,就可以進(jìn)行下載了,先獲取m3u8文件的內(nèi)容,然后解析出秘鑰(key)和ts的鏈接,然后下載key對(duì)每一個(gè)ts進(jìn)行解密,保存到一個(gè)mp4文件里。

下載用的是requests模塊,解析key和ts的鏈接是用的re模塊,解密用的是Crypto模塊。

使用Crypto需要注意三個(gè)地方,一個(gè)是安裝和導(dǎo)入,第二個(gè)是Crypto里AES.new的參數(shù),第三個(gè)是decrypt方法的參數(shù)。下面先看代碼。

導(dǎo)入模塊:

            
import re
import requests
from Crypto.Cipher import AES
          

初始設(shè)置:

            
# 保存的mp4文件名
name = "dream_it_possible.mp4"

# m3u8文件的url
url = "http://www.jiuyi.info/static/video/secret/dream_it_possible.m3u8"


# 請(qǐng)求頭,不一定需要,看網(wǎng)站更改
headers = {
 "Referer": "http://www.jiuyi.info/video/dream_it_possible",
 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
     "(KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
 }
          

獲取m3u8文件內(nèi)容,并解析出key和ts文件的url。

            
# 獲取m3u8文件內(nèi)容
r = requests.get(url)

# 通過(guò)正值表達(dá)式獲取key和ts的url
k = re.compile(r"http://.*?\.key") # key的正則匹配
t = re.compile(r"http://.*?\.ts")  # ts的正則匹配
key_url = k.findall(r.text)[0]  # key的url
ts_urls = t.findall(r.text)  # ts的url列表
          

下載并解密ts文件,保存為mp4文件。

            
# 下載key
key = requests.get(key_url).content

# 解密并保存ts
for ts_url in ts_urls:

 ts_name = ts_url.split("/")[-1]  # ts文件名

 # 解密,new有三個(gè)參數(shù),
 # 第一個(gè)是秘鑰(key)的二進(jìn)制數(shù)據(jù),
 # 第二個(gè)使用下面這個(gè)就好
 # 第三個(gè)IV在m3u8文件里URI后面會(huì)給出,如果沒(méi)有,可以嘗試把秘鑰(key)賦值給IV
 sprytor = AES.new(key, AES.MODE_CBC, IV=key)

 # 獲取ts文件二進(jìn)制數(shù)據(jù)
 ts = requests.get(ts_url).content

 # 密文長(zhǎng)度不為16的倍數(shù),則添加二進(jìn)制"0"直到長(zhǎng)度為16的倍數(shù)
 while len(ts) % 16 != 0:
 ts += b"0"
 
 # 寫(xiě)入mp4文件
 with open(name, "ab") as file:
  # decrypt方法的參數(shù)需要為16的倍數(shù),如果不是,需要在后面補(bǔ)二進(jìn)制"0"
  file.write(sprytor.decrypt(ts)) 
 print(name, "下載完成")
          

到這里就下載完成了。

完整代碼:

            
import re
import requests
from Crypto.Cipher import AES


# 保存的mp4文件名
name = "dream_it_possible.mp4"

# m3u8文件的url
url = "http://www.jiuyi.info/static/video/secret/dream_it_possible.m3u8"


# 請(qǐng)求頭,不一定需要,看網(wǎng)站更改
headers = {
 "Referer": "http://www.jiuyi.info/video/dream_it_possible",
 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
     "(KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
 }

print("正在解析:" + url.split("/")[-1])

# 獲取m3u8文件內(nèi)容
r = requests.get(url)

# 通過(guò)正值表達(dá)式獲取key和ts的鏈接
k = re.compile(r"http://.*?\.key") # key的正則匹配
t = re.compile(r"http://.*?\.ts") # ts的正則匹配
key_url = k.findall(r.text)[0] # key的url
ts_urls = t.findall(r.text) # ts的url列表

# 下載key的二進(jìn)制數(shù)據(jù)
print("正在下載key")
key = requests.get(key_url).content

# 解密并保存ts
for ts_url in ts_urls:

 ts_name = ts_url.split("/")[-1]  # ts文件名

 # 解密,new有三個(gè)參數(shù),
 # 第一個(gè)是秘鑰(key)的二進(jìn)制數(shù)據(jù),
 # 第二個(gè)使用下面這個(gè)就好
 # 第三個(gè)IV在m3u8文件里URI后面會(huì)給出,如果沒(méi)有,可以嘗試把秘鑰(key)賦值給IV
 sprytor = AES.new(key, AES.MODE_CBC, IV=key)

 # 獲取ts文件二進(jìn)制數(shù)據(jù)
 print("正在下載:" + ts_name)
 ts = requests.get(ts_url).content

 # 密文長(zhǎng)度不為16的倍數(shù),則添加b"0"直到長(zhǎng)度為16的倍數(shù)
 while len(ts) % 16 != 0:
  ts += b"0"

 print("正在解密:" + ts_name)

 # 寫(xiě)入mp4文件
 with open(name, "ab") as file:
  # # decrypt方法的參數(shù)需要為16的倍數(shù),如果不是,需要在后面補(bǔ)二進(jìn)制"0"
  file.write(sprytor.decrypt(ts))
  print("保存成功:" + ts_name)
print(name, "下載完成")
          

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美日韩在线看 | 久久草视频这里只精品 | 亚洲午夜小视频 | 波多野结衣免费视频观看 | 亚洲精品午夜一区二区 | 波多野结衣 久久 | 最新日本中文字幕在线观看 | 第四色播日韩AV第一页 | 91免费影片 | 日韩一级a毛片欧美一级 | 欧美一区二区免费电影 | 男女性关系视频免费观看软件 | 国产综合在线视频 | com.色.www在线观看 | 亚洲国产精品久久人人爱 | 精品一区二区久久久久久久网站 | 天天操天天拍 | 亚洲天堂影院 | 最近最新中文字幕 | 一级视频在线免费观看 | pornoⅹxxxxhd麻豆| 成人av福利 | 三级网站在线播放 | 香港午夜三级a三级高清观看 | 精品国产精品三级精品av网址 | 成人偷拍片视频在线观看 | 日韩第一区 | 国产日韩欧美三级 | 欧美日韩精品一区二区三区视频 | 日本一二三区视频 | japanesemature乱子在线 | 成人精品福利 | 九九热国产视频 | 一区二区日韩精品 | 色综合色综合网色综合 | 天堂网成人 | 99久久视频 | 亚洲精品在线免费 | 精品一区二区久久久久久久网站 | 日本不卡在线观看免费v | 无码国产精品成人午夜视频 |