यह सरल GUI प्रोजेक्ट आपको मीडिया फ़ाइलों और क्रॉस-प्लेटफ़ॉर्म प्रोग्रामिंग के बारे में सिखाएगा।

एक वीडियो प्लेयर बनाने से आपको अनुकूलित थीम और शैली में अपने पसंदीदा वीडियो का आनंद लेने में मदद मिल सकती है। आप वीडियो प्लेबैक को आसान बना सकते हैं, अपने ऐप के बटन और मेनू डिज़ाइन कर सकते हैं, और जो भी कार्यक्षमता आप चाहते हैं उसे जोड़ सकते हैं।

यह प्रोजेक्ट आपको क्रॉस-प्लेटफ़ॉर्म डेस्कटॉप ऐप बनाने, मल्टीमीडिया प्रोसेसिंग और इवेंट को संभालने का व्यावहारिक अनुभव भी देगा। जानें कि आप टिंकर, वीएलसी और डेटाटाइम मॉड्यूल का उपयोग करके वीडियो मीडिया प्लेयर कैसे बना सकते हैं।

टिंकर, वीएलसी और डेटटाइम मॉड्यूल

टिंकर आपको डेस्कटॉप एप्लिकेशन बनाने की अनुमति देता है। यह बटन, लेबल और टेक्स्ट बॉक्स जैसे विभिन्न प्रकार के विजेट प्रदान करता है जो एप्लिकेशन विकसित करना आसान बनाते हैं एक साधारण जीयूआई कैलेंडर, एक कैलकुलेटर, या एक कार्य सूची प्रबंधक. टिंकर स्थापित करने के लिए, एक टर्मिनल खोलें और चलाएं:

pip install tkinter

पायथन-वीएलसी मॉड्यूल वीएलसी (वीडियोलैन क्लाइंट) मीडिया प्लेयर लाइब्रेरी के लिए एक पायथन बाइंडिंग है। आप इसे लागू करने के लिए इस मॉड्यूल का उपयोग कर सकते हैं

instagram viewer
वीएलसी की विशेषताएं और अपना स्वयं का अनुकूलित मीडिया प्लेयर बनाएं। वीएलसी स्थापित करने के लिए, चलाएँ:

pip install python-vlc

दिनांक समय मॉड्यूल पायथन में बनाया गया है और विभिन्न तिथियों, समय, अंतराल और क्षेत्रों का प्रतिनिधित्व करने के लिए कक्षाएं और फ़ंक्शन प्रदान करता है।

आप इस प्रोजेक्ट का सोर्स कोड इसमें पा सकते हैं गिटहब रिपॉजिटरी.

आवश्यक मॉड्यूल आयात करें. एक वर्ग परिभाषित करें, मीडियाप्लेयर ऐप. कंस्ट्रक्टर विधि को परिभाषित करें और मुख्य एप्लिकेशन विंडो को प्रारंभ करने के लिए इसे कॉल करें। वीडियो मीडिया प्लेयर का शीर्षक, आयाम और पृष्ठभूमि रंग सेट करें। बुलाएं इनिशियलाइज़_प्लेयर तरीका।

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()

एक विधि परिभाषित करें, इनिशियलाइज़_प्लेयर. इसकी कार्यक्षमताओं के साथ इंटरैक्ट करने के लिए वीएलसी मीडिया प्लेयर का एक उदाहरण बनाएं। इस उदाहरण का उपयोग करके, एक मीडिया प्लेयर ऑब्जेक्ट बनाएं जिसका उपयोग आप मीडिया प्लेबैक को प्रबंधित करने के लिए कर सकते हैं। एक वेरिएबल प्रारंभ करें, मौजूदा फ़ाइल वर्तमान में चल रहे वीडियो पर नज़र रखने के लिए। प्लेबैक स्थिति सेट करें और कॉल करें create_widgets तरीका।

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()

को परिभाषित करो create_widgets तरीका। एक कैनवास विजेट बनाएं और उसे रखने के लिए मूल तत्व, उसकी पृष्ठभूमि का रंग, चौड़ाई और ऊंचाई पास करें। एक बनाने के फ़ाइल का चयन करें उस वीडियो फ़ाइल का चयन करने के लिए बटन जिसे आप चलाना चाहते हैं। मूल तत्व, उसे प्रदर्शित होने वाला पाठ, फ़ॉन्ट शैलियाँ और वह आदेश सेट करें जो उसे क्लिक करने पर चलना चाहिए।

बीता हुआ समय और वीडियो की अवधि प्रदर्शित करने के लिए एक लेबल बनाएं। मूल तत्व, पाठ, फ़ॉन्ट शैली, फ़ॉन्ट रंग और पृष्ठभूमि रंग सेट करें। वीडियो प्लेबैक को नियंत्रित करने और उसे पृष्ठभूमि रंग देने के लिए एक फ़्रेम बनाएं।

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)

को परिभाषित करो खेल बटन, विराम बटन, रुकना बटन, तेजी से आगे बढ़ना बटन, और रिवाइंड बटन। एक वीडियो प्रगति बार विजेट बनाएं. वह मूल तत्व सेट करें जिसमें आप इसे रखना चाहते हैं, वीडियो प्लेबैक स्थिति, पृष्ठभूमि रंग और मोटाई को अपडेट करने की विधि।

इन सभी तत्वों को दोनों दिशाओं में उचित पैडिंग के साथ व्यवस्थित करें।

 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)

एक विधि परिभाषित करें, फ़ाइल का चयन करें. किसी वीडियो फ़ाइल का चयन करने के लिए फ़ाइल संवाद बॉक्स खोलें .mp4 या .एवीआई विस्तार। यदि आप कोई फ़ाइल चुनते हैं, तो उसका पथ लोड करें और समय लेबल को उसकी अवधि के साथ अपडेट करें। चयनित वीडियो चलाना प्रारंभ करें.

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()

एक विधि परिभाषित करें, get_duration_str जिसका उपयोग आप वीडियो की कुल अवधि की गणना करने के लिए करेंगे। यदि एप्लिकेशन कोई वीडियो चला रहा है, तो उसकी अवधि मिलीसेकंड में प्राप्त करें और इसे इसमें परिवर्तित करें एचएच: एमएम: एसएस प्रारूप। यदि कोई वीडियो नहीं चल रहा है, तो वापस लौटें 00:00:00 डिफ़ॉल्ट मान के रूप में.

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"

एक विधि परिभाषित करें, वीडियो चलाएं. यदि कोई वीडियो नहीं चल रहा है, तो चयनित फ़ाइल पथ का उपयोग करके एक नया मीडिया ऑब्जेक्ट बनाएं। मीडिया को पहले बनाए गए कैनवास के साथ संबद्ध करें और वीडियो प्लेबैक आरंभ करें। अद्यतन करें प्ले_वीडियो को बताएं सत्य.

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

एक विधि परिभाषित करें, तेजी से आगे बढ़ना. यदि कोई वीडियो चल रहा है, तो बीता हुआ वर्तमान समय प्राप्त करें और उसमें 10,000 मिलीसेकंड जोड़ें। नया प्लेबैक समय सेट करें. इसी प्रकार, एक विधि परिभाषित करें, अतीत जो 10,000 मिलीसेकंड घटा देता है।

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)

एक विधि परिभाषित करें, रोकें_वीडियो. यदि आपने कोई वीडियो प्लेबैक शुरू किया है और उसे रोक दिया है, तो कॉल करें खेल इसे फिर से शुरू करने की विधि. अन्यथा, कॉल करें विराम विधि और दोनों मामलों में तदनुसार यूआई को अद्यतन करें।

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")

एक विधि परिभाषित करें, रुकना। यदि कोई वीडियो चल रहा है, तो उसे रोकें और समय लेबल रीसेट करें। एक विधि परिभाषित करें, सेट_वीडियो_स्थिति. यदि कोई वीडियो चल रहा है, तो कुल अवधि प्राप्त करें और मिलीसेकंड में वांछित स्थिति की गणना करें। वीडियो प्लेबैक समय को परिकलित स्थिति पर सेट करें।

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)

एक विधि परिभाषित करें, अद्यतन_वीडियो_प्रगति. यदि कोई वीडियो चल रहा है, तो कुल अवधि और वर्तमान प्लेबैक समय प्राप्त करें, और प्रगति प्रतिशत की गणना करें। इस परिकलित मान का उपयोग करके प्रगति पट्टी को अद्यतन करें। वर्तमान समय और कुल अवधि को प्रारूपित करें एचएच: एमएम: एसएस प्रारूप।

1,000 मिलीसेकंड के बाद फिर से चलाने के लिए इस विधि को शेड्यूल करें। यह एक लूप बनाता है जो वीडियो चलने के दौरान वीडियो की प्रगति और समय लेबल को लगातार अपडेट करता है।

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)

एक वर्ग परिभाषित करें, वीडियो प्रोग्रेसबार जो विरासत में मिला है टी.के. पैमाना विजेट. एक कंस्ट्रक्टर को परिभाषित करें जो प्रगति पट्टी की प्रारंभिक स्थिति और व्यवहार निर्धारित करता है। ठीक शोवैल्यू का विकल्प असत्य वर्तमान मूल्य प्रदर्शित करने से बचने के लिए.

प्रगति को 0 से 100 की सीमा के साथ प्रारंभ करें। इसे चलाने के लिए ओरिएंटेशन, लंबाई, कमांड और प्रगति पट्टी पर अनुकूलन सेट करें। किसी ईवेंट को प्रगति पट्टी पर इस प्रकार बाइंड करें कि जब आप उस पर क्लिक करें, तो वह निष्पादित हो जाए क्लिक पर तरीका।

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)

एक विधि परिभाषित करें, क्लिक पर. जांचें कि क्या प्रगति पट्टी अक्षम नहीं है और क्लिक की स्थिति के आधार पर नए मान की गणना करता है। प्रगति बार मान को तदनुसार अद्यतन करें।

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

का एक उदाहरण बनाएं मीडियाप्लेयर ऐप कक्षा, और कॉल करें अद्यतन_वीडियो_प्रगति तरीका। मुख्य घेरा() फ़ंक्शन पायथन को टिंकर ईवेंट लूप चलाने और विंडो बंद करने तक ईवेंट सुनने के लिए कहता है।

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

प्रोग्राम चलाने पर, वीडियो मीडिया प्लेयर पॉप अप हो जाता है। इसमें शामिल है फ़ाइल का चयन करें बटन, समय लेबल, वीडियो प्लेबैक को नियंत्रित करने के लिए बटन और एक वीडियो प्रगति बार।

जब आप कोई वीडियो चुनते हैं, तो यह शुरुआत से स्वचालित रूप से चलेगा, प्रारंभ समय और समय लेबल की अवधि को अपडेट करेगा।

मारने पर विराम बटन, वीडियो रुक जाता है, और बदल जाता है फिर शुरू करना बटन। क्लिक करने पर तेजी से आगे बढ़ना बटन, वीडियो 10 सेकंड आगे बढ़ जाता है।

इसी प्रकार, मारने पर रिवाइंड बटन, यह 10 सेकंड पीछे चला जाता है। दबाने पर रुकना बटन, वीडियो प्लेबैक रुक जाता है। आप वीडियो के किसी भी हिस्से में जाने के लिए प्रगति पट्टी पर किसी भी क्षेत्र को खींच या क्लिक कर सकते हैं और समय लेबल बीता हुआ समय पढ़ता है।

आप उपशीर्षक लोड करने और प्रदर्शित करने का विकल्प जोड़कर इस वीडियो मीडिया प्लेयर को बढ़ा सकते हैं। आप पहलू अनुपात को बदलने, वॉल्यूम को नियंत्रित करने और वीडियो के भाग को लूप करने जैसी सुविधाओं पर भी विचार कर सकते हैं।

इन सुविधाओं को लागू करने के लिए, आप Pygame मॉड्यूल का पता लगा सकते हैं। Pygame बहुमुखी है, उपयोग में आसान है और Tkinter के साथ अच्छी तरह से एकीकृत है। लाइब्रेरी अनुकूलन की अनुमति देती है, इसमें इंटरैक्टिव सुविधाएं हैं, और इसे किसी भी प्लेटफ़ॉर्म पर चलाया जा सकता है।