|
|
以下是一个用tkinter结合OpenCV制作本地视频播放器的完整示例。它通过读取视频帧,在tkinter窗口显示,并支持通过按钮暂停/继续。
安装依赖:
pip install opencv-python pillow
代码:
import cv2
import tkinter as tk
from PIL import Image, ImageTk
import threading
import time
class VideoPlayer:
def __init__(self, video_path):
self.cap = cv2.VideoCapture(video_path)
self.width = int(self.cap.get(cv2.CAP_PROP_FRAME_WIDTH))
self.height = int(self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
self.fps = self.cap.get(cv2.CAP_PROP_FPS)
self.delay = int(1000 / self.fps)
self.root = tk.Tk()
self.root.title("本地视频播放器")
self.canvas = tk.Canvas(self.root, width=self.width, height=self.height)
self.canvas.pack()
self.btn_pause = tk.Button(self.root, text="暂停/继续", command=self.toggle_pause)
self.btn_pause.pack()
self.paused = False
self.running = True
self.update_frame()
def update_frame(self):
if not self.running:
return
if not self.paused:
ret, frame = self.cap.read()
if ret:
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(frame)
imgtk = ImageTk.PhotoImage(image=img)
self.canvas.create_image(0, 0, anchor=tk.NW, image=imgtk)
self.canvas.image = imgtk # 防止被垃圾回收
self.root.after(self.delay, self.update_frame)
def toggle_pause(self):
self.paused = not self.paused
def run(self):
self.root.protocol("WM_DELETE_WINDOW", self.on_close)
self.root.mainloop()
def on_close(self):
self.running = False
self.cap.release()
self.root.destroy()
if __name__ == "__main__":
player = VideoPlayer("your_video.mp4") # 替换为你的视频路径
player.run()
使用说明:
1. 将your_video.mp4替换为本地视频文件路径。
2. 运行后弹出窗口播放视频,点击“暂停/继续”按钮控制播放。
3. 关闭窗口自动释放资源。
该播放器仅支持视频,不包含音频。如需完整播放,可使用VLC替代方案(但tkinter嵌入VLC较复杂,推荐直接使用VLC窗口)。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|