1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| import tkinter as tk from pytube import Playlist from pytube import YouTube import os
DEFAULT_PATH = 'download'
def main(): global video_type global tk_video global tk_url global tk_path global tk_label_msg
win = tk.Tk()
video_type = '360p'
tk_url = tk.StringVar() tk_path = tk.StringVar() tk_video = tk.StringVar()
win.title("下載Youtube影片 #2") win.minsize(width=538, height=280)
label1 = tk.Label(win, text='Youtube網址:') label1.place(x=123, y=30) entry_url = tk.Entry(win, textvariable=tk_url) entry_url.config(width=40) entry_url.place(x=220, y=30)
label2 = tk.Label(win, text='存檔路徑(預設為download資料夾):') label2.place(x=10, y=70) entry_path = tk.Entry(win, textvariable=tk_path) entry_path.config(width=40) entry_path.place(x=220, y=70)
btnDown = tk.Button(win, text="下載影片", command=clickDown) btnDown.place(x=200, y=110)
rb1 = tk.Radiobutton(win, text="360p, mp4", variable=tk_video, value="360p", command=rbVideo) rb1.place(x=200, y=150) rb1.select() rb2 = tk.Radiobutton(win, text="720p, mp4", variable=tk_video, value="720p", command=rbVideo) rb2.place(x=200, y=180)
tk_label_msg = tk.Label(win, text="", fg="red") tk_label_msg.place(x=200, y=220)
win.mainloop()
def clickDown(): global video_type global tk_url global tk_path global tk_label_msg
if len(tk_path.get()) != 0: video_path = tk_path.get() else: video_path = DEFAULT_PATH
url_head = tk_url.get()
try : playList = Playlist(url_head)
if len(playList) != 0: if not os.path.exists(video_path) : os.makedirs(video_path)
for url in playList: yt = YouTube(url) yt.streams.filter(subtype='mp4', res=video_type, progressive=True).first().download(video_path) print(f'{yt.title} Download complete')
tk_label_msg.config(text="下載完成!") except: tk_label_msg.config(text="url not correct...")
def rbVideo() : global video_type global tk_video
video_type = tk_video.get()
if __name__ == '__main__': main()
|