YouTube to MP3 Converter Python Code
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
from pytube import YouTube
from moviepy.editor import AudioFileClip
import os
import re
import threading
class YouTubeToMP3Converter:
def __init__(self, root):
self.root = root
self.root.title("YouTube to MP3 Converter")
self.output_folder = os.getcwd()
self.setup_ui()
def setup_ui(self):
# URL Input
ttk.Label(self.root, text="YouTube URL:").grid(row=0, column=0, padx=5, pady=5, sticky='w')
self.url_entry = ttk.Entry(self.root, width=50)
self.url_entry.grid(row=0, column=1, columnspan=2, padx=5, pady=5, sticky='we')
# Quality Selection
ttk.Label(self.root, text="Bitrate:").grid(row=1, column=0, padx=5, pady=5, sticky='w')
self.quality_var = tk.StringVar()
self.quality_combo = ttk.Combobox(self.root, textvariable=self.quality_var,
values=['128k', '192k', '320k'], state='readonly')
self.quality_combo.current(1)
self.quality_combo.grid(row=1, column=1, padx=5, pady=5, sticky='w')
# Output Folder
self.folder_btn = ttk.Button(self.root, text="Choose Output Folder", command=self.choose_folder)
self.folder_btn.grid(row=2, column=0, columnspan=3, padx=5, pady=5, sticky='we')
# Convert Button
self.convert_btn = ttk.Button(self.root, text="Convert", command=self.start_conversion)
self.convert_btn.grid(row=3, column=0, columnspan=3, padx=5, pady=5, sticky='we')
# Status Information
self.status_label = ttk.Label(self.root, text="Ready")
self.status_label.grid(row=4, column=0, columnspan=3, padx=5, pady=5, sticky='w')
# Progress Bar
self.progress = ttk.Progressbar(self.root, orient='horizontal', length=200, mode='determinate')
self.progress.grid(row=5, column=0, columnspan=3, padx=5, pady=5, sticky='we')
def choose_folder(self):
folder = filedialog.askdirectory()
if folder:
self.output_folder = folder
self.status_label.config(text=f"Output Folder: {folder}")
def start_conversion(self):
url = self.url_entry.get()
if not url:
messagebox.showerror("Error", "Please enter a YouTube URL")
return
if not self.output_folder:
messagebox.showerror("Error", "Please select an output folder")
return
bitrate = self.quality_var.get()
threading.Thread(target=self.convert, args=(url, bitrate), daemon=True).start()
def on_progress(self, stream, chunk, bytes_remaining):
total_size = stream.filesize
bytes_downloaded = total_size - bytes_remaining
percentage = (bytes_downloaded / total_size) * 100
self.progress['value'] = percentage
self.status_label.config(text=f"Downloading... {percentage:.1f}%")
self.root.update_idletasks()
def convert(self, url, bitrate):
try:
self.convert_btn.config(state='disabled')
self.status_label.config(text="Initializing...")
# Create YouTube object
yt = YouTube(url, on_progress_callback=self.on_progress)
# Get best audio stream
audio_streams = yt.streams.filter(only_audio=True)
if not audio_streams:
raise Exception("No audio streams available")
best_stream = audio_streams.order_by('abr').desc().first()
# Download audio
self.status_label.config(text="Downloading audio...")
download_path = best_stream.download(output_path=self.output_folder)
# Convert to MP3
self.status_label.config(text="Converting to MP3...")
self.progress['value'] = 50
# Sanitize filename
title = re.sub(r'[\\/*?:"<>|]', "", yt.title)
output_path = os.path.join(self.output_folder, f"{title}.mp3")
# Handle duplicate filenames
counter = 1
while os.path.exists(output_path):
output_path = os.path.join(self.output_folder, f"{title} ({counter}).mp3")
counter += 1
# Convert using MoviePy
audio_clip = AudioFileClip(download_path)
audio_clip.write_audiofile(output_path, bitrate=bitrate)
audio_clip.close()
# Clean up temporary file
os.remove(download_path)
self.status_label.config(text="Conversion complete!")
self.progress['value'] = 100
messagebox.showinfo("Success", "File converted successfully")
except Exception as e:
messagebox.showerror("Error", str(e))
finally:
self.convert_btn.config(state='normal')
self.progress['value'] = 0
if __name__ == "__main__":
root = tk.Tk()
app = YouTubeToMP3Converter(root)
root.mainloop()
सेटअप निर्देश (Setup Instructions)
- Python इंस्टॉल करें (3.6 या नया) python.org से
- Required Libraries इंस्टॉल करें:
pip install pytube moviepy
- FFmpeg इंस्टॉल करें:
- Windows:
- macOS:
brew install ffmpeg
- Linux (Ubuntu/Debian):
sudo apt install ffmpeg
- कोड चलाने के लिए:
python youtube_to_mp3.py
उपयोग विधि (Usage)
- YouTube URL पेस्ट करें
- MP3 क्वालिटी चुनें (128k, 192k, 320k)
- आउटपुट फोल्डर सेलेक्ट करें
- "Convert" बटन क्लिक करें
- MP3 फाइल सेलेक्टेड फोल्डर में मिलेगी
नोट:
- यह टूल केवल पर्सनल यूज के लिए है
- कॉपीराइटेड कंटेंट को डाउनलोड करने से पहले परमिशन लें
- नेटवर्क कनेक्शन जरूरी है