精华内容
下载资源
问答
  • 2020-05-21 13:34:06

    有时候在网页上面看到比较好的视频,但却不能下载

    今天get到了一个下载的方法,但是不能保证百分百成功

    步骤:

    1、网页中按“F12”键,进入检查界面

    2、在弹出的窗口中选择“network”(谷歌浏览器是“network”,edge浏览器是“网络”)

    3、将视频进度条拖到最后,并在窗口中找到视频的链接(一般为size最大的那个链接),右键“Open in new tab”

    4、此时打开的网页就是想要下载的视频,可以直接选中视频下载

    但是有时候会出现找不到视频链接的情况

    因为很多网页会对视频进行加密,比如网页使用了分段式加密,将视频分割成了多个ts文件,如果不觉得麻烦的话,可以将所有的ts文件下载下来,使用软件进行合并即可

    更多相关内容
  • 这是一个软件,用于下载网页FLV视频,很多网页视频无法下载,但是用这个软件就可以轻松解决这个问题
  • 下载 m3u8 加密或非加密视频,让你视频自由

    目录

    一、两者不同

    二、爬虫源码

    三、爬虫内容详解


    一、两者不同

    • m3u8 是一种基于 HTTP Live Streaming 文件视频格式,它主要是存放整个视频的基本信息和分片(Segment)组成。
    • 相信大家都看过m3u8格式文件的内容,我们直来对比一下有什么不同,然后教大家怎么用python多进程实现下载并且合并。
    • 非加密 的m3u8文件

    •  加密 的m3u8文件

    •  相信眼尖的小伙伴已经看出了2个内容的不同之处,对的,其实区别就在加密文件的第 5 行的 #EXT-X-KEY 的信息
    • 这个信息就是用来视频内容解密的,其实里面的内容大多是一段字符串,其实也就是解密时候的KEY
    • 那么这个怎么去解密呢,我们暂时不管,我们先来解释一下每行的意思
    • 第一行: #EXTM3U 声明这是一个m3u8的文件
    • 第二行: #EXT-X-VERSION 协议的版本号
    • 第三行: #EXT-X-MEDIA-SEQUENCE 每一个media URI 在 PlayList中只有唯一的序号,相邻之间序号+1
    • 第四行: #EXT-X-KEY  记录了加密的方式,一般是AES-128以及加密的KEY信息
    • 第五行: #EXTINF 表示这段视频碎片的持续时间有多久
    • 第六行: sA3LRa6g.ts 视频片段的名称,获取的时候需要拼接上域名,找到文件的正确的路径

    二、爬虫源码

    #!/usr/bin/env python
    # encoding: utf-8
    '''
    #-------------------------------------------------------------------
    #                   CONFIDENTIAL --- CUSTOM STUDIOS
    #-------------------------------------------------------------------
    #
    #                   @Project Name : 多进程M3U8视频下载助手
    #
    #                   @File Name    : main.py
    #
    #                   @Programmer   : Felix
    #
    #                   @Start Date   : 2020/7/30 14:42
    #
    #                   @Last Update  : 2020/7/30 14:42
    #
    #-------------------------------------------------------------------
    '''
    import requests, os, platform, time
    from Crypto.Cipher import AES
    import multiprocessing
    from retrying import retry
    
    class M3u8:
        '''
         This is a main Class, the file contains all documents.
         One document contains paragraphs that have several sentences
         It loads the original file and converts the original file to new content
         Then the new content will be saved by this class
        '''
        def __init__(self):
            '''
            Initial the custom file by self
            '''
            self.encrypt = False
            self.headers = {
                "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0"
            }
    
        def hello(self):
            '''
            This is a welcome speech
            :return: self
            '''
            print("*" * 50)
            print(' ' * 15 + 'm3u8链接下载小助手')
            print(' ' * 5 + '作者: Felix  Date: 2020-05-20 13:14')
            print(' ' * 10 + '适用于非加密 | 加密链接')
            print("*" * 50)
            return self
    
        def checkUrl(self, url):
            '''
            Determine if it is a available link of m3u8
            :return: bool
            '''
            if '.m3u8' not in url:
                return False
            elif not url.startswith('http'):
                return False
            else:
                return True
    
        def parse(self, url):
            '''
            Analyze a link of m3u8
            :param url: string, the link need to analyze
            :return: list
            '''
            container = list()
            response = self.request(url).text.split('\n')
            for ts in response:
                if '.ts' in ts:
                    container.append(ts)
                if '#EXT-X-KEY:' in ts:
                    self.encrypt = True
            return container
    
        def getEncryptKey(self, url):
            '''
            Access to the secret key
            :param url: string, Access to the secret key by the url
            :return: string
            '''
            encryptKey = self.request("{}/key.key".format(url)).content
            return encryptKey
    
        def aesDecode(self, data, key):
            '''
            Decode the data
            :param data: stream, the data need to decode
            :param key: secret key
            :return: decode the data
            '''
            crypt = AES.new(key, AES.MODE_CBC, key)
            plain_text = crypt.decrypt(data)
            return plain_text.rstrip(b'\0')
    
        def download(self, queue, sort, file, downPath, url):
            '''
            Download the debris of video
            :param queue: the queue
            :param sort: which number debris
            :param file: the link of debris
            :param downPath: the path to save debris
            :param url: the link of m3u8
            :return: None
            '''
            queue.put(file)
    
            baseUrl = '/'.join(url.split("/")[:-1])
    
            if self.encrypt:
                self.encryptKey = self.getEncryptKey(baseUrl)
    
            if not file.startswith("http"):
                file = baseUrl + '/' +file
    
            debrisName = "{}/{}.ts".format(downPath, sort)
    
            if not os.path.exists(debrisName):
                response = self.request(file)
                with open(debrisName, "wb") as f:
                    if self.encrypt:
                        data = self.aesDecode(response.content, self.encryptKey)
                        f.write(data)
                        f.flush()
                    else:
                        f.write(response.content)
                        f.flush()
    
        def progressBar(self, queue, count):
            '''
            Show progress bar
            :param queue: the queue
            :param count: the number count of debris
            :return: None
            '''
            print('---一共{}个碎片...'.format(count))
            offset = 0
            while True:
                offset += 1
                file = queue.get()
                rate = offset * 100 / count
                print("\r%s下载成功,当前进度%0.2f%%, 第%s/%s个" % (file, rate, offset, count))
                if offset >= count:
                    break
    
        @retry(stop_max_attempt_number=3)
        def request(self, url, params):
            '''
            Send a request
            :param url: the url of request
            :param params: the params of request
            :return: the result of request
            '''
            response = requests.get(url, params=params, headers=self.headers, timeout=10)
            assert response.status_code == 200
            return response
    
        def run(self):
            '''
            program entry, Input basic information
            '''
            downPath = str(input("碎片的保存路径, 默认./Download:")) or "./Download"
            savePath = str(input("视频的保存路径, 默认./Complete:")) or "./Complete"
            clearDebris = bool(input("是否清除碎片, 默认True:")) or True
            saveSuffix = str(input("视频格式, 默认ts:")) or "ts"
    
            while True:
                url = str(input("请输入合法的m3u8链接:"))
                if self.checkUrl(url):
                    break
    
            # create a not available folder
            if not os.path.exists(downPath):
                os.mkdir(downPath)
    
            if not os.path.exists(savePath):
                os.mkdir(savePath)
    
            # start analyze a link of m3u8
            print('---正在分析链接...')
            container = self.parse(url)
            print('---链接分析成功...')
    
            # run processing to do something
            print('---进程开始运行...')
            po = multiprocessing.Pool(30)
            queue = multiprocessing.Manager().Queue()
            size = 0
            for file in container:
                sort = str(size).zfill(5)
                po.apply_async(self.download, args=(queue, sort, file, downPath, url,))
                size += 1
    
            po.close()
            self.progressBar(queue, len(container))
            print('---进程运行结束...')
    
            # handler debris
            sys = platform.system()
            saveName = time.strftime("%Y%m%d_%H%M%S", time.localtime())
    
            print('---文件合并清除...')
            if sys == "Windows":
                os.system("copy /b {}/*.ts {}/{}.{}".format(downPath, savePath, saveName, saveSuffix))
                if clearDebris:
                    os.system("rmdir /s/q {}".format(downPath))
            else:
                os.system("cat {}/*.ts>{}/{}.{}".format(downPath, savePath, saveName, saveSuffix))
                if clearDebris:
                    os.system("rm -rf {}".format(downPath))
            print('---合并清除完成...')
            print('---任务下载完成...')
            print('---欢迎再次使用...')
    
    if __name__ == "__main__":
        M3u8().hello().run()

    三、爬虫内容详解

    • 初始化m3u8下载类

    if __name__ == "__main__":
        M3u8().hello().run()
    
    • hello方法

    def hello(self):
        '''
        This is a welcome speech
        :return: self
        '''
        print("*" * 50)
        print(' ' * 15 + 'm3u8链接下载小助手')
        print(' ' * 5 + '作者: Felix  Date: 2020-05-20 13:14')
        print(' ' * 10 + '适用于非加密 | 加密链接')
        print("*" * 50)
        return self

    • run方法

    • hello方法其实就是欢迎语,介绍了一些基本信息
    • 如果链式调用的话,必须返回 self,初学者需要注意
    def run(self):
        '''
        program entry, Input basic information
        '''
        downPath = str(input("碎片的保存路径, 默认./Download:")) or "./Download"
        savePath = str(input("视频的保存路径, 默认./Complete:")) or "./Complete"
        clearDebris = bool(input("是否清除碎片, 默认True:")) or True
        saveSuffix = str(input("视频格式, 默认ts:")) or "ts"
    
        while True:
        url = str(input("请输入合法的m3u8链接:"))
        if self.checkUrl(url):
            break
    
        # create a not available folder
        if not os.path.exists(downPath):
            os.mkdir(downPath)
    
        if not os.path.exists(savePath):
            os.mkdir(savePath)
    •  就是提示一些保存碎片的路径,合并完成后是否需要进行碎片清除
    • 保存的视频格式,默认是ts,因为ts一般的视频软件都可以打开,如果不放心可以输入mp4
    • 合法的连接这里调用了一个方法,checkUrl 其实就是检测下是否是合格的m3u8链接
    • 然后创建了一些不存在的文件夹
    def checkUrl(self, url):
        '''
        Determine if it is a available link of m3u8
        :return: bool
        '''
        if '.m3u8' not in url:
            return False
        elif not url.startswith('http'):
            return False
        else:
            return True
    •  这里我简单的判断了下链接是否是m3u8
    • 首先链接要是m3u8结尾的
    • 其次链接需要是http打头
    • 分析输入的链接

    # start analyze a link of m3u8
    print('---正在分析链接...')
    container = self.parse(url)
    print('---链接分析成功...')
    def parse(self, url):
        '''
        Analyze a link of m3u8
        :param url: string, the link need to analyze
        :return: list
        '''
        container = list()
        response = self.request(url).text.split('\n')
        for ts in response:
            if '.ts' in ts:
                container.append(ts)
            if '#EXT-X-KEY:' in ts:
                self.encrypt = True
        return container
    • 请求链接,判断是否是加密m3u8还是非加密
    • 将所有碎片文件进行返回
    • 打开多进程,开启进程池,加速下载速度

    # run processing to do something
    print('---进程开始运行...')
    po = multiprocessing.Pool(30)
    queue = multiprocessing.Manager().Queue()
    size = 0
    for file in container:
        sort = str(size).zfill(5)
        po.apply_async(self.download, args=(queue, sort, file, downPath, url,))
        size += 1
    
    po.close()
    • zfill方法,其实就是在数字前填充0,因为我希望下载的文件是00001.ts,00002.ts这样有序的,最后合并的时候才不会混乱 
    • queue 是多进程共享变量的一种方式,用来显示下载的进度条
    • download方法

    def download(self, queue, sort, file, downPath, url):
        '''
        Download the debris of video
        :param queue: the queue
        :param sort: which number debris
        :param file: the link of debris
        :param downPath: the path to save debris
        :param url: the link of m3u8
        :return: None
        '''
        queue.put(file)
    
        baseUrl = '/'.join(url.split("/")[:-1])
    
        if self.encrypt:
            self.encryptKey = self.getEncryptKey(baseUrl)
    
        if not file.startswith("http"):
        file = baseUrl + '/' +file
    
        debrisName = "{}/{}.ts".format(downPath, sort)
    
        if not os.path.exists(debrisName):
            response = self.request(file)
            with open(debrisName, "wb") as f:
                if self.encrypt:
                    data = self.aesDecode(response.content, self.encryptKey)
                    f.write(data)
                    f.flush()
                else:
                    f.write(response.content)
                    f.flush()
    • 一开始就加入队列,是为了防止文件之前已经存在的情况下,导致长度不对

    • 如果是加密m3u8就通过 getEncryptKey 去获取KEY值

    • 写入文件的时候如果是加密的,就将文件进行 aesDecode 方法解密,具体请看源码

    • 进度条显示

    def progressBar(self, queue, count):
        '''
        Show progress bar
        :param queue: the queue
        :param count: the number count of debris
        :return: None
        '''
        print('---一共{}个碎片...'.format(count))
        offset = 0
        while True:
            offset += 1
            file = queue.get()
            rate = offset * 100 / count
            print("\r%s下载成功,当前进度%0.2f%%, 第%s/%s个" % (file, rate, offset, count))
            if offset >= count:
                break    
    • 其实就是通过当前的下载到第几个碎片,和所有碎片的数量进行比较
    • 一旦大于等于总数的时候,就退出循环
    • 文件合并,碎片清除

    • 这里兼容了 window linux 下的合并清除命令
    • 是否清除,刚开始的选择中可设置
    # handler debris
    sys = platform.system()
    saveName = time.strftime("%Y%m%d_%H%M%S", time.localtime())
    
    print('---文件合并清除...')
    if sys == "Windows":
        os.system("copy /b {}/*.ts {}/{}.{}".format(downPath, savePath, saveName, saveSuffix))
        if clearDebris:
            os.system("rmdir /s/q {}".format(downPath))
    else:
        os.system("cat {}/*.ts>{}/{}.{}".format(downPath, savePath, saveName, saveSuffix))
            if clearDebris:
                os.system("rm -rf {}".format(downPath))
    print('---合并清除完成...')
    print('---任务下载完成...')
    print('---欢迎再次使用...')
    展开全文
  • Python下载M3U8加密视频示例

    万次阅读 多人点赞 2021-06-30 00:25:18
    大家好,我是小小明。...下面我们将使用Python下载m3u8格式的加密离线视频流。 游览器抓包过滤能够获取该影片的m3u8播放地址: 首先,测试一下该地址: import m3u8 headers = { "User-Agent": "Mozilla/

    大家好,我是小小明。

    最近看到几个视频网站的地址依然是m3u8格式,不禁有了使用python进行下载的想法,虽然下载m3u8格式视频的工具很多,但如果我们自行编码就能应对更多的情况。

    关于m3u8的基础知识可以参考:Python实时下载B站直播间视频(M3U8视频流)

    下面我们将使用Python下载m3u8格式的加密离线视频流。

    游览器抓包过滤能够获取该影片的m3u8播放地址:

    image-20210629233330429

    首先,测试一下该地址:

    import m3u8
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
    }
    
    playlist = m3u8.load(
        uri='https://vod8.wenshibaowenbei.com/20210628/g4yNLlI7/index.m3u8', headers=headers)
    playlist.data
    
    {'media_sequence': None,
     'is_variant': True,
     'is_endlist': False,
     'is_i_frames_only': False,
     'is_independent_segments': False,
     'playlist_type': None,
     'playlists': [{'uri': '/20210628/g4yNLlI7/1000kb/hls/index.m3u8',
       'stream_info': {'program_id': 1,
        'bandwidth': 1000000,
        'resolution': '1280x720'}}],
     'segments': [],
     'iframe_playlists': [],
     'media': [],
     'keys': [],
     'rendition_reports': [],
     'skip': {},
     'part_inf': {},
     'session_data': [],
     'session_keys': []}
    

    从结果看到,这是一个嵌套的地址。

    所以写个方法解析真实地址:

    import m3u8
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
    }
    
    
    def get_real_url(url):
        playlist = m3u8.load(uri=url, headers=headers)
        return playlist.playlists[0].absolute_uri
    
    
    real_url = get_real_url(
        'https://vod8.wenshibaowenbei.com/20210628/g4yNLlI7/index.m3u8')
    real_url
    
    'https://vod8.wenshibaowenbei.com/20210628/g4yNLlI7/1000kb/hls/index.m3u8'
    

    解析真实地址的加密key:

    playlist = m3u8.load(uri=real_url, headers=headers)
    key = playlist.keys[-1]
    print(key.uri, key.method, key.iv)
    
    https://ts8.hhmm0.com:9999/20210628/g4yNLlI7/1000kb/hls/key.key AES-128 None
    

    可以看到密钥下载地址和加密类型。

    使用request下载密钥:

    import requests
    
    r = requests.get(playlist.keys[0].uri, headers=headers)
    key = r.content
    key
    
    b'7ec5143edebbc899'
    

    可以单线程直接下载视频:

    import time
    
    n = len(playlist.segments)
    size = 0
    start = time.time()
    for i, seg in enumerate(playlist.segments, 1):
        r = requests.get(seg.absolute_uri, headers=headers)
        data = r.content
        data = AESDecrypt(data, key=key, iv=key)
        size += len(data)
        with open("reusult.mp4", "ab") as f:
            f.write(data)
        print(f"\r下载进度({i}/{n}),已下载:{size/1024/1024:.2f}MB,下载已耗时:{time.time()-start:.2f}s", end=" ")
    
    下载进度(1435/1435),已下载:424.69MB,下载已耗时:850s
    

    单线程下载,好处是不会产生多余的文件,缺点是速度太慢了,一个视频下载了10多分钟。

    下面我们整理一下完整的代码:

    单线程视频下载的完整代码

    import time
    from Crypto.Util.Padding import pad
    from Crypto.Cipher import AES
    import requests
    import m3u8
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
    }
    
    
    def get_real_url(url):
        playlist = m3u8.load(uri=url, headers=headers)
        return playlist.playlists[0].absolute_uri
    
    
    def AESDecrypt(cipher_text, key, iv):
        cipher_text = pad(data_to_pad=cipher_text, block_size=AES.block_size)
        aes = AES.new(key=key, mode=AES.MODE_CBC, iv=key)
        cipher_text = aes.decrypt(cipher_text)
        return cipher_text
    
    
    def download_m3u8_video(url, save_name):
        real_url = get_real_url(url)
        playlist = m3u8.load(uri=real_url, headers=headers)
        key = requests.get(playlist.keys[-1].uri, headers=headers).content
    
        n = len(playlist.segments)
        size = 0
        start = time.time()
        for i, seg in enumerate(playlist.segments, 1):
            r = requests.get(seg.absolute_uri, headers=headers)
            data = r.content
            data = AESDecrypt(data, key=key, iv=key)
            size += len(data)
            with open(save_name, "ab" if i != 1 else "wb") as f:
                f.write(data)
            print(
                f"\r下载进度({i}/{n}),已下载:{size/1024/1024:.2f}MB,下载已耗时:{time.time()-start:.2f}s", end=" ")
    
    
    download_m3u8_video('https://vod8.wenshibaowenbei.com/20210628/g4yNLlI7/index.m3u8', '走进家门.mp4')
    

    多线程下载改造

    对于多线程,由于下载的文件可能出现间断,所以我们不能直接追加到目标视频中,可以先下载下来,最后统一合并并删除。

    先创建ts视频下载的方法:

    import os
    import requests
    
    
    def download_ts(url, key, i):
        r = requests.get(url, headers=headers)
        data = r.content
        data = AESDecrypt(data, key=key, iv=key)
        with open(f"tmp/{i:0>5d}.ts", "ab") as f:
            f.write(data)
        print(f"\r{i:0>5d}.ts已下载", end="  ")
    
    
    if not os.path.exists("tmp"):
        os.mkdir('tmp')
    

    任意下载一个片段测试一下:

    import requests
    import m3u8
    
    
    def get_real_url(url):
        playlist = m3u8.load(uri=url, headers=headers)
        return playlist.playlists[0].absolute_uri
    
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
    }
    real_url = get_real_url(
        'https://vod8.wenshibaowenbei.com/20210628/g4yNLlI7/index.m3u8')
    playlist = m3u8.load(uri=real_url, headers=headers)
    key = requests.get(playlist.keys[-1].uri, headers=headers).content
    
    download_ts(playlist.segments[0].absolute_uri, key, 1)
    
    00001.ts已下载  
    

    检查该片段可以正常播放。

    然后执行以下方法即可10个线程同时一起下载:

    from concurrent.futures import ThreadPoolExecutor
    
    with ThreadPoolExecutor(max_workers=10) as pool:
        for i, seg in enumerate(playlist.segments):
            pool.submit(download_ts, seg.absolute_uri, key, i)
    

    image-20210630001054694

    经过一分20秒左右的时间,所有视频流已经全部下载完毕,比单线程的速度快了不止10倍。

    image-20210630001358092

    最后我们实现文件的合并和ts临时文件清除:

    import glob
    
    with open('video.mp4', 'wb') as fw:
        files = glob.glob('tmp/*.ts')
        for file in files:
            with open(file, 'rb') as fr:
                fw.write(fr.read())
                print(f'\r{file}已合并!总数:{len(files)}', end="     ")
            os.remove(file)
    

    执行后,已经在1秒左右时间合并并清除完临时文件。

    多线程下载的完整代码

    import glob
    from concurrent.futures import ThreadPoolExecutor
    import m3u8
    import os
    import requests
    from Crypto.Util.Padding import pad
    from Crypto.Cipher import AES
    import requests
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
    }
    
    
    def download_ts(url, key, i):
        r = requests.get(url, headers=headers)
        data = r.content
        data = AESDecrypt(data, key=key, iv=key)
        with open(f"tmp/{i:0>5d}.ts", "ab") as f:
            f.write(data)
        print(f"\r{i:0>5d}.ts已下载", end="  ")
    
    
    def get_real_url(url):
        playlist = m3u8.load(uri=url, headers=headers)
        return playlist.playlists[0].absolute_uri
    
    
    def AESDecrypt(cipher_text, key, iv):
        cipher_text = pad(data_to_pad=cipher_text, block_size=AES.block_size)
        aes = AES.new(key=key, mode=AES.MODE_CBC, iv=key)
        cipher_text = aes.decrypt(cipher_text)
        return cipher_text
    
    
    def download_m3u8_video(url, save_name, max_workers=10):
        if not os.path.exists("tmp"):
            os.mkdir('tmp')
    
        real_url = get_real_url(url)
        playlist = m3u8.load(uri=real_url, headers=headers)
        key = requests.get(playlist.keys[-1].uri, headers=headers).content
    
        with ThreadPoolExecutor(max_workers=max_workers) as pool:
            for i, seg in enumerate(playlist.segments):
                pool.submit(download_ts, seg.absolute_uri, key, i)
    
        with open(save_name, 'wb') as fw:
            files = glob.glob('tmp/*.ts')
            for file in files:
                with open(file, 'rb') as fr:
                    fw.write(fr.read())
                    print(f'\r{file}已合并!总数:{len(files)}', end="     ")
                os.remove(file)
    
    
    download_m3u8_video('https://vod8.wenshibaowenbei.com/20210628/g4yNLlI7/index.m3u8', '走进家门.mp4')
    
    展开全文
  • 如何提取网页中的blob加密视频

    万次阅读 2018-09-27 13:29:41
    如何提取网页中的blob加密视频 一、场景 一些网站的视频为了防止下载,通常会采用blob加密的做法,打开浏览器控制台F12后,是这样的: 视频网址:“blob:https://us.flukecal.com/ea2b5cdf-7e15-48xxxxxxx” 这样...

    如何提取网页中的blob加密视频


    一、场景


    一些网站的视频为了防止下载,通常会采用blob加密的做法,打开浏览器控制台F12后,是这样的:
    video地址

    视频网址:“blob:https://us.flukecal.com/ea2b5cdf-7e15-48xxxxxxx

    这样是无法下载的,即使去掉blob前缀,搜索之后会报错或找不到,这就很尴尬了。。。

    肿么办????

    二、插件工具,了解一下


    这里需要两个插件:一个是网页视频获取插件、一个是M3U8视频下载工具;

    (1)谷歌应用商店搜索:Adobe HDS / HLS Video Saver
    Adobe HDS / HLS Video Saver

    • 用途:获取视频的M3U8地址;

    (2)M3U8下载工具:M3u8 Downloader
    M3u8 Downloader

    这类工具有很多,暂时我用的是这个,其他的自行试用???。

    • 用途:M3U8视频下载工具

    三、操作


    (1)获取M3U8地址
    在这里插入图片描述

    (2)下载M3U8视频

    在这里插入图片描述

    • 只是为了放一张gif图,?
      在这里插入图片描述

    • 就酱紫了……

    最后,StackOverflow是个好地方。???

    并不会写代码的瓜皮

    展开全文
  • 1.在线视频加密播放(加密视频观看) 2.视频播放密码/设定观看密码功能,对视频文件设置观看权限,划分学员和游客,学员输入正确的密码即可观看视频。 STEP1 登录酷播云管理平台,选择“视频列表”,点选对应...
  • 3、加密上传在线观看,加密视频同步上传后台,用户无需下载即可在线播放,文件不落地 4、账号授权实时控制,仅需一个授权账号即可控制课程授权,管理 后台随时收回授权 多种加密方式 一、高强度视频重编码加密 ...
  • 关于如何下载m3u8加密视频

    千次阅读 2021-09-23 12:02:47
    关于如何下载m3u8加密视频,简单一点说m3u8加密技术就是将原视频分割成n个.ts文件,并用key文件对每一个.ts文件加密,其中m3u8文件里面存储了key文件和所有的.ts文件的地址,所以我们要解密视频需要以上三种文件,...
  • 酷播V4.0网页播放器(加密版),基于酷播V4,只是对视频地址做了base64加密处理,虽然这是一项简单的加密,但对于防盗链,还是有点点用的。有兴趣的朋友,可以下载,演示...
  • 下载网页视频方法

    2021-08-03 12:09:38
    然后我们可以根据视频大小来判断哪个是自己需要下载的文件 方法二 利用Google的扩展程序Video Downloader来下载 当你打开视频或者扩展程序发现视频时会出现图标 当然也可以直接点击 同理fixfox也同样适用 如遇到...
  • 如何下载 blob 加密https://视频

    千次阅读 2022-03-12 19:30:42
    首先下载m3u8文件,在当前视频页面按f12打开调试工具,有些笔记本需要按住fn点击网络,按f5或者重新刷新网页,如下图操作: 二. 在过滤器这里输入m3u8,如下图所示: 找到这些带序列号的.ts的视频文件,选择...
  • 网页浏览中,会遇到一些视频blod视频,被加密下载方法 需要的工具 猫爪浏览器插件(支持浏览器,) 抓取视频 1、安装猫抓后,打开要下载视频网页,点击猫抓就会开始分析当前页面的资源; 2、找到ts...
  • 使用python,下载加密的流媒体m3u8视频文件,爬虫获取电影资源。M3U8是Unicode版本的M3U,用UTF-8编码。m3u8文件其实是 HTTP Live Streaming(缩写为`HLS`)协议的部分内容。HLS 的工作原理是把整个流分成多个小的...
  • 需要下载视频、或ZGZF网的视频 例如:ZGZF网新闻联播视频 问题描述: 虽然有些视频可以通过PC客户端下载,但有些是搜索不到的。用普通的抓链接的方法,下载下来又是花屏。比如这种效果 原因分析: 你直接...
  • 简单隐藏加密视频地址,以防止用户下载,采用js 调用播放器:引用js文件:language="javascript"type="text/javascript">// JScript 文件function selplay(ypurl){document.write("classid=CLSID:22d6f312-b0f6-11d0-94...
  • x一些网站的视频为了防止下载,通常会...这里需要两个插件:一个是网页视频获取插件、一个是M3U8视频下载工具; (1)谷歌应用商店搜索:Adobe HDS / HLS Video Saver 先使用,现在要收费了 用途:获取视频的...
  • 加密视频网站提取视频的实现

    万次阅读 2020-04-06 15:55:46
    Warning:本文章旨在进行技术性探讨,不作为爬虫手段...可惜,国内不能直接访问,我哥问我从技术的角度能否抓取视频。作为一个android工程师,这个提议引起了我的兴趣。 话不多说,上个视频网站实现我们的思路。...
  • 加密系统视频提取教程搜集

    热门讨论 2011-11-20 15:00:55
    40位机器码的天狼星三代破解教程.rar 破解天狼星加密.rar 屏幕录像专家加密视频提取教程.rar 破解网安VIP教程动画.rar 加密视频的提取教程+工具.rar 天狼星破解去除限制全套+加密器源码+工具.rar
  • blob加密视频源地址截图 1 blob加密视频源地址截图 2 [ 视频安全 ] 相关原创文章 教育教学类视频如何处理加密与安全(组图) 防止360浏览器小窗下载视频 视频安全之视频播放密码功能(设置观看密码功能...
  • 视频加密的方法介绍

    千次阅读 2022-02-16 16:59:49
    VRM加密:将视频进行切片、对碎片逐一进行混淆式加密,包括AES128加密、XOR加密、关键帧错序等。
  • 功能强大安全性最好的视频加密工具。 支持各种视频的高速编码加密与高速解码播放,加密后的文件自带解码器和播放器;可以加密各种视频音频格式文件(wmv,avi,mpg,rm,rmvb,mp4,flv,vob等),加密后的文件可以通过离线...
  • 阿里云私有加密视频下载解析 2021年5月20日 获取训练营课程视频和资料 2021年5月9日 获取账户下所有课程 加入章节历史下载记录 排除某些课程 2020年12月11日 解决签名不匹配问题 跳过未发布的课程视频 调整代码结构 ...
  • 该源码为数据采集脚本,并不附带界面跟后台管理 ...1、视频搜索 2、用户作品 3、视频评论 4、用户基础信息 5、其他的自己开拓 注意: 1、本源码只供学习思路参考,请勿用于违规操作,否则后果自负
  • 某网站视频加密的wasm略谈(二)

    千次阅读 2021-10-30 17:04:50
    某网站视频加密的wasm略谈(二)网页反录制第一种录制方式第二种录制方式网页加密发展趋势对于视频加密:对于代码的加密网页反录制 上一篇主要讲的是解密方向,那么这一篇主要讲的就是加密的方向。当逆向解密...
  • APP平台是怎样实现视频加密呢?

    千次阅读 2022-01-11 10:48:09
    我们可以利用给自己视频加密的方式来保护自己视频的安全性,加密的方式有很多种,常见的就是添加视频视频单独加密发给学员,这种对于没有APP平台的视频拥有者来说是比较方便的,但是使用APP这种方式的,我们要如何...
  • 1.前言爬取视频的时候发现,现在的视频都是经过加密(m3u8),不再是mp4或者avi链接直接在网页显示,都是经过加密形成ts文件分段进行播放。今天就教大家如果通过python爬取下载m3...
  • 在线视频加密破解工具
  • 6、灵活的绑定选项,加密视频可以绑定主板、硬盘,显卡、网卡、U盘等; 7、灵活的试播文件制作功能; 8、灵活的业务接口,可以结合您的网站、结合网银、结合支付宝,淘宝、结合Discuz! 论 坛; 9、加密后的视频无法...
  • 常见3种视频加密原理知多少

    万次阅读 2019-01-23 16:50:24
    视频加密是对某些自有版权的视频进行加密处理,用户只有在一定的条件下才能获得视频的观看权。比如对于教育视频加密后,只有学员才能观看,每个学员都有自己的唯一账号。或者说设定在一定的时间内可以无限次观看,...
  • DRM-X 4.0 HTML网页加密教程通过DRM-X4.0,您可以对网页内容进行加密,包括HTML, css, Java Script 和 图片,并且可以控制允许哪些用户查看您的网页内容,禁止复制,禁止打印和截屏,当在过期时不允许查看网页内容。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,828
精华内容 12,731
关键字:

网页加密视频下载

友情链接: wince-Lib.rar