Как воспроизводить видеофайлы в tkinter

Рейтинг: 0Ответов: 1Опубликовано: 16.03.2023

tkvideoplayer и tkvideo не советуйте.

  • У tkvideo частота кадров оставляет желать лучшего. И мне нужно будет потом файл закрыть, а это там не предусмотрено.

  • tkvideoplayer не устанавливается на мой компьютер.

Мне без разницы как, в окне или не в окне. Главное, чтобы открывалось и закрывалось, таймер я поставлю.

Ответы

▲ 1

Для воспроизведения видеофайлов в Tkinter можно использовать библиотеку OpenCV. Вот простой пример:

import cv2
import tkinter as tk
from PIL import Image, ImageTk

class VideoPlayer:
    def __init__(self, video_file, master=None):
        self.cap = cv2.VideoCapture(video_file)
        self.master = master
        self.canvas = tk.Canvas(master)
        self.canvas.pack()
        self.delay = int(1000/self.cap.get(cv2.CAP_PROP_FPS))
        self.update()

    def update(self):
        ret, frame = self.cap.read()
        if ret:
            frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            self.photo = ImageTk.PhotoImage(image=Image.fromarray(frame))
            self.canvas.create_image(0, 0, image=self.photo, anchor=tk.NW)
            self.master.after(self.delay, self.update)
        else:
            self.cap.release()

if __name__ == "__main__":
    root = tk.Tk()
    player = VideoPlayer("example.mp4", master=root)
    root.mainloop()

В этом примере видеофайл открывается с помощью cv2.VideoCapture(). Затем каждый кадр конвертируется в PhotoImage с помощью PIL.ImageTk, и отображается в Canvas с помощью create_image(). Метод update() вызывается рекурсивно через задержку, чтобы обеспечить плавное воспроизведение.

После запуска скрипта откроется окно Tkinter, в котором будет воспроизводиться видеофайл. Когда видео закончится, окно закроется. Вы можете использовать этот пример как отправную точку для создания своего видеоплеера с таймером и другими функциями, которые вам нужны.