❗❗❗本文最后更新于 401 天前,其中的信息可能已经过时;如有错误请在文章下方评论✅,欢迎纠错🥰!
.m3u8文件:点击获取
import re
import requests
import os
# 获得.ts文件的URL,此处返回的是一个数组。
def getTsUrl(file):
lines = file.readlines() # 读取每一行的内容
ts_url = [] # 创建一个空列表,准备存储.ts文件的URL
for line in lines: # 遍历m3u8文件中的每一行
if re.match('https://.*?\n', line): # 使用正则匹配.ts文件的URL
line = line.strip('\n') # 删除尾随的换行符
ts_url.append(line) # 增添到数组中
return ts_url
# 下载.ts文件
def dl(tsUrls):
response = "" # 创造dl方法中的全局变量
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/97.0.4692.99 Safari/537.36 Edg/97.0.1072.69 "
}
i = 1 # 为命名.ts文件做准备,同时可以作为计数器使用
try:
for tsUrl in tsUrls:
response = requests.get(tsUrl, headers=headers)
path = "./ts/{:0>4}.ts".format(str(i)) # .ts文件的储存路径及名字,此处采用的右对齐,长度4(所需长度根据.ts文件的数量来决定),填充字母为'0'。 例如:1为0001
f = open(path, "wb") # 以二进制(bytes)的形式写入
f.write(response.content) # .content为响应内容的二进制(bytes)形式
f.close()
print("已经下载了" + str(i) + "个文件,总共有" + str(len(tsUrls)) + "个文件,完成度:{:.2f}%".format(i * 100 / len(tsUrls)))
i += 1
except:
if response != "<Response [200]>":
print("当请求到第" + str(i) + "个.ts文件链接时,请求出现错误!")
print(response)
else:
print("当下载到第" + str(i) + "个.ts文件时,下载出错!")
# 将所有的.ts文件名写入一个.txt文件中(在txt文件中以 file '文件名的二进制格式.ts' 的格式显示)
def writeIntoTxt():
file_Path = "./ts/" # .ts文件的储存路径
file_list = sorted(os.listdir(file_Path)) # os.listdir(____)获得某一路径下的所有文件的文件名,sorted()降序排序
f = open(file_Path + "file_list.txt", "w+") # .txt文件要和.ts文件在同一路径下
for file in file_list:
f.write("file '{}'\n".format(file)) # 写入.txt文件中,格式为 file '文件名的二进制格式.ts' 为ffmpeg处理做准备
f.close()
# 打开m3u8文件,为getTsUrl提供参数
file_m3u8 = open(file='007.m3u8', mode='r', encoding='UTF-8')
# 调用getTsUrl()方法,从m3u8文件中获得.ts文件链接并存入数组
ts_list = getTsUrl(file_m3u8)
# 调用dl()方法,遍历getTsUrl()方法得到的数组,将.ts文件下载到path路径中
dl(ts_list)
# 调用writeIntoTxt()方法,将所有的.ts文件名写入一个.txt文件中
writeIntoTxt()
# ---------- 最后一步,在cmd命令行中操作 ------------
# ------------- 进入ts文件所在的目录 ---------------
# ------------ cd (ts文件所在的目录) --------------
# ----------- 执行 ffmpeg 合并转换命令 ------------
# ffmpeg -f concat -i 文件名.txt -c copy 自定义命名.mp4
# -------或者执行 copy /b *.ts 自定义名.mp4--------
# 007:无暇赴死(原声版) No Time to Die
print("{:-^30}".format("完成"))