Рендеринг видео OpenCV mp4 в pygame очень изменчив - PullRequest
1 голос
/ 16 июня 2020

Итак, я пытался найти способы воспроизвести 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 кадров в секунду, которое у вас есть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...