脚本只负责对hls流地址进行解析,下载通过aria2c,合并通过ffmpeg,aria2c和ffmpeg需要单独下载,并与该脚本放于同一个目录下,支持代理和非代理下载,本人菜鸟一只,代码写得不是很规范,但代码可以有效工作,支持m3u8加密和非加密的解析,个别特殊加密的流暂时无法解析。脚本每次只能解析和下载一个视频,但单个视频下载是多线程的
福利:支持解析和下载P站和X站的视频
下面是完整代码
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
用于流视频下载器
先下载m3u8文件
逐行读取文件
解析
'''
import requests
import os
import tkinter as tk
import random
import string
import sys
os.system("mode con cols=35 lines=11")
root=tk.Tk()
root.withdraw()
root.wm_attributes('-topmost',1)
proxies = {}
pxy = ''
fname = ''
cur_path = ''
def vname_str():
ran_str = ''.join(random.sample(string.ascii_letters, 8))
return ran_str
def GetDesktopPath():
return os.path.join(os.path.expanduser("~"), 'Desktop')
def select_proxy():
global proxies
while True:
id = input("是否启用代理(默认不启用)?Y/N")
if id == "Y" or id == "y":
check()
os.system("title 【代理模式】")
return
elif id == "N" or id == "n":
proxies = {}
os.system("title 【直连模式】")
return
else:
proxies = {}
os.system("title 【直链模式】")
return
def check():
global proxies,pxy
if not os.path.exists("proxy.ini"):
f=open("proxy.ini","w",encoding="utf-8")
f.close()
f = open("proxy.ini","r",encoding="utf-8")
line = f.readline()
f.close()
if line:
proxies = {"http":line,"https":line}
pxy = "--all-proxy=\"http://"+line+"\""
else:
print("代理格式:\"127.0.0.1:7890\"")
os.system("notepad.exe proxy.ini")
os.system("pause")
check()
def m3u8_download(url):
try:
r = requests.get(url)
with open("0.m3u8",'wb') as code:
code.write(r.content)
d = GetDesktopPath()
premain_ = "&#