SHARE
    TWEET
    Najeebsk

    Youtube.pyw

    Jun 1st, 2024
    796
    0
    Never
    Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
    Python 3.16 KB | None | 0 0
    1. import tkinter as tk
    2. from tkinter import ttk, messagebox, filedialog
    3. from pytube import YouTube
    4. from pydub import AudioSegment
    5. import os
    6. def update_progress(stream, chunk, bytes_remaining):
    7. total_size = stream.filesize
    8. bytes_downloaded = total_size - bytes_remaining
    9. percentage = bytes_downloaded / total_size * 100
    10. progress_var.set(percentage)
    11. root.update_idletasks()
    12. def download_video():
    13. url = url_entry.get()
    14. quality = quality_var.get()
    15. save_path = path_entry.get()
    16. if not url:
    17. messagebox.showerror("Error", "Please enter the YouTube URL")
    18. return
    19. try:
    20. yt = YouTube(url, on_progress_callback=update_progress)
    21. if quality == "Audio (MP3)":
    22. stream = yt.streams.filter(only_audio=True).first()
    23. out_file = stream.download(output_path=save_path)
    24. base, ext = os.path.splitext(out_file)
    25. mp3_file = base + '.mp3'
    26. AudioSegment.from_file(out_file).export(mp3_file, format="mp3")
    27. os.remove(out_file)
    28. messagebox.showinfo("Success", f"Downloaded and converted to MP3:\n{mp3_file}")
    29. else:
    30. stream = yt.streams.filter(progressive=True, res=quality, file_extension='mp4').first()
    31. if stream:
    32. stream.download(output_path=save_path)
    33. messagebox.showinfo("Success", f"Downloaded video in {quality}:\n{stream.default_filename}")
    34. else:
    35. messagebox.showerror("Error", f"No stream found for quality {quality}")
    36. except Exception as e:
    37. messagebox.showerror("Error", f"Failed to download video: {e}")
    38. def browse_path():
    39. folder_selected = filedialog.askdirectory()
    40. path_entry.delete(0, tk.END)
    41. path_entry.insert(0, folder_selected)
    42. # GUI Setup
    43. root = tk.Tk()
    44. root.title("Najeeb YouTube Video Downloader")
    45. # URL Entry
    46. url_label = tk.Label(root, text="YouTube URL:")
    47. url_label.grid(row=0, column=0, padx=10, pady=10)
    48. url_entry = tk.Entry(root, width=50)
    49. url_entry.grid(row=0, column=1, padx=10, pady=10)
    50. # Quality Selection
    51. quality_label = tk.Label(root, text="Select Quality:")
    52. quality_label.grid(row=1, column=0, padx=10, pady=10)
    53. quality_var = tk.StringVar(value="720p")
    54. quality_options = ["144p", "360p", "480p", "720p", "1080p", "Audio (MP3)"]
    55. quality_menu = ttk.Combobox(root, textvariable=quality_var, values=quality_options, state="readonly")
    56. quality_menu.grid(row=1, column=1, padx=10, pady=10)
    57. # Save Path
    58. path_label = tk.Label(root, text="Save to:")
    59. path_label.grid(row=2, column=0, padx=10, pady=10)
    60. path_entry = tk.Entry(root, width=50)
    61. path_entry.grid(row=2, column=1, padx=10, pady=10)
    62. browse_button = tk.Button(root, text="Browse", command=browse_path)
    63. browse_button.grid(row=2, column=2, padx=10, pady=10)
    64. # Progress Bar
    65. progress_var = tk.DoubleVar()
    66. progress_bar = ttk.Progressbar(root, variable=progress_var, maximum=100)
    67. progress_bar.grid(row=3, column=0, columnspan=3, padx=10, pady=20, sticky='ew')
    68. # Download Button
    69. download_button = tk.Button(root, text="Download", command=download_video, bg='lightblue')
    70. download_button.grid(row=4, column=1, padx=10, pady=20)
    71. root.mainloop()
    Advertisement
    Add Comment
    Please, Sign In to add comment
    Public Pastes
    We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
    Not a member of Pastebin yet?
    Sign Up, it unlocks many cool features!

    AltStyle によって変換されたページ (->オリジナル) /