See lihtne GUI projekt õpetab teile meediumifaile ja platvormidevahelist programmeerimist.

Videopleieri loomine aitab teil nautida oma lemmikvideoid kohandatud teema ja stiiliga. Saate muuta video taasesituse sujuvamaks, kujundada oma rakenduse nuppe ja menüüsid ning lisada mis tahes funktsioone, mida soovite.

See projekt annab teile ka praktilise kogemuse platvormideüleste töölauarakenduste loomisel, multimeediumi töötlemisel ja sündmuste käsitlemisel. Avastage, kuidas saate luua videomeediumipleieri, kasutades Tkinterit, VLC-d ja kuupäeva-aja moodulit.

Tkinteri, VLC ja kuupäeva-aja moodul

Tkinter võimaldab teil luua töölauarakendusi. See pakub mitmesuguseid vidinaid, nagu nupud, sildid ja tekstikastid, mis hõlbustavad selliste rakenduste arendamist nagu lihtne GUI kalender, kalkulaatorit või a ülesannete nimekirja haldur. Tkinteri installimiseks avage terminal ja käivitage:

pip install tkinter

The python-vlc moodul on Pythoni sidumine VLC (VideoLAN Client) meediumipleieri teegi jaoks. Seda moodulit saate kasutada selle rakendamiseks

instagram viewer
VLC omadused ja looge oma kohandatud meediumipleier. VLC installimiseks käivitage:

pip install python-vlc

The kuupäev Kellaaeg moodul on Pythoni sisse ehitatud ja pakub klasse ja funktsioone erinevate kuupäevade, kellaaegade, intervallide ja tsoonide esitamiseks.

Selle projekti lähtekoodi leiate sellest GitHubi hoidla.

Importige vajalikud moodulid. Määratlege klass, MediaPlayerApp. Määratlege konstruktori meetod ja kutsuge see esile, et käivitada rakenduse põhiaken. Määrake videomeediumipleieri pealkiri, mõõtmed ja taustavärv. Helistage initsialiseeri_mängija meetod.

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

Määratlege meetod, initsialiseeri_mängija. Looge VLC-meediumipleieri eksemplar selle funktsioonidega suhtlemiseks. Seda eksemplari kasutades looge meediumipleieri objekt, mida saate kasutada meediumi taasesituse haldamiseks. Muutuja initsialiseerimine, praegune_fail praegu esitatava video jälgimiseks. Seadistage taasesitusolekud ja helistage loo_vidinad meetod.

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

Määratlege loo_vidinad meetod. Looge lõuendi vidin ja edastage selle paigutamiseks ülemelement, selle taustavärv, laius ja kõrgus. Loo Valige Fail nuppu, et valida videofail, mida soovite esitada. Määrake emaelement, tekst, mida see kuvatakse, fondi stiilid ja käsk, mida see klõpsamisel käivitada.

Looge video kulunud aja ja kestuse kuvamiseks silt. Määrake põhielement, tekst, fondi stiilid, fondi värv ja taustavärv. Looge raam video taasesituse juhtimiseks ja andke sellele taustavärv.

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)

Määratlege Mängi nupp, Paus nupp, Peatus nupp, Kiiresti edasi nuppu ja Keri tagasi nuppu. Looge video edenemisriba vidin. Määrake põhielement, kuhu soovite selle paigutada, video taasesituse asukoha värskendamise meetod, taustavärv ja paksus.

Korraldage kõik need elemendid mõlemas suunas sobiva polsterdusega.

 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)

Määratlege meetod, vali_fail. Videofaili valimiseks avage faili dialoogiboks .mp4 või .avi pikendamine. Kui valite mõne faili, laadige selle tee ja värskendage ajasilti selle kestusega. Alustage valitud video esitamist.

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

Määratlege meetod, get_duration_str mida kasutate video kogukestuse arvutamiseks. Kui rakendus esitab videot, hankige selle kestus millisekundites ja teisendage see videoks HH: MM: SS vormingus. Kui videot ei esitata, naaske 00:00:00 vaikeväärtusena.

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"

Määratlege meetod, play_video. Kui videot ei esitata, looge valitud failitee abil uus meediumiobjekt. Seostage meedia varem loodud lõuendiga ja käivitage video taasesitus. Värskendage video esitamine olekusse Tõsi.

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

Määratlege meetod, kiiresti edasi. Kui videot esitatakse, vaadake praegust kulunud aega ja lisage sellele 10 000 millisekundit. Määrake uus taasesitusaeg. Samamoodi defineerige meetod, tagasi kerida mis lahutab 10 000 millisekundit.

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)

Määratlege meetod, pause_video. Kui olete video taasesitust alustanud ja selle peatanud, helistage numbril mängida meetod selle jätkamiseks. Vastasel juhul helistage paus meetodit ja värskendage mõlemal juhul kasutajaliidest vastavalt.

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

Määratlege meetod, peatus. Kui videot esitatakse, peatage see ja lähtestage aja silt. Määratlege meetod, set_video_position. Kui videot esitatakse, hankige kogukestus ja arvutage soovitud asukoht millisekundites. Seadke video taasesitusaeg arvutatud asendisse.

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)

Määratlege meetod, update_video_progress. Kui videot esitatakse, hankige kogukestus ja praegune taasesitusaeg ning arvutage edenemise protsent. Värskendage edenemisriba selle arvutatud väärtuse abil. Vormindage praegune aeg ja kogukestus jaotises HH: MM: SS vormingus.

Ajastage see meetod uuesti käivitamiseks 1000 millisekundi pärast. See loob tsükli, mis värskendab video esitamise ajal pidevalt video edenemist ja ajasilte.

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)

Määratlege klass, VideoProgressBar mis pärineb tk. Kaal vidin. Määrake konstruktor, mis määrab edenemisriba algoleku ja käitumise. Määrake näidata väärtust võimalus Vale praeguse väärtuse kuvamise vältimiseks.

Käivitage edenemine vahemikus 0 kuni 100. Seadistage edenemisriba suund, pikkus, käivitatav käsk ja kohandamine. Siduge sündmus edenemisribaga nii, et sellel klõpsamisel käivitatakse see on_click meetod.

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)

Määratlege meetod, on_click. Kontrollige, kas edenemisriba pole keelatud, ja arvutab uue väärtuse klõpsu asukoha põhjal. Värskendage vastavalt edenemisriba väärtust.

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

Loo eksemplar MediaPlayerApp klassi ja helistage update_video_progress meetod. The mainloop() funktsioon käsib Pythonil käivitada Tkinteri sündmusetsükli ja kuulata sündmusi, kuni sulgete akna.

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

Programmi käivitamisel ilmub videomeediumipleier. See sisaldab Valige Fail nupp, ajasildid, nupud video taasesituse juhtimiseks ja video edenemisriba.

Kui valite video, esitatakse see algusest peale automaatselt, värskendades algusaega ja ajasiltide kestust.

Löömisel Paus nuppu, video peatub ja muutub Jätka nuppu. Klõpsates Kiiresti edasi nuppu, hüppab video 10 sekundi võrra edasi.

Samamoodi löömisel Keri tagasi nuppu, läheb see 10 sekundit tagasi. Nupu vajutamisel Peatus nuppu, video taasesitus peatub. Saate lohistada või klõpsata edenemisribal mis tahes ala, et liikuda video mis tahes osale ja ajasilt näitab kulunud aega.

Saate seda videomeediumipleierit täiustada, lisades subtiitrite laadimise ja kuvamise võimaluse. Võiksite kaaluda ka funktsioone, nagu kuvasuhte muutmine, helitugevuse reguleerimine ja video osa loomine.

Nende funktsioonide rakendamiseks saate uurida Pygame'i moodulit. Pygame on mitmekülgne, hõlpsasti kasutatav ja integreerub hästi Tkinteriga. Teek võimaldab kohandamist, sellel on interaktiivsed funktsioonid ja see võib töötada mis tahes platvormil.