MizunoBrasil

baixa youtube escolhe resolução

Jun 16th, 2023
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.08 KB | None | 0 0
  1. import tkinter as tk
  2. from tkinter import filedialog, messagebox
  3. import pytube
  4. import ctypes
  5. from tkinter.ttk import Combobox
  6.  
  7. # Função para minimizar a janela do terminal
  8. def minimize_window():
  9.     # Obtém o identificador da janela do terminal
  10.     hwnd = ctypes.windll.kernel32.GetConsoleWindow()
  11.  
  12.     # Minimiza a janela do terminal
  13.     ctypes.windll.user32.ShowWindow(hwnd, 6)  # 6 representa o comando para minimizar a janela
  14.  
  15.     # Exibe mensagem informando que o programa está sendo executado
  16.     print("O programa está sendo executado. A janela do terminal foi minimizada.")
  17.  
  18.  
  19. # Minimiza a janela do terminal
  20. minimize_window()
  21.  
  22. def download_video():
  23.     # Obtém a URL digitada na caixa de texto
  24.     video_url = entry.get()
  25.  
  26.     # Verifica se o campo de texto está vazio
  27.     if not video_url:
  28.         messagebox.showwarning("Aviso", "Por favor, informe a URL do vídeo do YouTube.")
  29.         return
  30.  
  31.     try:
  32.         # Cria um objeto 'YouTube' com a URL do vídeo
  33.         youtube = pytube.YouTube(video_url)
  34.  
  35.         # Obtém todas as resoluções disponíveis para o vídeo
  36.         resolutions = [stream.resolution for stream in youtube.streams.filter(progressive=True).order_by('resolution')]
  37.  
  38.         # Verifica se existem resoluções disponíveis
  39.         if not resolutions:
  40.             messagebox.showwarning("Aviso", "Não há resoluções disponíveis para o vídeo.")
  41.             return
  42.  
  43.         # Função para iniciar o download com a resolução selecionada
  44.         def download_selected_resolution():
  45.             selected_resolution = resolution_var.get()
  46.  
  47.             # Verifica se uma resolução foi selecionada
  48.             if not selected_resolution:
  49.                 messagebox.showwarning("Aviso", "Por favor, selecione uma resolução.")
  50.                 return
  51.  
  52.             # Obtém o objeto de stream para a resolução selecionada
  53.             video = youtube.streams.filter(progressive=True, resolution=selected_resolution).first()
  54.  
  55.             # Abre uma janela de diálogo para escolher a pasta de destino
  56.             folder_selected = filedialog.askdirectory()
  57.  
  58.             if folder_selected:
  59.                 try:
  60.                     # Define o diretório de destino para o download
  61.                     video.download(folder_selected)
  62.  
  63.                     # Exibe a mensagem no console
  64.                     print("O vídeo foi baixado com sucesso.")
  65.  
  66.                     # Exibe a mensagem em uma caixa de diálogo
  67.                     messagebox.showinfo("Download Concluído", "O vídeo foi baixado com sucesso.")
  68.  
  69.                     # Limpa a caixa de texto e posiciona o cursor nela
  70.                     entry.delete(0, tk.END)
  71.                     entry.focus()
  72.  
  73.                     # Fecha a janela de seleção de resolução
  74.                     resolution_window.destroy()
  75.                 except Exception as e:
  76.                     messagebox.showerror("Erro", str(e))
  77.             else:
  78.                 messagebox.showwarning("Aviso", "Nenhuma pasta selecionada.")
  79.  
  80.         # Cria a janela de seleção de resolução
  81.         resolution_window = tk.Toplevel(window)
  82.         resolution_window.title("Escolha a resolução")
  83.         resolution_window.geometry("300x150")
  84.         resolution_window.withdraw()  # Inicia a janela em modo oculto
  85.         resolution_window.transient(window)  # Torna a janela filha da janela principal
  86.         resolution_window.grab_set()  # Captura o foco da janela
  87.  
  88.         # Centraliza a janela no meio da tela
  89.         resolution_window.update_idletasks()
  90.         width = resolution_window.winfo_width()
  91.         height = resolution_window.winfo_height()
  92.         x = (resolution_window.winfo_screenwidth() // 2) - (width // 2)
  93.         y = (resolution_window.winfo_screenheight() // 2) - (height // 2)
  94.         resolution_window.geometry(f"{width}x{height}+{x}+{y}")
  95.         resolution_window.deiconify()  # Exibe a janela
  96.  
  97.         # Cria o rótulo "Escolha a resolução:"
  98.         label = tk.Label(resolution_window, text="Escolha a resolução:")
  99.         label.pack(pady=10)
  100.  
  101.         # Cria o combobox com as resoluções disponíveis
  102.         resolution_var = tk.StringVar()
  103.         combobox = Combobox(resolution_window, textvariable=resolution_var, values=resolutions)
  104.         combobox.pack(pady=5)
  105.  
  106.         # Cria o botão de download na janela de seleção de resolução
  107.         download_button = tk.Button(resolution_window, text="Baixar vídeo", command=download_selected_resolution)
  108.         download_button.pack(pady=5)
  109.  
  110.     except pytube.exceptions.PytubeError as e:
  111.         messagebox.showerror("Erro", str(e))
  112.  
  113. def show_context_menu(event):
  114.     # Exibe o menu de contexto do Windows com a opção "Colar"
  115.     menu.post(event.x_root, event.y_root)
  116.  
  117. # Cria a janela principal
  118. window = tk.Tk()
  119.  
  120. # Define o título da janela
  121. window.title("Youtube Vídeo Downloader")
  122.  
  123. # Define o tamanho da janela
  124. window.geometry("600x100")
  125.  
  126. # Centraliza a janela no meio da tela
  127. window.eval('tk::PlaceWindow . center')
  128.  
  129. # Cria o rótulo "Informe a URL do vídeo:"
  130. label = tk.Label(window, text="Informe a URL do vídeo:")
  131. label.grid(row=0, column=0, sticky="w", padx=10, pady=10)  # Posiciona na primeira linha, primeira coluna (canto superior esquerdo), alinhado à esquerda, com margem de 10 pixels
  132.  
  133. # Cria a caixa de texto
  134. entry = tk.Entry(window, width=80)
  135. entry.grid(row=1, column=0, padx=10, pady=10)  # Posiciona na segunda linha, primeira coluna (canto superior esquerdo), com margem de 10 pixels à esquerda
  136.  
  137. # Associa o evento de clique com botão direito do mouse à função do menu de contexto
  138. entry.bind("<Button-3>", show_context_menu)
  139.  
  140. # Cria o menu de contexto do Windows
  141. menu = tk.Menu(entry, tearoff=False)
  142. menu.add_command(label="Colar", command=lambda: entry.event_generate("<<Paste>>"))
  143.  
  144. # Cria o botão de download
  145. button = tk.Button(window, text="Baixar vídeo", command=download_video)
  146. button.grid(row=1, column=1, padx=5, pady=10)  # Posiciona na segunda linha, segunda coluna (canto superior direito), com margem de 10 pixels à direita
  147.  
  148. # Inicia o loop principal da janela
  149. window.mainloop()
  150.  
Add Comment
Please, Sign In to add comment