Reverse Sales Tax Calculator
Original Price:
Tax Amount:
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()
pip install pytube moviepybrew install ffmpegsudo apt install ffmpegpython youtube_to_mp3.pyReverse Sales Tax Calculator Reverse Sales Tax Calculator Total Amount...