通过.m3u8文件获取.ts文件并合并成.MP4文件
❗❗❗本文最后更新于 248 天前,其中的信息可能已经过时;如有错误请在文章下方评论✅,欢迎纠错🥰!
.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("完成"))
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇