lostyazilim
tr.link

Python İle Youtube Videolarını Mp3 Formatında Kaydetme Yayınlandı V2

2 Mesajlar 739 Okunma
lstbozum
tr.link

OFffLaZZzz OFffLaZZzz WM Aracı Kullanıcı
  • Üyelik 16.06.2023
  • Yaş/Cinsiyet 40 / E
  • Meslek Esnaf
  • Konum Trabzon
  • Ad Soyad M** K**
  • Mesajlar 28
  • Beğeniler 10 / 13
  • Ticaret 0, (%0)

Birazdaha geliştirip Yayınlayacağım Şuan Kısa Bir Tanıtımı.

 

....... ::::::: TANITIM VİDEOSU ::::::: .......

 

v1

https://www.dailymotion.com/video/x8ltl9n

V2

https://www.dailymotion.com/video/x8luh8f

 

Aşağıdaki kod, basit bir YouTube MP3 indirici uygulaması oluşturur. İşlevleri aşağıdaki gibi özetlenebilir:

  1. Tkinter kütüphanesinden gerekli modüller ve sınıflar içe aktarılır.
  2. download_audio işlevi, kullanıcının girdiği YouTube video URL'sini alır, videoyu indirir ve MP3 formatına dönüştürür. İndirme işlemi ayrı bir iş parçacığında gerçekleştirilir.
  3. download_thread işlevi, videoyu indirirken ilerlemeyi izlemek ve indirme süresini hesaplamak için çağrılan geriçağırım işlevini içerir.
  4. İndirme ilerlemesi, bir Progressbar bileşeniyle görsel olarak gösterilir.
  5. İndirilen dosyanın bilgileri, bir Treeview bileşenine eklenerek gösterilir.
  6. Kullanıcı, indirilen dosyalardan birini seçerek oynatabilir.
  7. Süreleri daha okunabilir hale getirmek için zaman biçimlendirme işlevi (format_time) kullanılır.
  8. Tkinter arayüzü oluşturulur ve uygulama çalıştırılır. Arayüz, bir giriş kutusu, bir indirme düğmesi, bir durum etiketi, bir ilerleme çubuğu ve bir dosya ağacı içerir.

 

Burada Biraz Daha Gelişmiş V2

 

import tkinter as tk
from tkinter import filedialog
from tkinter import Label
from pytube import YouTube
import threading
import os
from tkinter.ttk import Progressbar, Treeview, Scrollbar
import datetime

def download_audio():
    url = entry.get()
    try:
        yt = YouTube(url)
        title = yt.title
        filename = title + ".mp3"
        save_path = filedialog.asksaveasfilename(defaultextension=".mp3", initialfile=filename)
        if save_path:
            status_label.config(text="İndirme Başladı")
            thread = threading.Thread(target=download_thread, args=(yt, save_path))
            thread.start()
    except Exception as e:
        status_label.config(text="Hata: Video indirilemedi: " + str(e))

def download_thread(yt, save_path):
    stream = yt.streams.filter(only_audio=True).first()
    total_bytes = stream.filesize
    bytes_downloaded = 0
    start_time = datetime.datetime.now()

    def progress_callback(stream, chunk, bytes_remaining):
        nonlocal bytes_downloaded
        bytes_downloaded = total_bytes - bytes_remaining
        percent = (bytes_downloaded / total_bytes) * 100
        progress_bar['value'] = percent

        elapsed_time = (datetime.datetime.now() - start_time).total_seconds()
        remaining_time = (elapsed_time / percent) * (100 - percent) if percent != 0 else 0

        status_label.config(text="İndirme Başladı: %{:.1f} Tamamlandı - Kalan Süre: {}".format(percent, format_time(remaining_time)))
        root.update()

    yt.register_on_progress_callback(progress_callback)

    stream.download(output_path="temp")
    temp_filename = stream.default_filename
    temp_path = os.path.join("temp", temp_filename)
    os.rename(temp_path, save_path)
    os.rmdir("temp")
    status_label.config(text="İndirme Tamamlandı: " + save_path)
    progress_bar['value'] = 0

    # İndirme tamamlandığında dosya bilgilerini treeview'a ekle
    file_info = [os.path.basename(save_path), datetime.datetime.now().strftime("%H:%M:%S"), datetime.datetime.now().strftime("%Y-%m-%d")]
    add_to_treeview(file_info)

def add_to_treeview(file_info):
    treeview.insert("", "end", values=file_info)

def play_selected_file(event):
    selected_item = treeview.focus()
    values = treeview.item(selected_item, "values")
    if values:
        filename = values[0]
        os.startfile(filename)  # Bu sadece Windows için çalışır, diğer işletim sistemlerinde uygun bir yöntem kullanılmalı

def format_time(seconds):
    return str(datetime.timedelta(seconds=int(seconds)))

root = tk.Tk()
root.title("YouTube Mp3 İndirici")

entry = tk.Entry(root, width=50)
entry.pack(pady=10)

button = tk.Button(root, text="İndir", command=download_audio)
button.pack(pady=10)

status_label = Label(root, text="", bd=1, relief=tk.SUNKEN, anchor=tk.W)
status_label.pack(side=tk.BOTTOM, fill=tk.X)

# Treeview oluştur
treeview = Treeview(root, columns=("dosya adı", "saati", "tarihi"))
treeview.heading("dosya adı", text="Dosya Adı")
treeview.heading("saati", text="Saat")
treeview.heading("tarihi", text="Tarih")
treeview.pack(pady=10)

# Treeview'da bir öğeye tıklandığında play_selected_file fonksiyonunu çağır
treeview.bind("<ButtonRelease-1>", play_selected_file)

# Treeview'ın yatay kaydırma çubuğunu ekle
scrollbar = Scrollbar(root, orient="horizontal", command=treeview.xview)
scrollbar.pack(fill="x")
treeview.configure(xscrollcommand=scrollbar.set)

progress_bar = Progressbar(root, orient=tk.HORIZONTAL, length=200, mode='determinate')
progress_bar.pack(pady=10)

root.mainloop()

 

Burada ki V1 isteyenler için 

 

import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
from pytube import YouTube
import threading
import os
from tkinter.ttk import Progressbar

def download_audio():
    url = entry.get()
    try:
        yt = YouTube(url)
        title = yt.title
        filename = title + ".mp3"
        save_path = filedialog.asksaveasfilename(defaultextension=".mp3", initialfile=filename)
        if save_path:
            messagebox.showinfo("İndirme Başladı", "İndirme işlemi başlatıldı.")
            thread = threading.Thread(target=download_thread, args=(yt, save_path))
            thread.start()
    except Exception as e:
        messagebox.showerror("Hata", "Video indirilemedi: " + str(e))

def download_thread(yt, save_path):
    stream = yt.streams.filter(only_audio=True).first()
    total_bytes = stream.filesize
    bytes_downloaded = 0

    def progress_callback(stream, chunk, bytes_remaining):
        nonlocal bytes_downloaded
        bytes_downloaded = total_bytes - bytes_remaining
        percent = (bytes_downloaded / total_bytes) * 100
        progress_bar['value'] = percent
        root.update()

    yt.register_on_progress_callback(progress_callback)

    stream.download(output_path="temp")
    temp_filename = stream.default_filename
    temp_path = os.path.join("temp", temp_filename)
    os.rename(temp_path, save_path)
    os.rmdir("temp")
    messagebox.showinfo("İndirme Tamamlandı", "Dosya başarıyla indirildi: " + save_path)
    progress_bar['value'] = 0

root = tk.Tk()
root.title("YouTube Mp3 İndirici")

entry = tk.Entry(root, width=50)
entry.pack(pady=10)

button = tk.Button(root, text="İndir", command=download_audio)
button.pack(pady=10)

status_bar = tk.Label(root, text="", bd=1, relief=tk.SUNKEN, anchor=tk.W)
status_bar.pack(side=tk.BOTTOM, fill=tk.X)

progress_bar = Progressbar(root, orient=tk.HORIZONTAL, length=200, mode='determinate')
progress_bar.pack(pady=10)

root.mainloop()

 

Mesaj 1 defa düzenlendi. Son düzenleyen: OFffLaZZzz (17.06.2023 23:31)

 

 

wmaraci
reklam

OFffLaZZzz OFffLaZZzz WM Aracı Kullanıcı
  • Üyelik 16.06.2023
  • Yaş/Cinsiyet 40 / E
  • Meslek Esnaf
  • Konum Trabzon
  • Ad Soyad M** K**
  • Mesajlar 28
  • Beğeniler 10 / 13
  • Ticaret 0, (%0)

Konu güncellenmiştir.

 

 

Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al