百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python学习项目练习——m3u8视频下载

off999 2024-09-16 00:43 41 浏览 0 评论

很多时候你想下载视频没有下载按钮,那么你该怎么做呢?Python学习完以后你可以通过Python下载这些视频。今天就分享一下m3u8视频如何用Python下载。

查找视频

找到视频的源文件,这是你要抓取文件的第一步。这时,你会发现浏览器的开发者工具有多么棒!

电脑浏览器打开要下载电影的页面,按下F12打开浏览器开发工具,选择网络/Network,这里可以看到网站请求的所有数据

刷新页面,找到含有.m3u8的请求数据流,可以点击开发者工具栏,按ctrl+F查找.m3u8文件。然后打开标头/Headers,查看请求地址。

可以通过预览/Response查看.m3u8文件包含哪些数据,将这些地址复制下来,就是我们要下载的视频数据,这些视频一般都是.ts格式的,就是视频片段。你可以一条一条下载下来,但既然我们说了要用Python下载,那么,接下来的事情我们用代码实现。

ts视频下载

我们将预览内容Ctrl+A全选,然后复制,粘贴到新建的txt文件中,然后处理下载问题。

import re

# 读取文件,file就是保存复制内容的txt文件
# lfile是获得复制视频的顺序list_file
# dfile是要下载的视频链接 download_file
# url 是视频的url路径前缀
def read(file, lfile, dfile, url):
    #读取复制内容
    with open(f'./{file}', 'r+', encoding='utf-8') as r:
        # 按行读取
        ts_file = r.readlines()
        # 正则模块,获取复制文件中的所有ts文件
        re_ts =  re.compile(r'\w+\.ts')
        # 如果ts文件有?后带的参数,也要识别
        re_ts_data = re.compile(r'\w+\.ts?\w+.+|\w+\.ts')
        # 正则模块,url正则
        re_ts_url = re.compile(r'http://\w+.+|https://\w+.+')

        # 创建ts文件顺序文件
        with open(f'{lfile}', 'a', encoding='utf-8') as w:
            for i in ts_file:
                try:
                    # 查找所有的ts文件名
                    w.write(f'file {re.findall(re_ts, i)[0]}\n')
                except:
                    pass
                # 创建ts下载文件
                with open(f'{dfile}', 'a', encoding='utf-8') as f:
                    try:
                        # 创建下载文件时要在文件中添加url前缀
                        f.write(f'{url}{re.findall(re_ts_data, i)[0]}\n')
                    except:
                        pass
                

read('a.txt', 'list.txt', 'down.txt', 'https://www.xxx.com/')

这是对复制内容的处理,方便后面的继续进行,这时候我们得到了三个文件,一个是前面创建的txt文件,后面两个是程序运行时获得的文件。注意,如果要创建新的下载视频,这里要修改read()传入的参数。因为lfile和dfile的打开权限是'a',再次执行会在原来文件内继续添加内容,会造成之前的内容重复。

import os
import re
import wget # 这个库需要通过命令pip install wget下载

# 创建下载,dir是下载文件的文件夹名称,url是下载文件
def url_down(dir, url):
    try:
        # 创建文件夹
        os.mkdir(dir)
    except:
        pass
    # 下载文件
    wget.download(url, out=f'./{dir}/')

if __name__ == '__main__':
    # 读取down.txt文件中的ts视频的url
    with open('down.txt', 'r+', encoding='utf-8') as r:
        txt_list = r.readlines()
        # 创建视频链接url的正则模块
        url_get = re.compile(r'http://\w+.+|https://\w+.+')
        for i in txt_list:
            # 查找ts的url
            k = re.findall(url_get, i)
            # 因为文件中可能存在空行或者非url行,所以加个校验
            if k == []:
                pass
            else:
                # 下载
                url_down('视频', k[0])

ts视频转mp4

当你执行完成后发现会有很多视频片段,不方便查看和使用,所以,我们要把这些ts视频片段合并成一整段的mp4视频格式。

这里用到一个工具--ffmpeg,一款非常好用处理音视频的工具包。

下载完成后,将文件解压,然后将bin文件的路径添加到系统环境中,命令行执行ffmpeg -version查看是否安装成功。

# 这是python一个终端操作工具
import subprocess
import os
def ts_mp4(filename):
    ts_path = os.path.join(os.getcwd(), '视频/')
    try:
        os.mkdir('mp4视频')
    except:
        pass
    mp4_path = os.path.join(os.getcwd(), 'mp4视频/')
    cmdline = f"ffmpeg -f concat -i {ts_path}list.txt -c copy {mp4_path}{filename}.mp4"
    subprocess.call(cmdline, shell=True)
    print(f'{filename}视频转换成功!')
ts_mp4('new')



相关推荐

阿里云国际站ECS:阿里云ECS如何提高网站的访问速度?

TG:@yunlaoda360引言:速度即体验,速度即业务在当今数字化的世界中,网站的访问速度已成为决定用户体验、用户留存乃至业务转化率的关键因素。页面加载每延迟一秒,都可能导致用户流失和收入损失。对...

高流量大并发Linux TCP性能调优_linux 高并发网络编程

其实主要是手里面的跑openvpn服务器。因为并没有明文禁p2p(哎……想想那么多流量好像不跑点p2p也跑不完),所以造成有的时候如果有比较多人跑BT的话,会造成VPN速度急剧下降。本文所面对的情况为...

性能测试100集(12)性能指标资源使用率

在性能测试中,资源使用率是评估系统硬件效率的关键指标,主要包括以下四类:#性能测试##性能压测策略##软件测试#1.CPU使用率定义:CPU处理任务的时间占比,计算公式为1-空闲时间/总...

Linux 服务器常见的性能调优_linux高性能服务端编程

一、Linux服务器性能调优第一步——先搞懂“看什么”很多人刚接触Linux性能调优时,总想着直接改配置,其实第一步该是“看清楚问题”。就像医生看病要先听诊,调优前得先知道服务器“哪里...

Nginx性能优化实战:手把手教你提升10倍性能!

关注△mikechen△,十余年BAT架构经验倾囊相授!Nginx是大型架构而核心,下面我重点详解Nginx性能@mikechen文章来源:mikechen.cc1.worker_processe...

高并发场景下,Spring Cloud Gateway如何抗住百万QPS?

关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。高并发场景下网关作为流量的入口非常重要,下面我重点详解SpringCloudGateway如何抗住百万性能@m...

Kubernetes 高并发处理实战(可落地案例 + 源码)

目标场景:对外提供HTTPAPI的微服务在短时间内收到大量请求(例如每秒数千至数万RPS),要求系统可弹性扩容、限流降级、缓存减压、稳定运行并能自动恢复。总体思路(多层防护):边缘层:云LB...

高并发场景下,Nginx如何扛住千万级请求?

Nginx是大型架构的必备中间件,下面我重点详解Nginx如何实现高并发@mikechen文章来源:mikechen.cc事件驱动模型Nginx采用事件驱动模型,这是Nginx高并发性能的基石。传统...

Spring Boot+Vue全栈开发实战,中文版高清PDF资源

SpringBoot+Vue全栈开发实战,中文高清PDF资源,需要的可以私我:)SpringBoot致力于简化开发配置并为企业级开发提供一系列非业务性功能,而Vue则采用数据驱动视图的方式将程序...

Docker-基础操作_docker基础实战教程二

一、镜像1、从仓库获取镜像搜索镜像:dockersearchimage_name搜索结果过滤:是否官方:dockersearch--filter="is-offical=true...

你有空吗?跟我一起搭个服务器好不好?

来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。昨天闲的没事的时候,随手翻了翻写过的文章,发现一个很严重的问题。就是大多数时间我都在滔滔不绝的讲理论,却很少有涉及动手...

部署你自己的 SaaS_saas如何部署

部署你自己的VPNOpenVPN——功能齐全的开源VPN解决方案。(DigitalOcean教程)dockovpn.io—无状态OpenVPNdockerized服务器,不需要持久存储。...

Docker Compose_dockercompose安装

DockerCompose概述DockerCompose是一个用来定义和管理多容器应用的工具,通过一个docker-compose.yml文件,用YAML格式描述服务、网络、卷等内容,...

京东T7架构师推出的电子版SpringBoot,从构建小系统到架构大系统

前言:Java的各种开发框架发展了很多年,影响了一代又一代的程序员,现在无论是程序员,还是架构师,使用这些开发框架都面临着两方面的挑战。一方面是要快速开发出系统,这就要求使用的开发框架尽量简单,无论...

Kubernetes (k8s) 入门学习指南_k8s kubeproxy

Kubernetes(k8s)入门学习指南一、什么是Kubernetes?为什么需要它?Kubernetes(k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它...

取消回复欢迎 发表评论: