python 下载M3U8文件对应的视频

下载视频 ,并保存在脚本目录下对应的download目录

实测:python2.7 + win10

 

通过分析M3U8文件内的内容,实现此功能!

 

# -*- coding: utf-8 -*-
# Created on 2018/3/22


import os


import requests


"""
下载M3U8文件里的所有片段
"""




def download(url):
    download_path = os.getcwd() + "\download"
    if not os.path.exists(download_path):
        os.mkdir(download_path)
    all_content = requests.get(url).text  # 获取M3U8的文件内容
    file_line = all_content.split("\r\n")  # 读取文件里的每一行
    # 通过判断文件头来确定是否是M3U8文件
    if file_line[0] != "#EXTM3U":
        raise BaseException(u"非M3U8的链接")
    else:
        unknow = True  # 用来判断是否找到了下载的地址
        for index, line in enumerate(file_line):
            if "EXTINF" in line:
                unknow = False
                # 拼出ts片段的URL
                pd_url = url.rsplit("/", 1)[0] + "/" + file_line[index + 1]
                res = requests.get(pd_url)
                c_fule_name = str(file_line[index + 1])
                with open(download_path + "\\" + c_fule_name, 'ab') as f:
                    f.write(res.content)
                    f.flush()
        if unknow:
            raise BaseException("未找到对应的下载链接")
        else:
            print u"下载完成"




if __name__ == '__main__':
    download("http://hzresource.cdn.bcebos.com/hls/geruikldsl/hls.m3u8")

合并ts视频文件可使用windows内置的命令进行文件合并,

        try:
            s = r"copy /b  {0}{1}*.ts  {2}".format(download_path, os.sep, end_file_name)
            os.system(s)
            # download_path 下载文件的文件夹目录
            # end_file_name 合并后的文件的文件名
            #  删除小文件
            shutil.rmtree(download_path)
        except BaseException as e:
            print(e.args)

 也可以用Python读取所有需要合并的文件,重新写入一个新的视频文件即可

 

放一个多线程下载电视剧《庆余年》的项目: 可更改起始链接,从该网站下载其他电视 电影,

https://github.com/zdx1012/download_duodada

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
使用 Python 下载 M3U8 视频需要通过以下几个步骤: 1. 解析 M3U8 文件获取视频分片地址列表:M3U8 文件是一种包含视频分片地址的文本文件,我们需要通过解析 M3U8 文件获取视频分片地址列表。可以使用第三方库如 `m3u8` 进行解析,如下所示: ```python import m3u8 # 加载 M3U8 文件 m3u8_obj = m3u8.load('http://example.com/video.m3u8') # 获取分片地址列表 segments = m3u8_obj.segments ``` 2. 下载视频分片并保存到本地:遍历视频分片地址列表,使用 `requests` 库进行下载,并保存到本地文件中,如下所示: ```python import requests # 遍历分片地址列表,下载并保存到本地 for i, segment in enumerate(segments): url = segment.absolute_uri response = requests.get(url) with open(f'segment{i}.ts', 'wb') as f: f.write(response.content) ``` 其中,`segment{i}.ts` 是保存到本地的文件名,可以根据实际情况进行修改。 3. 合并视频分片成完整视频:将下载视频分片使用 `ffmpeg` 工具进行合并,可以使用 `subprocess` 模块调用系统命令实现,如下所示: ```python import subprocess # 合并视频分片 subprocess.call('ffmpeg -i "concat:segment0.ts|segment1.ts|segment2.ts" -c copy output.mp4', shell=True) ``` 其中,`concat:segment0.ts|segment1.ts|segment2.ts` 是视频分片文件名列表,多个文件用 `|` 分隔,`output.mp4` 是合并后的视频文件名,可以根据实际情况进行修改。 需要注意的是,下载和合并视频分片的过程可能比较耗时,需要根据分片数量和网络情况进行调整,以免出现网络超时等问题。同时,下载和使用视频可能涉及到版权等法律问题,请遵守相关法律法规。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值