1. 程式人生 > 其它 >下載咪咕視訊

下載咪咕視訊

最近想看紀錄片《綠色星球》,剛剛好在咪咕網站上找到這個視訊。就萌生了一個想法把這個視訊下載下來。

網址:https://m.hebeilaibang.com/bf-174799-1-1.html

網頁分析工具,很容易找到m3u8檔案。右邊紅框,框出來的就是一個個ts視訊檔案。統計了下時長為1:30:02的視訊,拆分成了4000多個小的ts視訊檔案。

那思路就是:

步驟1. 下載,開啟m3u8檔案。提取裡的ts檔案。

步驟2.下載ts檔案,合併為完整的視訊檔案。

步驟1程式碼:有些人就會問為啥不用requests,一開始就是使用的requests但是老是提示證書問題(ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed),短時間內沒有找到解決這個證書問題的辦法. 反正目標就是要下載ts檔案,能下載下來就行,這裡就直接使用了python的wget包。

先看看下載下來的m3u8檔案,是這個樣子的。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:2
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:1.303,
/VMDIR4CAA791091D21D23E63637080226F370/20220111/fRia4tyb/2850kb/hls/NhAPlV8p.ts
#EXTINF:1.2,
/VMDIR4CAA791091D21D23E63637080226F370/20220111/fRia4tyb/2850kb/hls/PKkwv5hd.ts
#EXTINF:1.2,
/VMDIR4CAA791091D21D23E63637080226F370/20220111/fRia4tyb/2850kb/hls/Ux79JcrZ.ts
#EXTINF:1.2,
/VMDIR4CAA791091D21D23E63637080226F370/20220111/fRia4tyb/2850kb/hls/HAhapIrq.ts
#EXTINF:1.2,
/VMDIR4CAA791091D21D23E63637080226F370/20220111/fRia4tyb/2850kb/hls/YDl5LAiY.ts
#EXTINF:1.2,
/VMDIR4CAA791091D21D23E63637080226F370/20220111/fRia4tyb/2850kb/hls/12fNJKSm.ts
#EXTINF:1.2,
/VMDIR4CAA791091D21D23E63637080226F370/20220111/fRia4tyb/2850kb/hls/plbmFStJ.ts

ts結尾的檔案是我們需要下載下來的。拼接完整的網址就可以下載下來了。這裡還有個問題,就是這些ts檔案命名是亂碼的(NhAPlV8p.ts)。需要給他整理個編號。

import wget

ts_list = []
web_url = "https://cdn2.bzjupinhang.com:65"

def read_file():#只留下ts檔案放到ts_list列表中。
    with open("index.m3u8") as files:
        for line in files:
            # print(type(line))
            if
line.endswith(".ts\n"): ts_list.append(line.strip("\n")) def download_ts():#拼接下載ts檔案的網址,使用wget下載,並對下載下來的視訊按順序進行編號。 for i in range(3695,len(ts_list)): print(web_url+ts_list[i]) ts_file = "{}.ts".format(i) wget.download(web_url+ts_list[i], out=ts_file) read_file() download_ts()

執行這段指令碼就是開始下載了。拼網速。下載完成以後進行合併。

import os

def heBingTsVideo(download_path,merge_path):
    all_ts = os.listdir(download_path)
    with open(hebing_path, 'wb+') as f:
        for i in range(len(all_ts)):
            ts_video_path = os.path.join(download_path, "{}.ts".format(i))
            f.write(open(ts_video_path, 'rb').read())
    print("合併完成!!")


download_path = "D:\\movie"
merge_path = "D:\\movie\\綠色星球.mp4"
heBingTsVideo(download_path,merge_path)