Bu basit GUI projesi size medya dosyaları ve platformlar arası programlama hakkında bilgi verecektir.

Bir video oynatıcı oluşturmak, en sevdiğiniz videoların keyfini özelleştirilmiş bir tema ve tarzda çıkarmanıza yardımcı olabilir. Video oynatmayı daha sorunsuz hale getirebilir, uygulamanızın düğmelerini ve menülerini tasarlayabilir ve istediğiniz işlevselliği ekleyebilirsiniz.

Bu proje ayrıca size platformlar arası masaüstü uygulamaları oluşturma, multimedya işleme ve olayları yönetme konularında uygulamalı deneyim kazandıracaktır. Tkinter, VLC ve tarih/saat modülünü kullanarak nasıl video medya oynatıcısı yapabileceğinizi keşfedin.

Tkinter, VLC ve Datetime Modülü

Tkinter, masaüstü uygulamaları oluşturmanıza olanak tanır. gibi uygulamaları geliştirmeyi kolaylaştıran düğmeler, etiketler ve metin kutuları gibi çeşitli widget'lar sunar. basit bir GUI takvimi, hesap makinesi veya yapılacaklar listesi yöneticisi. Tkinter'ı kurmak için bir terminal açın ve şunu çalıştırın:

pip install tkinter

bu

instagram viewer
piton-vlc modülü, VLC (VideoLAN İstemcisi) medya oynatıcı kitaplığı için bir Python bağlamasıdır. uygulamak için bu modülü kullanabilirsiniz. VLC'nin özellikleri ve kendi özelleştirilmiş medya oynatıcınızı oluşturun. VLC'yi yüklemek için şunu çalıştırın:

pip install python-vlc

bu tarih saat modül, Python'da yerleşiktir ve farklı tarihleri, saatleri, aralıkları ve bölgeleri temsil eden sınıflar ve işlevler sağlar.

Bu projenin kaynak kodunu kendi içinde bulabilirsiniz. GitHub deposu.

Gerekli modülleri içe aktarın. Bir sınıf tanımlayın, Medya Oynatıcı Uygulaması. Yapıcı yöntemini tanımlayın ve ana uygulama penceresini başlatmak için onu çağırın. Video ortam yürütücüsünün başlığını, boyutlarını ve arka plan rengini ayarlayın. Ara başlat_oynatıcı yöntem.

import tkinter as tk
import vlc
from tkinter import filedialog
from datetime import timedelta

classMediaPlayerApp(tk.Tk):
def__init__(self):
super().__init__()
self.title("Media Player")
self.geometry("800x600")
self.configure(bg="#f0f0f0")
self.initialize_player()

Bir yöntem tanımlayın, başlat_oynatıcı. İşlevleriyle etkileşim kurmak için bir VLC ortam yürütücü örneği oluşturun. Bu örneği kullanarak, medya oynatmayı yönetmek için kullanabileceğiniz bir medya oynatıcı nesnesi oluşturun. Bir değişkeni başlat, akım_dosyası Oynatılan videoyu takip etmek için. Oynatma durumlarını ayarlayın ve oluştur_widget'lar yöntem.

definitialize_player(self):
self.instance = vlc.Instance()
self.media_player = self.instance.media_player_new()
self.current_file = None
self.playing_video = False
self.video_paused = False
self.create_widgets()

tanımla oluştur_widget'lar yöntem. Bir tuval widget'ı oluşturun ve yerleştirmek için ana öğeyi, arka plan rengini, genişliğini ve yüksekliğini iletin. Oluşturmak Dosya Seç Oynatmak istediğiniz video dosyasını seçmek için düğmesine basın. Üst öğeyi, görüntülemesi gereken metni, yazı tipi stillerini ve tıklattığınızda çalıştırması gereken komutu ayarlayın.

Geçen süreyi ve videonun süresini görüntülemek için bir etiket oluşturun. Ana öğeyi, metni, yazı tipi stillerini, yazı tipi rengini ve arka plan rengini ayarlayın. Video oynatmayı kontrol etmek ve ona bir arka plan rengi vermek için bir çerçeve oluşturun.

defcreate_widgets(self):
self.media_canvas = tk.Canvas(self, bg="black", width=800, height=400)
self.media_canvas.pack(pady=10, fill=tk.BOTH, expand=True)
self.select_file_button = tk.Button(
self,
text="Select File",
font=("Arial", 12, "bold"),
command=self.select_file,
)
self.select_file_button.pack(pady=5)
self.time_label = tk.Label(
self,
text="00:00:00 / 00:00:00",
font=("Arial", 12, "bold"),
fg="#555555",
bg="#f0f0f0",
)
self.time_label.pack(pady=5)
self.control_buttons_frame = tk.Frame(self, bg="#f0f0f0")
self.control_buttons_frame.pack(pady=5)

tanımla Oynamak düğme, Duraklat düğme, Durmak düğme, İleri sar düğmesi ve Geri sarma düğme. Bir video ilerleme çubuğu widget'ı oluşturun. Yerleştirmek istediğiniz ana öğeyi, video oynatma konumunu güncelleme yöntemini, arka plan rengini ve kalınlığı ayarlayın.

Tüm bu öğeleri her iki yönde de uygun dolguyla düzenleyin.

 self.play_button = tk.Button(
self.control_buttons_frame,
text="Play",
font=("Arial", 12, "bold"),
bg="#4CAF50",
fg="white",
command=self.play_video,
)
self.play_button.pack(side=tk.LEFT, padx=5, pady=5)
self.pause_button = tk.Button(
self.control_buttons_frame,
text="Pause",
font=("Arial", 12, "bold"),
bg="#FF9800",
fg="white",
command=self.pause_video,
)
self.pause_button.pack(side=tk.LEFT, padx=10, pady=5)
self.stop_button = tk.Button(
self.control_buttons_frame,
text="Stop",
font=("Arial", 12, "bold"),
bg="#F44336",
fg="white",
command=self.stop,
)
self.stop_button.pack(side=tk.LEFT, pady=5)
self.fast_forward_button = tk.Button(
self.control_buttons_frame,
text="Fast Forward",
font=("Arial", 12, "bold"),
bg="#2196F3",
fg="white",
command=self.fast_forward,
)
self.fast_forward_button.pack(side=tk.LEFT, padx=10, pady=5)
self.rewind_button = tk.Button(
self.control_buttons_frame,
text="Rewind",
font=("Arial", 12, "bold"),
bg="#2196F3",
fg="white",
command=self.rewind,
)
self.rewind_button.pack(side=tk.LEFT, pady=5)
self.progress_bar = VideoProgressBar(
self, self.set_video_position, bg="#e0e0e0", highlightthickness=0
)
self.progress_bar.pack(fill=tk.X, padx=10, pady=5)

Bir yöntem tanımlayın, dosya Seç. ile bir video dosyası seçmek için bir dosya iletişim kutusu açın. .mp4 veya .avi eklenti. Herhangi bir dosya seçerseniz, yolunu yükleyin ve zaman etiketini süresiyle güncelleyin. Seçilen videoyu oynatmaya başlayın.

defselect_file(self):
file_path = filedialog.askopenfilename(
filetypes=[("Media Files", "*.mp4 *.avi")]
)
if file_path:
self.current_file = file_path
self.time_label.config(text="00:00:00 / " + self.get_duration_str())
self.play_video()

Bir yöntem tanımlayın, get_duration_str videonun toplam süresini hesaplamak için kullanacağınız Uygulama bir video oynatıyorsa, süresini milisaniye cinsinden alın ve videoya dönüştürün. SS: DD: SS biçim. Oynatılan video yoksa, geri dönün 00:00:00 varsayılan değer olarak.

defget_duration_str(self):
if self.playing_video:
total_duration = self.media_player.get_length()
total_duration_str = str(timedelta(milliseconds=total_duration))[:-3]
return total_duration_str
return"00:00:00"

Bir yöntem tanımlayın, video oynatmak. Bir video oynatılmıyorsa, seçilen dosya yolunu kullanarak yeni bir medya nesnesi oluşturun. Medyayı daha önce oluşturulan tuval ile ilişkilendirin ve video oynatmayı başlatın. güncelle video oynatma belirtmek Doğru.

defplay_video(self):
ifnot self.playing_video:
media = self.instance.media_new(self.current_file)
self.media_player.set_media(media)
self.media_player.set_hwnd(self.media_canvas.winfo_id())
self.media_player.play()
self.playing_video = True

Bir yöntem tanımlayın, ileri sar. Bir video oynatılıyorsa, geçen süreyi alın ve buna 10.000 milisaniye ekleyin. Yeni oynatma süresini ayarlayın. Benzer şekilde, bir yöntem tanımlayın, geri sarma bu 10.000 milisaniyeyi çıkarır.

deffast_forward(self):
if self.playing_video:
current_time = self.media_player.get_time() + 10000
self.media_player.set_time(current_time)

defrewind(self):
if self.playing_video:
current_time = self.media_player.get_time() - 10000
self.media_player.set_time(current_time)

Bir yöntem tanımlayın, videoyu duraklat. Herhangi bir videoyu oynatmaya başlayıp duraklattıysanız, oynamak devam ettirme yöntemi. Aksi takdirde, Duraklat yöntemini kullanın ve kullanıcı arayüzünü her iki durumda da uygun şekilde güncelleyin.

defpause_video(self):
if self.playing_video:
if self.video_paused:
self.media_player.play()
self.video_paused = False
self.pause_button.config(text="Pause")
else:
self.media_player.pause()
self.video_paused = True
self.pause_button.config(text="Resume")

Bir yöntem tanımlayın, durmak. Oynatılan bir video varsa durdurun ve zaman etiketini sıfırlayın. Bir yöntem tanımlayın, set_video_position. Bir video oynatılıyorsa, toplam süreyi alın ve istenen konumu milisaniye cinsinden hesaplayın. Video oynatma süresini hesaplanan konuma ayarlayın.

defstop(self):
if self.playing_video:
self.media_player.stop()
self.playing_video = False
self.time_label.config(text="00:00:00 / " + self.get_duration_str())

defset_video_position(self, value):
if self.playing_video:
total_duration = self.media_player.get_length()
position = int((float(value) / 100) * total_duration)
self.media_player.set_time(position)

Bir yöntem tanımlayın, güncelleme_video_ilerleme. Bir video oynatılıyorsa, toplam süreyi ve mevcut oynatma süresini alın ve ilerleme yüzdesini hesaplayın. Bu hesaplanan değeri kullanarak ilerleme çubuğunu güncelleyin. Geçerli saati ve toplam süreyi formatlayın. SS: DD: SS biçim.

Bu yöntemi 1.000 milisaniye sonra yeniden çalışacak şekilde programlayın. Bu, video oynatılırken video ilerlemesini ve zaman etiketlerini sürekli olarak güncelleyen bir döngü oluşturur.

defupdate_video_progress(self):
ifself.playing_video:
total_duration = self.media_player.get_length()
current_time = self.media_player.get_time()
progress_percentage = (current_time / total_duration) * 100
self.progress_bar.set(progress_percentage)
current_time_str = str(timedelta(milliseconds=current_time))[:-3]
total_duration_str = str(timedelta(milliseconds=total_duration))[:-3]
self.time_label.config(text=f"{current_time_str}/{total_duration_str}")
self.after(1000, self.update_video_progress)

Bir sınıf tanımlayın, Videoİlerleme Çubuğu miras kalan tk. Ölçek Araç. İlerleme çubuğunun başlangıç ​​durumunu ve davranışını ayarlayan bir oluşturucu tanımlayın. Yı kur gösteri değeri seçeneği YANLIŞ Geçerli değeri görüntülemekten kaçınmak için.

İlerlemeyi 0 ila 100 aralığında başlatın. Yönlendirmeyi, uzunluğu, çalıştırması gereken komutu ve özelleştirmeyi ilerleme çubuğuna ayarlayın. İlerleme çubuğuna bir olayı, tıklattığınızda yürütecek şekilde bağlayın. tıklamada yöntem.

classVideoProgressBar(tk.Scale):
def__init__(self, master, command, **kwargs):
kwargs["showvalue"] = False
super().__init__(
master,
from_=0,
to=100,
orient=tk.HORIZONTAL,
length=800,
command=command,
**kwargs,
)
self.bind("", self.on_click)

Bir yöntem tanımlayın, tıklamada. İlerleme çubuğunun devre dışı olup olmadığını kontrol edin ve tıklamanın konumuna göre yeni değeri hesaplar. İlerleme çubuğu değerini uygun şekilde güncelleyin.

defon_click(self, event):
if self.cget("state") == tk.NORMAL:
value = (event.x / self.winfo_width()) * 100
self.set(value)

örneğini oluşturun Medya Oynatıcı Uygulaması sınıf ve çağrı güncelleme_video_ilerleme yöntem. bu Ana döngü() işlevi, Python'a Tkinter olay döngüsünü çalıştırmasını ve siz pencereyi kapatana kadar olayları dinlemesini söyler.

if __name__ == "__main__":
app = MediaPlayerApp()
app.update_video_progress()
app.mainloop()

Programı çalıştırırken, video medya oynatıcı açılır. içerir Dosya Seç düğmesi, zaman etiketleri, video oynatmayı kontrol eden düğmeler ve bir video ilerleme çubuğu.

Bir video seçtiğinizde, başlangıç ​​saatini ve süre etiketlerinin süresini güncelleyerek baştan otomatik olarak oynatılır.

vurulduğunda Duraklat düğmesine bastığınızda, video duraklar ve şuna dönüşür: Sürdürmek düğme. tıklayınca İleri sar düğmesine bastığınızda, video 10 saniye ileri atlar.

Benzer şekilde, vurulduğunda Geri sarma düğmesine bastığınızda 10 saniye geri gider. basıldığında Durmak düğmesine bastığınızda, video oynatma durur. Videonun herhangi bir bölümüne gitmek için ilerleme çubuğundaki herhangi bir alanı sürükleyebilir veya tıklayabilirsiniz ve zaman etiketi geçen süreyi okur.

Altyazıları yüklemek ve görüntülemek için bir seçenek ekleyerek bu video medya oynatıcısını geliştirebilirsiniz. En boy oranını değiştirme, ses seviyesini kontrol etme ve videonun bir bölümünü döngüye alma gibi özellikleri de düşünebilirsiniz.

Bu özellikleri uygulamak için Pygame modülünü keşfedebilirsiniz. Pygame çok yönlüdür, kullanımı kolaydır ve Tkinter ile iyi entegre olur. Kütüphane özelleştirmeye izin verir, etkileşimli özelliklere sahiptir ve herhangi bir platformda çalışabilir.