Guest User

youtube_downloader.py

a guest
Dec 4th, 2024
547
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.17 KB | None | 1 0
  1. import yt_dlp
  2. import tkinter as tk
  3. from tkinter import messagebox, filedialog
  4.  
  5. def download_media():
  6. url = url_entry.get()
  7. if not url:
  8. messagebox.showerror("Error", "Please enter a YouTube video or playlist URL.")
  9. return
  10.  
  11. ydl_opts = {
  12. 'outtmpl': output_entry.get() or '%(title)s.%(ext)s',
  13. 'writesubtitles': subtitles_var.get(),
  14. 'writethumbnail': thumbnail_var.get(),
  15. 'noplaylist': not playlist_var.get(),
  16. }
  17.  
  18. if audio_only_var.get():
  19. ydl_opts.update({
  20. 'format': 'bestaudio/best',
  21. 'postprocessors': [{
  22. 'key': 'FFmpegExtractAudio',
  23. 'preferredcodec': audio_format_var.get(),
  24. 'preferredquality': audio_quality_var.get(),
  25. }],
  26. })
  27. else:
  28. format_choice = video_format_var.get()
  29. format_code = video_formats.get(format_choice, 'bestvideo+bestaudio/best')
  30. ydl_opts['format'] = format_code
  31.  
  32. try:
  33. with yt_dlp.YoutubeDL(ydl_opts) as ydl:
  34. ydl.download([url])
  35. messagebox.showinfo("Success", "Download completed successfully.")
  36. except Exception as e:
  37. messagebox.showerror("Error", f"An error occurred: {e}")
  38.  
  39. def browse_output():
  40. filename = filedialog.asksaveasfilename(defaultextension='.%(ext)s', filetypes=[('All Files', '*.*')])
  41. if filename:
  42. output_entry.delete(0, tk.END)
  43. output_entry.insert(0, filename)
  44.  
  45. # Create the main window
  46. root = tk.Tk()
  47. root.title("YouTube Video Downloader")
  48.  
  49. # URL Entry
  50. tk.Label(root, text="YouTube URL:").grid(row=0, column=0, sticky='e')
  51. url_entry = tk.Entry(root, width=50)
  52. url_entry.grid(row=0, column=1, columnspan=3, pady=5)
  53.  
  54. # Output Template
  55. tk.Label(root, text="Output Template:").grid(row=1, column=0, sticky='e')
  56. output_entry = tk.Entry(root, width=50)
  57. output_entry.grid(row=1, column=1, columnspan=2, pady=5)
  58. output_entry.insert(0, '%(title)s.%(ext)s')
  59. tk.Button(root, text="Browse...", command=browse_output).grid(row=1, column=3, pady=5)
  60.  
  61. # Video Format
  62. tk.Label(root, text="Video Format:").grid(row=2, column=0, sticky='e')
  63. video_format_var = tk.StringVar(value='Best Quality')
  64. video_formats = {
  65. 'Best Quality': 'bestvideo+bestaudio/best',
  66. 'High Quality (1080p)': 'bestvideo[height<=1080]+bestaudio/best',
  67. 'Medium Quality (720p)': 'bestvideo[height<=720]+bestaudio/best',
  68. 'Low Quality (480p)': 'bestvideo[height<=480]+bestaudio/best',
  69. 'Very Low Quality (360p)': 'bestvideo[height<=360]+bestaudio/best',
  70. 'WebM Format': 'bestvideo[ext=webm]+bestaudio[ext=webm]/best[ext=webm]',
  71. 'MP4 Format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]',
  72. }
  73. video_format_menu = tk.OptionMenu(root, video_format_var, *video_formats.keys())
  74. video_format_menu.grid(row=2, column=1, columnspan=3, pady=5, sticky='w')
  75.  
  76. # Audio Only Option
  77. audio_only_var = tk.BooleanVar()
  78. tk.Checkbutton(root, text="Audio Only", variable=audio_only_var).grid(row=3, column=0, sticky='w')
  79.  
  80. # Audio Format
  81. tk.Label(root, text="Audio Format:").grid(row=3, column=1, sticky='e')
  82. audio_format_var = tk.StringVar(value='mp3')
  83. audio_format_menu = tk.OptionMenu(root, audio_format_var, 'mp3', 'aac', 'wav', 'm4a')
  84. audio_format_menu.grid(row=3, column=2, sticky='w')
  85.  
  86. # Audio Quality
  87. tk.Label(root, text="Audio Quality (kbps):").grid(row=3, column=3, sticky='e')
  88. audio_quality_var = tk.StringVar(value='192')
  89. audio_quality_entry = tk.Entry(root, textvariable=audio_quality_var, width=5)
  90. audio_quality_entry.grid(row=3, column=4, sticky='w')
  91.  
  92. # Thumbnail Option
  93. thumbnail_var = tk.BooleanVar()
  94. tk.Checkbutton(root, text="Download Thumbnail", variable=thumbnail_var).grid(row=4, column=0, sticky='w')
  95.  
  96. # Subtitles Option
  97. subtitles_var = tk.BooleanVar()
  98. tk.Checkbutton(root, text="Download Subtitles", variable=subtitles_var).grid(row=4, column=1, sticky='w')
  99.  
  100. # Playlist Option
  101. playlist_var = tk.BooleanVar()
  102. tk.Checkbutton(root, text="Download Playlist", variable=playlist_var).grid(row=4, column=2, sticky='w')
  103.  
  104. # Download Button
  105. download_button = tk.Button(root, text="Download", command=download_media)
  106. download_button.grid(row=5, column=0, columnspan=5, pady=10)
  107.  
  108. root.mainloop()
  109.  
Advertisement
Add Comment
Please, Sign In to add comment