ВОСПРОИЗВЕСТИ ВИДЕО в GUI TKINTER на PYTHON | Video Player

preview_player
Показать описание
В этом видео мы посмотрим, как можно проиграть видео MP4 на Python tkinter. Мы используем для этого Canvas и библиотеку cv2.

Подписывайся на наш телеграм канал!

И на телеграмм чат :)

Полезные ссылки:

Ссылка на код:

Ссылка на cv2:

#python #tkinter #video #видео #tkintertutorial #пайтон
Рекомендации по теме
Комментарии
Автор

Подписывайся на наш телеграм канал!

И на телеграмм чат :)

shcoder
Автор

Спасибо! Долго бился над этой проблемой, повезло наткнуться на видео автора

dimagalaktionov
Автор

Установил пару библио и в PyCharm запустилось норм.
Сейчас пропишу свой ролик, со своим разрешением.
Заодно проверю и VSC.

dikiservds
Автор

Всё норм работает в PyCharm, 1920/1080 открывает без проблем.
А в VSC, те же ошибки.
Наверное, надо прописать иначе.

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


class VideoPlayer:
def __init__(self, video_file, master=None, width=1920, height=1080):
self.cap = cv2.VideoCapture(video_file)
self.master = master
self.canvas = tk.Canvas(master, height=height, width=width)
self.delay = int(1000 /

def place(self, x, y):
self.canvas.place(x=x, y=y)
self.update()

def update(self):
if button['text'] == 'stop':
ret, frame = self.cap.read()
else:
self.master.after(self.delay, self.update)
return
if ret:
if button['text'] == 'stop':
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
self.photo =
self.canvas.create_image(0, 0, image=self.photo, anchor=tk.NW)
self.master.after(self.delay, self.update)
else:
self.cap.release()


def pause_unpause():
if button['text'] == 'stop':
button['text'] = 'play'
else:
button['text'] = 'stop'


window = tk.Tk()
window.geometry('1920x1080')
button = tk.Button(window, text='stop', command=pause_unpause)
button.place(x=0, y=0)
video = VideoPlayer('clip.mp4', master=window, width=1920, height=1080)
video.place(x=0, y=0)


window.mainloop()

dikiservds
Автор

Мож быть в VSC нужно по другому прописать эту строку.
Я установил PyCharm 2023.1, посмотрю, мож в ней норм всё пройдёт.
А код VSC вот:

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


class VideoPlayer:
def __init__(self, video_file, master=None, width=100, height=100):
self.cap = cv2.VideoCapture(video_file)
self.master = master
self.canvas = tk.Canvas(master, height=height, width=width)
self.delay = int(1000 /

def place(self, x, y):
self.canvas.place(x=x, y=y)
self.update()

def update(self):
if button['text'] == 'stop':
ret, frame = self.cap.read()
else:
self.master.after(self.delay, self.update)
return
if ret:
if button['text'] == 'stop':
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
self.photo =
self.canvas.create_image(0, 0, image=self.photo, anchor=tk.NW)
self.master.after(self.delay, self.update)
else:
self.cap.release()


def pause_unpause():
if button['text'] == 'stop':
button['text'] = 'play'
else:
button['text'] = 'stop'


window = tk.Tk()
window.geometry('1000x1000')
button = tk.Button(window, text='stop', command=pause_unpause)
button.place(x=0, y=0)
video = VideoPlayer('cats_video.mp4', master=window, width=800, height=1000)
video.place(x=50, y=0)


window.mainloop()

Ошибки:

Desktop\video_player_widget_tkinter-main\video_player_widget_tkinter-main\example.py", line 44, in <module>
video = VideoPlayer('cats_video.mp4', master=window, width=800, height=1000)

Desktop\video_player_widget_tkinter-main\video_player_widget_tkinter-main\example.py", line 11, in __init__
self.delay = int(1000 /

ZeroDivisionError: float division by zero

dikiservds
Автор

Я вообще, сделал свой ролик в разрешении 1920/1080 и хотел прописать, но тут вот оригинальный не рабайтен, потому и не стал своё гнуть.)
Учусь второй день, прошу принять во внимание.)

dikiservds
Автор

Хм, надо проверить. А то у меня есть объекты с прозоачным фоном на canvas, и мне нужно чтобы видео тоже проигрывалось в canvas, чтобы создавать видео позади объектов.

MelloMix
Автор

ModuleNotFoundError: No module named 'PIL'
чуть не забыл установить.)

dikiservds
Автор

не работает пишет что в 11 строке ошибка

uqiwxqj