Tuesday, January 28, 2025

Youtube to MP3 Converter

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)

  1. Python इंस्टॉल करें (3.6 या नया) python.org से
  2. Required Libraries इंस्टॉल करें:
    pip install pytube moviepy
  3. FFmpeg इंस्टॉल करें:
    • Windows:
    • macOS:
      brew install ffmpeg
    • Linux (Ubuntu/Debian):
      sudo apt install ffmpeg
  4. कोड चलाने के लिए:
    python youtube_to_mp3.py

उपयोग विधि (Usage)

  1. YouTube URL पेस्ट करें
  2. MP3 क्वालिटी चुनें (128k, 192k, 320k)
  3. आउटपुट फोल्डर सेलेक्ट करें
  4. "Convert" बटन क्लिक करें
  5. MP3 फाइल सेलेक्टेड फोल्डर में मिलेगी

नोट:

  • यह टूल केवल पर्सनल यूज के लिए है
  • कॉपीराइटेड कंटेंट को डाउनलोड करने से पहले परमिशन लें
  • नेटवर्क कनेक्शन जरूरी है

reverse sales tax calculator

Reverse Sales Tax Calculator Reverse Sales Tax Calculator Total Amount...