首页 > 解决方案 > 使用 Tkinter 的 Python 视频播放器

问题描述

我想创建一个可以使用 python 和 tkinter倒带快进停止播放的视频播放器。我卡在快进和快退部分。我从 youtube 上找到了一些示例,但大部分都在 mp3 上,这对我没有多大帮助。谁能帮我倒带和快进部分?下面是我的代码。


import time

class videoGUI:

    def __init__(self, window, window_title):

        self.window = window
        self.window.title(window_title)

        top_frame = Frame(self.window)
        top_frame.pack(side=TOP, pady=5)

        bottom_frame = Frame(self.window)
        bottom_frame.pack(side=BOTTOM, pady=5)
        
        self.rewind = False
        self.pause = False   # Parameter that controls pause button
        self.time=time.time()

        self.canvas = Canvas(top_frame)
        self.canvas.pack()

        self.control_frame=Frame(self.window)
        self.control_frame.pack()
        
        #button image and control
        self.back_btn_img=PhotoImage(file='F:/Users/Admin/Pictures/back50.png')
        self.foward_btn_img=PhotoImage(file='F:/Users/Admin/Pictures/forward50.png')
        self.play_btn_img=PhotoImage(file='F:/Users/Admin/Pictures/play50.png')
        self.pause_btn_img=PhotoImage(file='F:/Users/Admin/Pictures/pause50.png')
        self.stop_btn_img=PhotoImage(file='F:/Users/Admin/Pictures/stop50.png')
        
         # Select Button
        self.back_btn=Butto(self.control_frame,image=self.back_btn_img,          
                             borderwidth=0,command=self.back)
        self.foward_btn=Button(self.control_frame,image=self.foward_btn_img,                 
                                  borderwidth=0,command=self.foward)
        self.play_btn=Button(self.control_frame,image=self.play_btn_img,                 
                            borderwidth=0,command=self.play_video)
        self.pause_btn=Butto(self.control_frame,image=self.pause_btn_img,
                           borderwidth=0,command=self.pause_video)

        #button position
        self.back_btn.grid(row=5, column=0,padx=10)
        self.foward_btn.grid(row=5, column=1,padx=10)
        self.play_btn.grid(row=5, column=2,padx=10)
        self.pause_btn.grid(row=5, column=3,padx=10)
        
        self.my_menu=Menu(self.window)
        self.window.config(menu=self.my_menu)
        self.add_video_menu=Menu(self.my_menu)
        self.my_menu.add_cascade(label="Add Videos",menu=self.add_video_menu)
        self.add_video_menu.add_command(label="Select One Video",command=self.open_file)


        self.delay = 15  # ms

        self.window.mainloop()


    def open_file(self):

        self.pause = False

        self.filename = filedialog.askopenfilename(title="Select file", filetypes=(("MP4 files", "*.mp4"),
                                                                                         ("WMV files", "*.wmv"), ("AVI files", "*.avi")))
        print(self.filename)

        # Open the video file
        self.cap = cv2.VideoCapture(self.filename)

        self.width = self.cap.get(cv2.CAP_PROP_FRAME_WIDTH)
        self.height = self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
        self.fps = self.cap.get(cv2.CAP_PROP_FPS)
        self.canvas.config(width = self.width, height = self.height)


    def get_frame(self):   # get only one frame

    
        i=0    
        self.cap.isOpened() 
        ret, frame = self.cap.read()
      
        
        return (ret, cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))

    def play_video(self):

        # Get a frame from the video source, and go to the next frame automatically
        ret, frame = self.get_frame()

        if ret:
            self.photo = PIL.ImageTk.PhotoImage(image = PIL.Image.fromarray(frame))
            self.canvas.create_image(0, 0, image = self.photo, anchor = NW)

        if not self.pause:
            self.window.after(self.delay, self.play_video)
        else:
            self.pause=False
     


    def pause_video(self):
        self.pause = True
        
    def foward(self):
        # foward code havent implement
        pass
        
        
    def back(self):
        #backward code havent implement
        pass


    # Release the video source when the object is destroyed
    def __del__(self):
        if self.cap.isOpened():
            self.cap.release()    

    videoGUI(Toplevel(), 'Welcome to My Video Player')

'''

标签: pythontkintervideo

解决方案


推荐阅读