Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- from tkinter import filedialog, messagebox
- import subprocess
- import ctypes
- import json
- import webbrowser
- import os
- # Obtém o identificador da janela do console
- hwnd = ctypes.windll.kernel32.GetConsoleWindow()
- # Oculta a janela do console
- ctypes.windll.user32.ShowWindow(hwnd, 0) # 0 representa o comando para ocultar a janela
- # Caminho padrão da pasta de destino
- DEFAULT_DESTINATION_PATH = ""
- def save_destination_path(destination_path):
- # Salva o caminho da pasta de destino em um arquivo JSON
- with open("destination_path.json", "w") as file:
- json.dump({"destination_path": destination_path}, file)
- def load_destination_path():
- # Carrega o caminho da pasta de destino do arquivo JSON
- try:
- with open("destination_path.json", "r") as file:
- data = json.load(file)
- return data["destination_path"]
- except FileNotFoundError:
- return DEFAULT_DESTINATION_PATH
- def configure_destination_folder():
- # Abre uma janela de diálogo para escolher a pasta de destino
- folder_selected = filedialog.askdirectory()
- if folder_selected:
- save_destination_path(folder_selected)
- destination_path = load_destination_path()
- destination_label.config(text="Pasta de destino: " + destination_path)
- messagebox.showinfo("Configuração de Pasta", "A pasta de destino foi configurada com sucesso.")
- def open_destination_folder(event):
- # Abre a pasta de destino configurada usando o Windows Explorer
- destination_path = load_destination_path()
- if destination_path:
- webbrowser.open(destination_path)
- class HyperlinkLabel(tk.Label):
- def __init__(self, master=None, **kwargs):
- super().__init__(master, **kwargs)
- self.configure(foreground="blue", cursor="hand2")
- self.bind("<Button-1>", self._open_link)
- def _open_link(self, event):
- destination_path = load_destination_path()
- if destination_path:
- webbrowser.open(destination_path)
- def download_video():
- # Obtém a URL digitada na caixa de texto
- video_url = entry.get()
- # Verifica se o campo de texto está vazio
- if not video_url:
- messagebox.showwarning("Aviso", "Por favor, informe a URL do vídeo do YouTube.")
- return
- # Exibe a mensagem de status
- status_label.config(text="Aguarde, download em andamento.", fg="green")
- try:
- # Carrega o caminho da pasta de destino
- destination_path = load_destination_path()
- if destination_path:
- # Executa o comando do yt-dlp para baixar o vídeo com o caminho da pasta de destino configurado
- comando = ['yt-dlp', '--output', os.path.join(destination_path, '%(title)s.%(ext)s'), video_url]
- subprocess.call(comando)
- # Exibe a mensagem no console
- print("O vídeo foi baixado com sucesso.")
- # Exibe a mensagem em uma caixa de diálogo
- messagebox.showinfo("Download Concluído", "O vídeo foi baixado com sucesso.")
- # Limpa a caixa de texto e posiciona o cursor nela
- entry.delete(0, tk.END)
- entry.focus()
- else:
- messagebox.showwarning("Aviso", "Nenhuma pasta de destino configurada.")
- # Limpa a mensagem de status após o término do download ou em caso de erro
- status_label.config(text="")
- except Exception as e:
- messagebox.showerror("Erro", str(e))
- # Limpa a mensagem de status em caso de erro
- status_label.config(text="")
- def show_context_menu(event):
- # Exibe o menu de contexto do Windows com a opção "Colar"
- menu.post(event.x_root, event.y_root)
- def rename_mp4():
- file_path = filedialog.askopenfilename(filetypes=[("Arquivos de Vídeo", "*.mkv *.webm")])
- if file_path:
- try:
- file_name = os.path.splitext(file_path)[0]
- new_file_name = file_name + ".mp4"
- os.rename(file_path, new_file_name)
- messagebox.showinfo("Sucesso", "Renomeado com sucesso.")
- except Exception as e:
- messagebox.showerror("Erro", str(e))
- else:
- messagebox.showwarning("Aviso", "Nenhum arquivo selecionado.")
- # Cria a janela principal
- window = tk.Tk()
- # Define o título da janela
- window.title("Youtube Vídeo Downloader")
- # Define o tamanho da janela
- window.geometry("723x165")
- # Centraliza a janela no meio da tela
- window.eval('tk::PlaceWindow . center')
- # Cria o rótulo "Informe a URL do vídeo:"
- label = tk.Label(window, text="Informe a URL do vídeo:")
- 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
- # Cria a caixa de texto
- entry = tk.Entry(window, width=80)
- 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
- # Associa o evento de clique com botão direito do mouse à função do menu de contexto
- entry.bind("<Button-3>", show_context_menu)
- # Cria o menu de contexto do Windows
- menu = tk.Menu(entry, tearoff=False)
- menu.add_command(label="Colar", command=lambda: entry.event_generate("<<Paste>>"))
- # Cria o botão de download
- button = tk.Button(window, text="Baixar vídeo", command=download_video)
- 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
- # Cria o rótulo para exibir a mensagem de status
- status_label = tk.Label(window, text="", fg="green")
- status_label.grid(row=2, column=0, sticky="w", padx=10)
- # Cria o botão "Configurar Pasta de Destino"
- config_button = tk.Button(window, text="Configurar Pasta de Destino", command=configure_destination_folder)
- config_button.grid(row=2, column=0, padx=10, pady=10, sticky="w") # Posiciona na terceira linha, primeira coluna, com margem de 10 pixels à esquerda
- # Cria a label para exibir o caminho da pasta de destino
- destination_label = HyperlinkLabel(window, text="")
- destination_label.grid(row=3, column=0, padx=10, pady=5, sticky="w") # Posiciona na quarta linha, primeira coluna, com margem de 5 pixels à esquerda
- # Verifica se o arquivo JSON existe e carrega o caminho da pasta de destino se existir
- if os.path.isfile("destination_path.json"):
- destination_path = load_destination_path()
- destination_label.config(text="Pasta de destino: " + destination_path)
- # Cria o botão "Renomear para MP4"
- rename_button = tk.Button(window, text="Renomear para MP4", command=rename_mp4)
- rename_button.grid(row=1, column=2, padx=5, pady=10) # Posiciona na segunda linha, terceira coluna (canto superior direito), com margem de 10 pixels à direita
- # Inicia o loop principal da janela
- window.mainloop()
Add Comment
Please, Sign In to add comment