關(guān)于網(wǎng)頁(yè)視頻下載方法(僅針對(duì)存在index.m3u8)
一、使用工具。
必備工具:迅雷、ffmpeg、python環(huán)境
選用工具:貓抓插件
二、獲取m3u8、key和ts文件。
像騰訊課堂希望下載的課
1.下載m3u8文件。
首先使用【貓抓視頻下載】的瀏覽器拓展,可以清晰地看到,它不抓到的內(nèi)容。我們需要的就是這個(gè) .m3u8 的文件。
ps:其中可以也將其中的一個(gè)ts文件下下來(lái),主要需要的是它的下載連接地址。
(當(dāng)然也可以用f12,然后點(diǎn)擊網(wǎng)絡(luò)查看監(jiān)控到的元素,復(fù)制其中的URL,在新的頁(yè)面粘貼就可以下載。ps:沒(méi)有監(jiān)控到可以試著刷新一下。)
2.解析m3u8文件。
用記事本打開(kāi)m3u8文件。
通過(guò)上圖可以看到,這個(gè)m3u8文件是經(jīng)過(guò)加密的,這個(gè)key的url就是加密的路徑。所以我們要將它復(fù)制,在瀏覽器打開(kāi)并下載。
部分m3u8文件顯示的key文件路徑是不全的,所以就得通過(guò)f12去尋找key的url,又或者通過(guò)剛才下載到的ts文件,然后通過(guò)其的下載連接,比如這樣:
假設(shè)它的url是這樣:
https://1258712167.vod2.myqcloud.com/25121a6avodtransbj1258712167/ccc514e9387702297477389539/drm/v.f30742_0.ts
那么 v.f307422_0.ts 文件前面的就是它們的前綴,要復(fù)制出來(lái),拼接好。就如上圖所示的ts文件也是不完整的url的路徑,所以需要補(bǔ)全。(當(dāng)然我這里講拼接key的前綴只是示范,m3u8文件里已經(jīng)有完整的url了,所以我們要把它下下來(lái)。)
3.拼接ts文件完整路徑。
由于迅雷復(fù)制打包url下載限制只能是1000個(gè)。所以,我們需要在拼接url的同時(shí),還要對(duì)它分開(kāi)成各個(gè)文件夾進(jìn)行下載。在這里我采用python進(jìn)行切片打包。
首先打開(kāi)m3u8文件,之后在line中填入需要拼接的前綴內(nèi)容。而i[0] == ‘v’,則是判定是ts文件的特征,所有的ts文件的前綴都是’v’。(見(jiàn)過(guò)有些是’\'。)
with open(r'C:\Users\victo\Desktop\voddrm.token.dWluPTI0MjQ1MTUyOTE7ZXh0PTtza2V5PUB6OUl6MWJoZnc7Y2lkPTI3Njk2MDk7dGVybV9pZD0xMDI4Nzc5OTI7dm9kX3R5cGU9MDtwbGF0Zm9ybT0z.v.f30742.m3u8') as f:
a = []
for i in f.readlines():
a.append(i)
def split_ts(a):
line = 'https://1258712167.vod2.myqcloud.com/25121a6avodtransbj1258712167/ccc514e9387702297477389539/drm/'
ts = []
for i in a:
if i[0] == 'v':
i = line + i
ts.append(i)
return ts
ts = split_ts(a)
def save_href(ts,i):
print(i)
with open(r'C:\Users\victo\Desktop\番{}.txt'.format(i), 'w') as w:
w.writelines(ts)
w.close()
def thousand_href(ts):
i = 0
if len(ts) > 1000:
i = 1
save_href(ts[:1000],i)
if len(ts[1000:]) > 1000:
i = 2
save_href(ts[1000:2000], i)
if len(ts[2000:]) > 1000:
i = 3
save_href(ts[2000:3000], i)
if len(ts[3000:]) > 1000:
i = 4
save_href(ts[3000:4000], i)
if len(ts[4000:]) > 1000:
i = 5
save_href(ts[4000:5000], i)
if len(ts[5000:]) > 1000:
i = 6
save_href(ts[5000:6000], i)
if len(ts[6000:]) > 1000:
i = 7
save_href(ts[6000:7000], i)
if len(ts[7000:]) > 1000:
i = 8
save_href(ts[7000:8000], i)
if len(ts[8000:]) > 1000:
i = 9
save_href(ts[8000:9000], i)
if len(ts[9000:]) > 1000:
i = 10
save_href(ts[9000:10000], i)
if len(ts[10000:]) > 1000:
i = 11
save_href(ts[10000:11000], i)
save_href(ts[1000*(i):], i+1)
thousand_href(ts)
拼接完成后,打開(kāi)文本,全選復(fù)制,如果開(kāi)啟迅雷會(huì)自動(dòng)彈出新建任務(wù)組,合并任務(wù)即可。
現(xiàn)在新的問(wèn)題來(lái)了,下載下來(lái)的ts文件,迅雷是采取,以’?'作為文件名的分割,這樣會(huì)導(dǎo)致ts文件名都是一樣的,重復(fù)文件名的下載自然會(huì)在后綴出現(xiàn)下標(biāo)。
(不過(guò)一般m3u8文件里記錄的ts文件都有自己的字符串名字的……吧?)
因此我這里對(duì)m3u8所有ts文件名進(jìn)行了處理,所有ts文件以數(shù)字作為命名,進(jìn)行了一次重命名。
那么相對(duì)應(yīng)的,下載下來(lái)的文件也要重命名。一共5個(gè)文件夾,4125個(gè)ts文件。重命名腳本:
import os
path = 'D:\cookies\迅雷下載\視頻任務(wù)組_20230412_1509'
files = os.listdir(path)
newfiles = []
#第一個(gè):0;第二個(gè):1000;第三個(gè):2000.
order = 2000
for file in files:
print(file)
if "(" in file:
num = int(file.replace('v.f30742_0(','').replace(').ts','')) + order +1
newfiles.append(str(num)+'.ts')
else:
num = str(0+order+1)
newfiles.append(num+'.ts')
for i in range(len(files)):
os.rename(path+'\\'+files[i],path+'\\'+newfiles[i])
4.調(diào)用ffmepg合并所有ts文件生成mp4
-
CMD打開(kāi)命令提示符。
-
跳轉(zhuǎn)到匯總所有ts文件的文件夾目錄下。
-
輸入命令:
ffmpeg -allowed_extensions ALL -i index.m3u8 -c copy D:\cookies\迅雷下載\kecheng.mp4
最后成功獲得這節(jié)課程的文件!
5.結(jié)語(yǔ)。
以上的方法針對(duì)加密的視頻爬取下載的性價(jià)比才高,對(duì)于那些沒(méi)有加密的視頻文件,其實(shí)直接用Neat Download Manager,或者IDM,又或者手機(jī)QQ瀏覽器都可以下載。
參考文章
ffmpeg詳細(xì)安裝教程:https://zhuanlan.zhihu.com/p/324472015
加密的m3u8、ts文件合并:https://www.cnblogs.com/f-ck-need-u/p/9033988.html
手把手教你下載瀏覽器上的視頻:https://zhuanlan.zhihu.com/p/464729860文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-464412.html
關(guān)于Neat Download Manager可以參考:https://zhuanlan.zhihu.com/p/187570397文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-464412.html
到了這里,關(guān)于關(guān)于網(wǎng)頁(yè)視頻下載方法(僅針對(duì)存在index.m3u8)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!