下载咪咕视频

最近想看纪录片《绿色星球》,刚刚好在咪咕网站上找到这个视频。就萌生了一个想法把这个视频下载下来。

网址: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)

 

posted @ 2022-01-15 11:58  ken-yu  阅读(1642)  评论(0编辑  收藏  举报