python gui開発――ドトーン無透かし動画のダウンロードツールを作る(ソースを添付)


ハロー、皆さん、こんにちは、失踪人口が戻ってきました。今回はtkinterを使って、手ぶれなしの透かし動画のダウンロードを作成します。目的は純粋で、微信状態の動画を設定するためです。このブログの中で、私は自分のコードを書いて構想を書きたいです。デザインの流れを書きたいです。コードは第四節に置いています。ツールは包装して青空で雲を演奏します。ゆっくり見てください。後ろにリンクがあります。
一.準備工作
今回は以下の依存ライブラリを使用します。e json os random tkinter threading requests pillowのうち、後の二つはインストールしてから使用します。
二.プレビュー
0.羽音をコピーして短いリンクを共有する

1.起動

2.運転

3.結果

(お姉さんはとても綺麗です。動画には透かしがありません。)
三.設計プロセス
設計の流れは全体の設計と詳細設計に分けられています。ここではvisoを使っていくつかのフローチャートを描きます。
1.全体の設計

2.詳細設計
2.1 download()関数

2.2パース()関数

四.ソースコード

#--*coding:utf-8*--
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
import os
import json
import threading
import requests
from PIL import Image,ImageTk

'''
           
  :1.    
 2.   
'''
def clean_progressbar():
 #      
 fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="white")
 x = 500 #     ,   
 n = 600 / x # 465         
 for t in range(x):
 n = n + 600 / x
 #              
 canvas.coords(fill_line, (0, 0, n, 60))
 window.update()

def download():
 #      ,   
 clean_progressbar()
 real_link=t1.get('0.0',END).split('**')[-1]
 headers2 = {
 'sec-fetch-dest': 'document',
 'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Mobile Safari/537.36'
 }
 r2 = requests.get(real_link, headers=headers2, stream=True)
 try:
 os.mkdir(video_path)
 except:
 pass
 file =video_path+ video_title + '.mp4'
 #      
 chunk_size = 1024 #       ,        
 file_size = int(r2.headers['Content-Length']) #           string  ,  int()    
 fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="green")
 raise_data = 600 / (file_size / chunk_size) #     ,600       
 _size = 0 #          
 with open(file, "wb") as f:
 n=0
 for data in r2.iter_content(chunk_size): # inter_content:         ,    chunk_size    
 f.write(data)
 n = n + raise_data
 canvas.coords(fill_line, (0, 0, n, 60))
 window.update()
 #       
 t1.delete('0.0',END)
 t1.insert(END,'{title}.mp4
!'.format(title=video_title)) # def parse(share_link): # item_ids headers = { 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'sec-fetch-dest': 'document', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36' } # allow_redirects=False , url r1 = requests.get(share_link, allow_redirects=False, headers=headers) item_ids = re.findall(r'video/(\d+)/', r1.text) interface_url='https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={}'.format(''.join(item_ids)) r=requests.get(interface_url,headers=headers) _json=json.loads(r.text) try: item_list=_json.get('item_list')[0] video_title=item_list.get('desc')# watermark_video_link=item_list.get('video').get('play_addr').get('url_list')[0]# real_video_link=watermark_video_link.replace('playwm','play')# return video_title,real_video_link except TypeError: messagebox.showerror(' ',' !') t1.delete('0.0',END) return ' ',' !' # jiexi() Text Widget def pre_parse(): share_link=e1.get() if len(share_link)!=0: global video_title, real_video_link try: video_title, real_video_link=parse(share_link) except TypeError: t1.insert(END,' , !') t1.delete('0.0',END) # , try: t1.insert(END, video_title + '
' +'*'*30+ real_video_link) b2.config(state='normal') except TclError: filted_title=re.findall(r'[\u4E00-\u9FA5\s]+',video_title) t1.insert(END,''.join(filted_title)+'
'+'*'*30+real_video_link) b2.config(state='normal') else: messagebox.showerror(' ',' !') t1.delete('0.0',END) t1.insert(END,' !') # def open_dir(): try: os.mkdir(video_path) except: pass abs_path=os.path.abspath(video_path) os.startfile(abs_path) # def quit_window(): window.destroy() # def thread_it(func,*args): t=threading.Thread(target=func,args=args) t.setDaemon(True)# t.start()# if __name__ == '__main__': video_path='./video/' window=Tk() window.title('Downloader-v1.0') width=295 height=380 screenWidth = window.winfo_screenwidth() # screenHeight = window.winfo_screenheight() # left = (screenWidth - width) / 2 top = (screenHeight - height) / 2 window.geometry("%dx%d+%d+%d" % (width, height, left, top)) window.resizable(0,0) window.iconbitmap('./rely/my_favicon.ico') photo=Image.open('./rely/dy_logo.png') photo=photo.resize((200,50)) image=ImageTk.PhotoImage(photo) l0=ttk.Label(window,imag=image,justify='center') l0.pack() f1=ttk.Labelframe(window,text=' :') f1.place(x=40,y=55) e1=ttk.Entry(f1,width=30) e1.pack() f2=ttk.Labelframe(window,text=' :') f2.place(x=40,y=102) t1=Text(f2,height=6,width=30) t1.pack() t1.insert(END,'{_xing}

{_xing}'.format(_xing='*'*29)) b1=ttk.Button(window,text=' ',command=lambda :thread_it(pre_parse)) b1.place(x=40,y=265) b2=ttk.Button(window,text=' ',state='disable',command=lambda :thread_it(download)) b2.place(x=170,y=265) b3=ttk.Button(window,text=' ',command=open_dir) b3.place(x=40,y=298) b4=ttk.Button(window,text=' ',command=quit_window) b4.place(x=170,y=298) f3=ttk.Labelframe(window) f3.place(x=40,y=329) l1=ttk.Label(f3,text=' : !',width=30,justify='center',foreground='red') l1.pack(fill=X) f4=ttk.LabelFrame(window,text=' :') f4.place(x=40,y=210) canvas = Canvas(f4, width=210, height=20,bg="white") canvas.pack(side='left') l2_var=StringVar() l2=ttk.Label(f4,textvariable=l2_var,text=' ') l2.pack(side='left',anchor=S) window.mainloop() ''' test_url: https://v.douyin.com/JcxTMj2/ '''
五.説明&まとめ
5.1説明:
図示のスクリーンショットはすべて例です。本ソフトウェアは学習交流のみに使用します。
5.2総括:
今回はpythonのtkinterを使って、手ぶれなしの透かし動画を書いてGUIツールを登りました。いくつかのGUIインターフェイスを書いたことがあります。他山の石は玉を攻めることができます。今回の構想、コードの作成は参考になりました。
wwww.jb 51.net/articale/20519.httm
助けてくれた人に感謝します。ツールはすでにパッケージ化されて青い演奏雲https://wws.lanzous.com/isCLul0dlfaにアップロードされました。
構想、コードの面で何か足りないところがありますか?
以上はpython guiの開発です。手ぶれ無透かし動画のダウンロードツール(ソースコード付き)の詳細を作成します。pythonの手ぶれ動画のダウンロードに関する資料は他の関連記事に注目してください。