首页 > 解决方案 > 使用 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 个视频进行的,每 200 毫秒。

标签: pythontkinter

解决方案


唯一的解决方案是购买一台具有更多 CPU 内核/GPU/更快 CPU 的计算机,恐怕!如果视频显示在小画布上,则应在播放前调整它们的大小。也就是说,有一个已经调整大小的视频并播放它而不是原始视频。逐帧阅读,然后调整大小并在画布上显示该帧非常耗费 CPU,对于一个视频来说已经是这样了,而你用 9 来做到这一点!这就是 GUI 变得迟钝的原因:您的 CPU 使用其所有资源来调整大小和播放,并且几乎没有任何剩余资源可用于响应用户事件。GPU 会有所帮助:它需要调整大小,这是 CPU 最昂贵的部分。


推荐阅读