使用Tkinter显示多个视频



我试图使用Tkinter在自己的画布上显示9个视频。我遇到的问题是,窗口非常滞后和无响应。这意味着当视频播放时,应用程序中不能做任何其他事情。

我尝试使用第二个线程来执行步骤1-3(如下所示),但这似乎没有帮助。我正在努力看看我如何能使这个过程更有效,任何帮助将不胜感激。

我做这件事的过程如下:

  1. 使用cv2读取视频
import cv2
cap = cv2.VideoCapture(video_path)
  1. 从视频中读取一帧
cap.set(1, frame_num)
ret, frame = cap.read()
  1. 调整大小并转换为PhotoImage
frame = imutils.resize(frame, height=video_height, width=video_width)
photo = ImageTk.PhotoImage(image=Image.fromarray(frame))
  1. 将图像绘制到画布
im = self.create_image(0, 0, image=photo, anchor=NW)

对所有9个视频执行此操作,每200ms执行一次。

恐怕唯一的解决办法就是买一台CPU内核/GPU/CPU速度更快的电脑!如果视频显示在一个小画布上,您应该在播放它们之前调整它们的大小。也就是说,有一个已经调整大小的视频,并播放它,而不是原来的视频。逐帧读取,然后调整大小并在画布上显示帧是非常昂贵的CPU,已经为一个视频,你做它与9 !这就是GUI变得滞后的原因:你的CPU使用所有资源来调整大小和播放,并且几乎没有任何资源用于响应用户事件。GPU将在这方面有所帮助:它承担了调整大小的部分,这是最昂贵的CPU。

最新更新