Итак, я пытался найти способы воспроизвести mp4 или видео в целом в pygame и не могу найти ничего, что работает, кроме opencv- python. Мне удалось воспроизвести видео, но оно очень медленное и прерывистое, поэтому я попытался сначала прочитать видео и сохранить кадры внутри списка, а затем воспроизвести видео. Но тогда видео все равно оказалось очень прерывистым?
import pygame
from pygame.locals import *
import cv2
import numpy as np
import sys
import threading
pygame.init()
pygame.display.set_caption("OpenCV video stream on Pygame")
surface = pygame.display.set_mode([1280,720])
video = cv2.VideoCapture("YouTube.mp4")
fps = video.get(cv2.CAP_PROP_FPS)
print(fps)
video.set(cv2.CAP_PROP_FPS, 60)
vid = []
clock = pygame.time.Clock()
print(clock)
def vid_cap():
while True:
success, frame = video.read()
if not success:
break
#for some reasons the frames appeared inverted
frame = np.fliplr(frame)
frame = np.rot90(frame)
# The video uses BGR colors and PyGame needs RGB
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
vid.append(frame)
#cap = threading.Thread(target = vid_cap)
#cap.start()
vid_cap()
try:
while True:
clock.tick(60)
surface.fill([0,0,0])
try:
surf = pygame.surfarray.make_surface(vid[0])
vid.pop(0)
for event in pygame.event.get():
if event.type == pygame.KEYUP:
background_color = red
surface.fill(background_color)
pygame.display.update
end_time = self.time()
# Show the PyGame surface!
surface.blit(surf, (0,0))
pygame.display.flip()
except:
surface.fill([255,255,255])
except SystemExit:
pygame.quit()
cv2.destroyAllWindows()
YouTube.mp4 может быть любым видео со скоростью 60 кадров в секунду, которое у вас есть