python - 使用 Tkinter 显示多个视频
问题描述
我正在尝试使用 Tkinter 在他们自己的画布上显示 9 个视频。我遇到的问题是窗口非常滞后且无响应。这意味着在播放视频时无法在应用程序中执行任何其他操作。
我尝试使用第二个线程来执行步骤 1-3(如下所示),但这似乎没有帮助。我正在努力了解如何使这个过程更有效,任何帮助将不胜感激。
我这样做的过程如下:
- 使用 cv2 阅读视频
import cv2
cap = cv2.VideoCapture(video_path)
- 从视频中读取一帧
cap.set(1, frame_num)
ret, frame = cap.read()
- 调整大小并转换为 PhotoImage
frame = imutils.resize(frame, height=video_height, width=video_width)
photo = ImageTk.PhotoImage(image=Image.fromarray(frame))
- 将图像绘制到画布
im = self.create_image(0, 0, image=photo, anchor=NW)
这是对所有 9 个视频进行的,每 200 毫秒。
解决方案
唯一的解决方案是购买一台具有更多 CPU 内核/GPU/更快 CPU 的计算机,恐怕!如果视频显示在小画布上,则应在播放前调整它们的大小。也就是说,有一个已经调整大小的视频并播放它而不是原始视频。逐帧阅读,然后调整大小并在画布上显示该帧非常耗费 CPU,对于一个视频来说已经是这样了,而你用 9 来做到这一点!这就是 GUI 变得迟钝的原因:您的 CPU 使用其所有资源来调整大小和播放,并且几乎没有任何剩余资源可用于响应用户事件。GPU 会有所帮助:它需要调整大小,这是 CPU 最昂贵的部分。
推荐阅读
- c# - 使用 C# 更改按钮背景激活的 MainWindow
- css - 加载时没有样式的 Svelte 库
- firebase - 使用 Firebase 人脸检测比较 2 个人脸
- android - 没有方法签名:build_1fqop3ps6hvqzh1lfs04fdnyr.android() 适用于参数类型
- javascript - 使用javascript函数获取html表格行和单元格索引
- python-3.x - 异常处理硒
- plot - 从版本 3 转换到版本 4 时出现绘图错误
- swiftui - 我的 Health Store 对象在 swift 应用程序中收到新数据(在 Health kit 中)时没有刷新数据
- html - 您如何将 socket.io 连接到您的实际网页?
- survival-analysis - 预测另一个时间段的生存模型系数(flexsurv R 包)