Овај једноставан ГУИ пројекат ће вас научити о медијским датотекама и програмирању на више платформи.

Прављење видео плејера може вам помоћи да уживате у омиљеним видео снимцима у прилагођеној теми и стилу. Можете да учините репродукцију видео записа глаткијом, дизајнирате дугмад и меније своје апликације и додате било коју функционалност коју желите.

Овај пројекат ће вам такође пружити практично искуство у изградњи апликација за десктоп рачунаре на више платформи, обради мултимедије и руковању догађајима. Откријте како можете да направите видео медијски плејер користећи Ткинтер, ВЛЦ и модул датума и времена.

Модул Ткинтер, ВЛЦ и Датетиме

Ткинтер вам омогућава да креирате десктоп апликације. Нуди разне виџете попут дугмади, налепница и оквира за текст који олакшавају развој апликација као што су једноставан ГУИ календар, калкулатор или а менаџер листе обавеза. Да бисте инсталирали Ткинтер, отворите терминал и покрените:

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

Дефинишите метод, инитиализе_плаиер. Направите инстанцу ВЛЦ медиа плејера да бисте остварили интеракцију са његовим функционалностима. Користећи ову инстанцу, креирајте објекат медија плејера који можете да користите за управљање репродукцијом медија. Иницијализујте променљиву, Тренутна датотека да бисте пратили видео који се тренутно репродукује. Подесите стања репродукције и позовите цреате_видгетс методом.

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

Дефинишите цреате_видгетс методом. Направите виџет за платно и проследите родитељски елемент у који ћете га поставити, његову боју позадине, ширину и висину. Створити Изаберите фајл дугме за избор видео датотеке коју желите да репродукујете. Подесите надређени елемент, текст који треба да прикаже, стилове фонта и команду коју треба да покрене када кликнете на њега.

Направите ознаку да бисте приказали протекло време и трајање видеа. Подесите родитељски елемент, текст, стилове фонта, боју фонта и боју позадине. Направите оквир за контролу репродукције видео записа и дајте му боју позадине.

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)

Дефинишите метод, изаберите фајл. Отворите дијалошки оквир датотеке да бисте изабрали видео датотеку са .мп4 или .ави проширење. Ако изаберете било коју датотеку, учитајте њену путању и ажурирајте временску ознаку њеним трајањем. Почните да репродукујете изабрани видео.

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

Дефинишите метод, гет_дуратион_стр коју ћете користити за израчунавање укупног трајања видео записа. Ако апликација пушта видео, добијте његово трајање у милисекундама и конвертујте га у ХХ: ММ: СС формату. Ако се видео не репродукује, вратите се 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)

Дефинишите метод, упдате_видео_прогресс. Ако се видео репродукује, преузмите укупно трајање и тренутно време репродукције и израчунајте проценат напретка. Ажурирајте траку напретка користећи ову израчунату вредност. Форматирајте тренутно време и укупно трајање у ХХ: ММ: СС формату.

Закажите да се овај метод поново покрене након 1000 милисекунди. Ово ствара петљу која континуирано ажурира видео напредак и временске ознаке док се видео репродукује.

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 секунди уназад. Притиском на Зауставити дугме, репродукција видео записа се зауставља. Можете да превучете или кликнете на било коју област на траци напретка да бисте прешли на било који део видео снимка, а временска ознака показује протекло време.

Можете побољшати овај видео медиа плејер додавањем опције за учитавање и приказ титлова. Такође бисте могли да размотрите функције као што су промена размера, контрола јачине звука и понављање дела видео снимка.

Да бисте имплементирали ове функције, можете истражити модул Пигаме. Пигаме је свестран, једноставан за коришћење и добро се интегрише са Ткинтером. Библиотека омогућава прилагођавање, има интерактивне функције и може да ради на било којој платформи.