import time from threading import Thread import av from PIL import Image class VideoFile(Thread): file: str = "" frame: Image = None running: bool = False def __init__(self, file: str): self.file = file super().__init__() def get_frame(self): return self.frame def stop(self): self.running = False def open(self): self.running = True self.start() def run(self) -> None: container = av.open(self.file) video = container.streams.video[0] print(video.time_base) while self.running: try: for frame in container.decode(video): if self.running: self.frame = frame.to_image() else: break time.sleep(1.0 / 60) except: self.running = False