说明

今天为了要下载一部不可告人的影片,那个影片用的是m3u8,网上找来找去都没找到合适的下载器,就麻烦一点自己抓一下然后写了一个了,这个方法没点技术还真的搞不了。

下面的代码就是我在看了一下m3u8文件之后写的,整个影片被分为了262份,命名格式为index[数字].ts,所以我们这里可以直接使用for来进行。然后那个m3u8文件里面有标明加密AES128,不过key也是储存在了文件里面,不过这里就不公开了。

因为只需要下载一部影片的关系,没加密的处理方法我就不写了,然后使用这个代码的前提是我已经读了整个m3u8档案了,所以其实这个代码是没办法直接读取m3u8的,只能手动修改里面的网址,数字等资料。

下载之后的切片影片都会储存在files里面,需要手动合成一下噢!(建议使用linux的ffmpeg指令,win系统里面使用copy好像会有些问题)

代码

import os
import shutil
import requests
import datetime
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

def download():
    # 指定储存目录
    download_path = os.getcwd() + "/files"
    if not os.path.exists(download_path):
        os.mkdir(download_path)

    key = "加密的KEY"
    url = "网址不公开噢!自己的网址"

    for i in range(262):
        filename = "index" + str(i) + ".ts"
        pd_url = url + filename
        res = requests.get(pd_url)
        if(len(key)):
            cryptor = AES.new(key, AES.MODE_CBC, key)
            with open(os.path.join(download_path, filename), 'ab') as f:
                f.write(cryptor.decrypt(res.content))
        else:
            print("无加密key")


if __name__ == '__main__':
    download()