preload video

This commit is contained in:
grimhilt 2023-08-30 10:21:17 +02:00
parent 091a2279cb
commit 53a29cf632

View File

@ -88,28 +88,34 @@ class VideoPlayer:
self.total_frames = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT)) self.total_frames = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT))
self.fps = int(self.cap.get(cv2.CAP_PROP_FPS)) self.fps = int(self.cap.get(cv2.CAP_PROP_FPS))
print(self.total_frames, self.fps)
self.time = int(self.total_frames * ((int(1000/self.fps)+1))) self.time = int(self.total_frames * ((int(1000/self.fps)+1)))
self.time = 30 * 1000 self.delay = int(1000/self.fps)
print(int(1000/self.fps)) self.i = -1
self.is_playing = True self.frames = []
self.i = 0 self.preload()
self.update() self.update()
def update(self): def preload(self):
if self.is_playing: isPlaying = True
self.i = self.i + 1 while isPlaying:
#print(self.i)
ret, frame = self.cap.read() ret, frame = self.cap.read()
if ret: if ret:
image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
image = self.parent.resize_full_screen(image) image = self.parent.resize_full_screen(image)
photo = ImageTk.PhotoImage(image=image) photo = ImageTk.PhotoImage(image=image)
self.parent.show_image(photo) self.frames.append(photo)
else: else:
self.is_playing = False
self.cap.release() self.cap.release()
self.parent.root.after(int(1000/self.fps), self.update) isPlaying = False
def update(self):
self.i += 1
if self.i < len(self.frames):
self.parent.show_image(self.frames[self.i])
self.parent.root.after(int(self.delay), self.update)
else:
self.frames = []
class GIFPlayer(): class GIFPlayer():
def __init__(self, parent, file): def __init__(self, parent, file):