Python tkinter 播放MP4
时间: 2025-01-05 17:35:21 浏览: 9
### 实现 Python 中使用 Tkinter 播放 MP4 文件
为了在 Python 的 Tkinter 应用程序中播放 MP4 文件,可以采用结合 OpenCV 和 PIL (Pillow) 来处理视频帧并将其显示于 Tkinter 窗口内的方法[^2]。
下面是一个完整的例子展示如何创建一个简单的应用程序来加载和播放 MP4 视频:
```python
import cv2
from tkinter import *
from PIL import Image, ImageTk
import threading
def show_frame():
ret, frame = cap.read()
if not ret:
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
return
# 将图像从 BGR 转换为 RGB 并调整大小适应标签尺寸
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(rgb_frame).resize((800, 600))
imgtk = ImageTk.PhotoImage(image=img)
l1.imgtk = imgtk
l1.configure(image=imgtk)
# 使用 after 方法每过一定时间再次调用此函数更新下一帧
root.after(delay, show_frame)
root = Tk()
root.title('Video Player')
f1 = Frame(root)
l1 = Label(f1)
l1.pack()
video_name = "test_video2.mp4"
cap = cv2.VideoCapture(video_name)
delay = int(1000 / cap.get(cv2.CAP_PROP_FPS))
show_frame_thread = threading.Thread(target=show_frame)
show_frame_thread.daemon = True
show_frame_thread.start()
f1.pack(pady=20)
root.mainloop()
```
这段代码初始化了一个 Tkinter 主窗口 `root`,设置了标题,并创建了用于放置视频帧的框架组件 `f1` 及其内部的标签组件 `l1`。通过 OpenCV 打开给定路径下的 MP4 文件作为捕获对象 `cap`,计算出合适的延迟间隔 `delay` 后,在无限循环里不断读取新帧并通过 `after()` 函数定时刷新界面以模拟连续播放效果[^1]。
值得注意的是,这里还引入了多线程机制使得视频流可以在后台持续运行而不阻塞图形用户界面的操作响应。
阅读全文