日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python基于tkinter制作m3u8視頻下載工具

瀏覽:46日期:2022-06-21 11:55:45

這是我為了學習tkinter用python 寫的一個下載m3u8視頻的小程序,程序使用了多線程下載,下載后自動合并成一個視頻文件,方便播放。

目前的眾多視頻都是m3u8的播放類型,只要知道視頻的m3u8地址,就可以完美下載整個視頻。

m3u8地址獲取

打開瀏覽器,點開你要獲取地址的視頻

python基于tkinter制作m3u8視頻下載工具

重要的來了,右鍵>>審查元素或者按F12也可以

根據開發或測試的實際環境選擇相應的設備,選擇iphone6 plus

python基于tkinter制作m3u8視頻下載工具

選擇好了以后,刷新頁面,點擊漏斗,選擇media,一定刷新之后再點擊,沒出來的話切換幾下選項卡,就能出來了

python基于tkinter制作m3u8視頻下載工具

點擊播放視頻,在下邊就可以看到地址了

python基于tkinter制作m3u8視頻下載工具

程序代碼

# -*- coding: UTF-8 -*-import syssys.path.append('C:Python36-32Libsite-packages')import tkinterimport reimport urllib3import threadpoolimport threadingimport osimport shutilimport timeimport globfrom tkinter.ttk import *from PIL import Image, ImageTkimport pyperclipfrom tkinter.filedialog import askdirectorydef get_image(filename,width,height): im = Image.open(filename).resize((width,height)) return ImageTk.PhotoImage(im)def get_resource_path(relative_path): if hasattr(sys, ’_MEIPASS’):return os.path.join(sys._MEIPASS, relative_path) return os.path.join(os.path.abspath('.'), relative_path)def getrealtask(link): global key rooturl1 = ’’ rooturl2 = ’’ pattern3 = re.compile(r’^.*[/]’, re.M) result11 = pattern3.findall(link) if result11:rooturl1 = result11[0] pattern4 = re.compile(r’^http[s]?://[^/]*’, re.M) result114 = pattern4.findall(link) if result114:rooturl2 = result114[0] res = http.request(’GET’, link) content = str(res.data, ’utf8’) list = content.split(’n’) reallist = [] for one in list:if one.endswith(’'key.key'’): keyurl = rooturl1 + 'key.key' res = http.request(’GET’, keyurl) key = str(res.data, ’utf8’)if one.endswith(’.ts’) or one.endswith(’.image’): if re.match(r’http’, one, re.M | re.I):reallist.append(one) elif re.match(r’/’, one, re.M | re.I):reallist.append(rooturl2 + one) else:reallist.append(rooturl1 + one)if one.endswith(’.m3u8’): if re.match(r’/’, one, re.M | re.I):reallist = getrealtask(rooturl2 + one) else:reallist = getrealtask(rooturl1 + one) break return reallistdef download_ts(result): url = result[’url’] name = result[’name’] num = result[’num’] rootpath = result[’root’] m3u8Name = result[’m3u8name’] t= str(result[’total’]) if num % 10000 == 0:print(str(num)+’ / ’+t) basepath = os.path.join(rootpath,m3u8Name) fullpath = os.path.join(basepath,name) isExist = os.path.exists(fullpath) if not isExist:http = urllib3.PoolManager(timeout=10.0)while(1): try:f = http.request(’GET’, url)break except:print('URL ERRO: ' + url)time.sleep(2)d = f.datawith open(fullpath, 'wb') as code: code.write(d)print('SAVE: ' + url)def clock2(num,path): global window global key v3 = tkinter.StringVar(); v4 = tkinter.StringVar(); l3 = tkinter.Label(window, text=’’, textvariable=v3, font=(’Arial’, 10)) l4 = tkinter.Label(window, text=’’, textvariable=v4, font=(’Arial’, 10)) l3.place(x=10, y=130, anchor=’nw’) l4.place(x=10, y=160, anchor=’nw’) v3.set('下載中。。。') while(1):path_file_number = len(glob.glob(path+’/*.ts’))mp4_file_number = len(glob.glob(path + ’/*.mp4’))numberstr = str(path_file_number) + ’/’+str(num)v4.set(numberstr)if mp4_file_number==1: v3.set('下載完成!') key = ’’ breakdef clock1(): global v global v2 global rootpath m3u8Name = v2.get() url = v.get() print(url) urls = getrealtask(url) total = len(urls) i = 0 tasks = [] tsNames = [] for one in urls:task = {}task[’root’] = rootpathtask[’m3u8name’] = m3u8Nametask[’url’] = onetask[’num’] = itask[’total’] = totaltask[’name’] = str(i) + ’.ts’tsNames.append(str(i) + ’.ts’)i = i + 1tasks.append(task) print(’tasks: ’ + str(len(tasks))) targetpath = os.path.join(rootpath, m3u8Name) if not os.path.exists(targetpath):os.makedirs(targetpath) timer2 = threading.Thread(target=clock2,args=(len(tasks),targetpath)) timer2.daemon = True timer2.start() requests = threadpool.makeRequests(download_ts, tasks) [task_pool.putRequest(req) for req in requests] task_pool.wait() mp4targetfile = os.path.join(targetpath, m3u8Name + ’.mp4’) with open(mp4targetfile, ’wb’) as f:for ts in tsNames: tstargetfile = os.path.join(targetpath, ts) with open(tstargetfile, ’rb’) as mergefile:shutil.copyfileobj(mergefile, f) print(tstargetfile + ’ merged.’)for tts in tsNames: tstargetfile = os.path.join(targetpath, tts) os.remove(tstargetfile) print(total)def hit_me(): global on_hit timer = threading.Thread(target=clock1) timer.daemon = True timer.start() returndef choose_dir(): global v5 global rootpath rootpath = askdirectory() v5.set(’文件夾: ’+rootpath+’/’) returndef about(): window = tkinter.Toplevel() window.geometry(’600x100’)# Note Toplevel, NOT Tk. msg = ’Rax m3u8下載器 v1.4n寫這個程序主要是為了學習Tk,順便滿足下自己看視頻的需求。n家里的移動網絡看在線視頻還是有些卡頓的。 ’ label = tkinter.Label(window, text=msg,font=(’Arial’, 15)) label.grid()def update(): window = tkinter.Toplevel() window.geometry(’250x200’) msg = ’Rax m3u8下載器 v1.5n可以選擇保存的目錄了nRax m3u8下載器 v1.4n增加了菜單欄’ label = tkinter.Label(window, text=msg,font=(’Arial’, 13)) label.place(x=30, y=30, anchor=’nw’)def donate(): window = tkinter.Toplevel() window.geometry(’500x400’) msg = ’軟件免費使用n歡迎喜歡此軟件的各位大佬打賞,謝謝。’ label = tkinter.Label(window, text=msg, font=(’Arial’, 20)) i1 = tkinter.PhotoImage(file=get_resource_path('imageswx.png')) i2 = tkinter.PhotoImage(file=get_resource_path('imageszfb.png')) imagelabel = tkinter.Label(window, text=’aaa’, image=i1, font=(’Arial’, 10)) imagelabel2 = tkinter.Label(window, text=’vvv’, image=i2, font=(’Arial’, 10)) imagelabel.place(x=10, y=145, anchor=’nw’) imagelabel2.place(x=230, y=145, anchor=’nw’) label.place(x=40, y=50, anchor=’nw’) window.mainloop()def clear(): global v v.set('')def paste(): global v v.set(pyperclip.paste())key = ’’on_hit = Falserootpath = 'd:'#最高50線程task_pool = threadpool.ThreadPool(50)http = urllib3.PoolManager(timeout=5.0)urllib3.disable_warnings()#主窗口初始化window = tkinter.Tk()window.style = Style()window.style.theme_use('clam')window.title('Rax m3u8視頻下載器')window.geometry(’500x300’)window.resizable(0,0)#飛機背景圖canvas_root = tkinter.Canvas(window,width=500,height=300)im_root = get_image(get_resource_path(’imagesfeiji.jpeg’),500,300)canvas_root.create_image(250,240,image=im_root)canvas_root.pack()#各控件初始狀態l1 = tkinter.Label(window, text=’m3u8地址:’, font=(’Arial’, 10))l1.place(x=10, y=0, anchor=’nw’)# 地址欄v = tkinter.StringVar();e2 = tkinter.Entry(window, show=None, textvariable = v,font=(’Arial’, 10),width=40)v.set(’’)e2.place(x=10, y=30, anchor=’nw’)# 視頻名稱l6 = tkinter.Label(window, text = ’ 視頻文件名稱:’, font=(’Arial’, 10))l6.place(x=0, y=90, anchor=’nw’)# 視頻名稱欄v2 = tkinter.StringVar();e3 = tkinter.Entry(window, show=None, textvariable = v2,font=(’Arial’, 10),width=15)v2.set(’’)e3.place(x=105, y=90, anchor=’nw’)# 保存位置v5 = tkinter.StringVar();l2 = tkinter.Label(window, textvariable = v5, font=(’Arial’, 10))v5.set(’文件夾: D:/’)l2.place(x=10, y=60, anchor=’nw’)# 下載按鈕b = tkinter.Button(window, text=’下載’, font=(’Arial’, 10), width=10, command=hit_me)b.place(x=400, y=100, anchor=’nw’)# 選擇路徑按鈕pathselectButton = tkinter.Button(window, text=’選擇路徑’, font=(’Arial’, 10), width=10, command=choose_dir)pathselectButton.place(x=400, y=60, anchor=’nw’)# 清空按鈕b2 = tkinter.Button(window, text=’清空’, font=(’Arial’, 10), width=10, command=clear)b2.place(x=300, y=25, anchor=’nw’)# 粘貼地址按鈕b3 = tkinter.Button(window, text=’粘貼地址’, font=(’Arial’, 10), width=10, command=paste)b3.place(x=400, y=25, anchor=’nw’)# 求捐贈按鈕l5 = tkinter.Label(window, text=’軟件免費使用,歡迎各位喜歡此軟件的大佬打賞,謝謝。nQQ討論群:519565890’, font=(’Arial’, 10))l5.place(x=100, y=160, anchor=’nw’)window.option_add(’*tearOff’, False)#菜單欄menubar = tkinter.Menu(window)window[’menu’] = menubarhelp_menu = tkinter.Menu(menubar)menubar.add_command(label=’捐助作者’,command=lambda: donate())menubar.add_cascade(menu=help_menu, label=’幫助’)#幫助 下拉菜單help_menu.add_command(label=’更新內容’,command=lambda: update())help_menu.add_command(label=’關于’,command=lambda: about())# 進入消息循環window.mainloop()項目地址

https://github.com/raxar81/rax_m3u8_downloader

以上就是python基于tkinter制作m3u8視頻下載工具的詳細內容,更多關于python m3u8視頻下載的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美aa一级| 国产黄大片在线观看| 久久精品123| 日韩欧美一区免费| 亚洲一区资源| 日韩高清成人| 亚洲视频综合| 午夜av一区| 欧美资源在线| 一区二区三区四区精品视频| 亚洲一区二区三区四区电影| 先锋亚洲精品| 欧美日韩国产在线观看网站| 亚洲精品小说| 美女久久网站| 日韩精品欧美大片| 久久精品72免费观看| 欧美精品福利| 麻豆国产精品| 97精品中文字幕| 在线中文字幕播放| 秋霞影院一区二区三区| 91成人网在线观看| 蜜臀va亚洲va欧美va天堂| 日本一区福利在线| 国产精品巨作av| 欧美久久天堂| 欧美美女一区| 日韩精品一区二区三区中文| 欧美精品三级在线| 国产成人精品一区二区三区视频 | 久久成人一区| 综合日韩在线| 国产精品成人一区二区网站软件| 成人在线观看免费视频| 日韩福利一区| 黄色日韩在线| 国产日韩欧美在线播放不卡| 国产激情一区| 久久久久久久久久久9不雅视频| 中文精品在线| 国产精品**亚洲精品| 久久精品动漫| 日日摸夜夜添夜夜添国产精品| 欧美成人aaa| 久久一级电影| 日本91福利区| 四虎4545www国产精品| 免费日韩av片| 国产精品久久久久av蜜臀 | 在线天堂资源www在线污| 免费精品视频| 精品精品99| 99国产精品视频免费观看一公开| 日本成人在线不卡视频| 日韩综合在线| 美国三级日本三级久久99| 麻豆91小视频| 美女尤物久久精品| 三上亚洲一区二区| 亚洲欧美专区| 四季av一区二区凹凸精品| 欧美日韩国产一区精品一区| 欧美日韩午夜| 免费精品国产的网站免费观看| 欧美片第1页综合| 99久精品视频在线观看视频| 久久激情五月激情| 精品一区毛片| 久久在线91| 日韩制服丝袜av| 国产v日韩v欧美v| 日本不卡视频在线观看| 日本美女一区| 国产精品乱战久久久| 亚洲欧美日韩国产一区二区| 国产 日韩 欧美 综合 一区| 免费在线观看成人| 伊伊综合在线| 国产女人18毛片水真多18精品| 午夜精品网站| 国产成人精品亚洲线观看| 亚洲a成人v| 亚洲一级网站| 日韩不卡一区| 国产欧美啪啪| 亚洲aa在线| 国产韩日影视精品| 久久青青视频| 欧美激情一区| 日本va欧美va精品发布| 黄色免费成人| 日韩综合一区| 久久国产精品美女| 欧美专区在线| 欧美日韩中文一区二区| 高清不卡一区| 国产乱码精品一区二区亚洲| 一区二区三区网站| 亚洲欧美不卡| 欧美午夜不卡| 久久精品国产亚洲夜色av网站 | 欧美91福利在线观看| www在线观看黄色| 国产精品99久久久久久董美香| 亚洲涩涩av| 亚洲欧美视频| 国产精品视区| 免费视频一区三区| 99免费精品| 电影亚洲精品噜噜在线观看| 久久精品系列| 国产精品亚洲欧美一级在线| 日韩三区四区| 亚洲精品一二| 亚洲日本三级| 日本一区二区三区中文字幕| 日韩福利视频一区| 日韩在线观看| 国产一区二区三区黄网站| 日韩网站在线| 久久高清免费| 免费国产自久久久久三四区久久| 久久夜夜操妹子| 国产精品福利在线观看播放| 红杏一区二区三区| 精品视频一区二区三区四区五区| 国产精品视频一区二区三区综合| 欧美视频久久| 国产精品巨作av| 一二三区精品| 美国三级日本三级久久99| 亚洲制服欧美另类| 婷婷精品久久久久久久久久不卡| 日韩精品亚洲aⅴ在线影院| 亚洲精品中文字幕99999| 日韩美女精品| 欧美日韩中文| 久久精品女人| 日韩天堂在线| 99在线|亚洲一区二区| 免费看精品久久片| 日韩高清中文字幕一区| 国产精品videossex| 精品三级在线| 蜜桃视频在线网站| 午夜精品亚洲| 四虎精品永久免费| 国产精品久久777777毛茸茸| 韩国一区二区三区视频| 久久精品日韩欧美| 99久久九九| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲性视频在线| 国产欧美三级| 免费高潮视频95在线观看网站| 欧美搞黄网站| 日本精品一区二区三区在线观看视频| 国产日韩在线观看视频| 91亚洲国产| 99国产精品99久久久久久粉嫩| 亚洲毛片在线| 欧美黄色精品| 久久国产影院| 免费观看在线综合| 欧美三区不卡| 久久男人av资源站| 老司机精品久久| 欧美激情亚洲| 亚洲电影在线一区二区三区| 日韩欧美中文在线观看| 精品国产欧美日韩| 久久九九精品| 中文字幕日韩亚洲| 久久中文字幕一区二区| 亚洲网站视频| 日韩福利视频一区| 九色porny丨国产首页在线| 三级在线观看一区二区| 久久免费精品| 欧美一区二区性| 日本视频中文字幕一区二区三区| 久久亚洲资源中文字| 黄色成人精品网站| 国产精品白丝av嫩草影院| 久久狠狠婷婷| 久久精品99久久久| 精品中文字幕一区二区三区av| 日韩精品免费观看视频| 欧产日产国产精品视频| 婷婷精品在线| 色婷婷狠狠五月综合天色拍| 亚洲精品免费观看| 久久国产毛片| 国产精品流白浆在线观看| 欧美综合另类| 久久福利在线| 中文字幕日韩高清在线| 成人国产综合| 91国内精品|