m3u8文件下载ts视频

ts文件下载

序言

​ 写这篇文章的初衷是最近在研究python爬虫视频,遇到了ts格式的视频格式,通过网上大量查找资料,最终下载成功,但是过程真的非常不容易,因为很多的资料都非常的繁琐,需要你一个个实验,但其实ts下载还是非常简单的,只需要了解其中几个概念就可以了,比如m3u8文件如何获取,ts视频如何下载

1. m3u8文件获取

这里以追剧网-最新电影

1.1 获取m3u8的请求地址

打开你要爬虫的视频,F12进入开发者模式,点击网络,在筛选器里输入m3u8,如下图所示,我们会抓取到m3u8文件的url地址

在这里插入图片描述

1.2 代码获取m3u8文件

import requests
# m3u8地址
url = 'https://ukzyvod3.ukubf5.com/20220720/XxnaqkeK/1700kb/hls/index.m3u8?skipl=1'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0',
    'Referer': 'https://www.chzzxx.com/'
}
# 获取m3u8文件
m3u8_file = requests.get(url, headers=headers).text
# print(m3u8_file)

# 通过分析每个ts下载地址的前缀都是 https://ukzyvod3.ukubf5.com

# 通过循环取到ts数据的下载地址
ts_url_list = []
for line in m3u8_file.split('\n'):
    if not line.startswith('#'):
        ts_url = 'https://ukzyvod3.ukubf5.com' + line
        ts_url_list.append(ts_url)
        print(ts_url)
        break   # 因为地址有很多,这里取一个地址演示,break结束
# print(ts_url_list)

得到的ts地址:https://ukzyvod3.ukubf5.com/20220720/XxnaqkeK/1700kb/hls/xzdDFLZr.ts

点击就可下载ts文件

在这里插入图片描述

上诉代码中,打印m3u8_file这个变量得到的m3u8文件如下图所示:

在这里插入图片描述

2. ts文件下载

for ts_url in ts_url_list:
    # 获取ts视频数据
    ts_data = requests.get(url=ts_url,headers=headers).content

    # 定义视频名称
    ts_name = ts_url.split('/')[-1]

    # 下载视频
    with open(f'../tsLib/{ts_name}', 'wb')as f:
        f.write(ts_data)
    print(f'视频下载成功:{ts_name}')

在这里插入图片描述

点击播放发现是可以播放的

在这里插入图片描述

3. 完整代码

import requests

url = 'https://ukzyvod3.ukubf5.com/20220720/XxnaqkeK/1700kb/hls/index.m3u8?skipl=1'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0',
    'Referer': 'https://www.chzzxx.com/'
}

m3u8_file = requests.get(url, headers=headers).text
# print(m3u8_file)

# 通过分析每个ts下载地址的前缀都是 https://ukzyvod3.ukubf5.com

# 通过正则取到ts数据的下载地址
ts_url_list = []
for line in m3u8_file.split('\n'):
    if not line.startswith('#'):
        ts_url = 'https://ukzyvod3.ukubf5.com' + line
        ts_url_list.append(ts_url)
        # print(ts_url)
        break
# print(ts_url_list)

for ts_url in ts_url_list:
    # 获取ts视频数据
    ts_data = requests.get(url=ts_url,headers=headers).content

    # 定义视频名称
    ts_name = ts_url.split('/')[-1]

    # 下载视频
    with open(f'../tsLib/{ts_name}', 'wb')as f:
        f.write(ts_data)
    print(f'视频下载成功:{ts_name}')

下载的N个ts视频文件合并成一个完整的视频可以使用ffmpeg模块,这个简单,可以自行百度搜索

4. m3u8文件解密

如果在m3u8文件里出现key值以及iv值,就需要对文件进行解密后,下载的ts视频才能播放

#EXT-X-KEY这一行,有key的URI地址以及IV,这类m3u8文件需要解密后才能下载

如果有小伙伴遇到需要解密的m3u8文件可以在评论里留言

我会在写一篇关于m3u8解密的文章

#EXTM3U
#EXT-X-VERSION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:3
#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/keyfile",IV=0x00000000000000000000000000000000
 
#EXTINF:3.333333,
test/0.ts
#EXTINF:3.333333,
test/1.ts
#EXTINF:3.333333,
test/2.ts
#EXT-X-ENDLIST

5. 合并视频

5.1 将所有的视频放到txt文件中(ts.txt)

file 'F:\PycharmProjects\ts文件爬虫\tsLib\1.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\2.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\3.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\4.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\5.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\6.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\7.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\8.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\9.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\10.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\11.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\12.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\13.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\14.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\15.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\16.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\17.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\18.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\19.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\20.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\21.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\22.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\23.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\24.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\25.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\26.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\27.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\28.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\29.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\30.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\31.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\32.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\33.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\34.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\35.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\36.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\37.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\38.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\39.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\40.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\41.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\42.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\43.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\44.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\45.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\46.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\47.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\48.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\49.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\50.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\51.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\52.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\53.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\54.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\55.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\56.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\57.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\58.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\59.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\60.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\61.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\62.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\63.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\64.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\65.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\66.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\67.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\68.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\69.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\70.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\71.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\72.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\73.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\74.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\75.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\76.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\77.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\78.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\79.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\80.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\81.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\82.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\83.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\84.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\85.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\86.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\87.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\88.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\89.ts'
file 'F:\PycharmProjects\ts文件爬虫\tsLib\90.ts'

5.2 在当前文件目录中打开cmd

# 得到合并后的视频out.mp4
ffmpeg -f concat -safe 0 -i ts.txt -c copy out.mp4

关于ts视频合并的补充

1. 下载ffmpeg

打开官网下载 ffmpeg官网

下载Windows版本,然后解压到本地,配置环境变量,具体步骤可以看这里配置环境变量

2. 合并ts视频

import os
import itertools

# ffmpeg -f concat -safe 0 -i ts.txt -c copy out.mp4

# 遍历ts视频文件名
dirName = "./tsLib"
files = os.listdir(dirName)
# print(files)

# 拼接文件名保存到ts.txt文本中,格式是这样:  file 'D:\PycharmProjects\ts文件爬虫\tsLib\1.ts'
# 定义写入的文件名
input_file = 'ts1.txt'
file = open(input_file, 'w', encoding='utf-8')
for i in files:
    f = f"file 'D:\PycharmProjects\\ts文件爬虫\\tsLib\{i}'"   # 这里配置自己的ts文件路径就行
    file.write(f + '\n')

# 合并视频
# 定义导出视频的名字
output = '哈哈哈.mp4'
ffmpeg_path = r"D:\installers\音视频合并工具\ffmpeg-master-latest-win64-gpl\bin\ffmpeg.exe"
cmd = ffmpeg_path + " -f concat -safe 0 -i " + input_file + " -c copy " + output
print(cmd)
# 调用cmd命令行执行ffmpeg拼接视频
os.popen(cmd)

😏 您的慷慨和善良,让我们感到深深的敬意和感激。您的打赏,将成为我们前进的动力。

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eason-Python

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值