首页 > 解决方案 > 在显示视频时保持代码运行

问题描述

因此,我正在尝试编写一些代码来保持视频运行,直到满足条件并且完成某些过程并且在这些过程之后立即加载新视频。这些过程应在不关闭当前视频的情况下继续进行,并且应仅在加载新视频并准备好进行可视化时关闭当前视频。

这最好通过一个例子来表述,如下所示:

import numpy as np 
import os 
import pygame 
import cv2
import time 

def play_video(vid_loc):
    pygame.init()
    infos = pygame.display.Info()
    screen_size = (infos.current_w, infos.current_h)

    cap = cv2.VideoCapture(vid_loc) 
    frame_counter =0
    while(True):

        ret, frame = cap.read()
        frame_counter += 1

        if frame_counter == cap.get(cv2.CAP_PROP_FRAME_COUNT):
            frame_counter = 0 
            cap.set(cv2.CAP_PROP_POS_FRAMES, 0)

        frame= cv2.resize(frame,screen_size)
        cv2.namedWindow('image', flags=cv2.WINDOW_GUI_NORMAL)
        cv2.setWindowProperty("image", cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)
        cv2.imshow('image',frame)

        if cv2.waitKey(1000) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()                

vid_loc = ["home/odd.ogv", "home/even.ogv"]

while True:
    n = random.randint(1, 100)
    if n%2 == 0:
        play_video(vid_loc[1])    
    else:
        play_video(vid_loc[0])
    time.sleep(10)

所以这段代码生成一个随机数并检查它是否是偶数。如果它甚至运行不同的视频,如果奇怪的是另一个视频。我对这段代码的期望是保持每 10 秒生成一次随机数,并在“while 循环”再次运行时保持视频运行,生成另一个随机数并在不关闭视频的情况下检查它是否是偶数。如果数字是奇数,则在当前视频关闭后立即运行另一个视频。但是,此代码只会使视频按预期循环运行,但不会生成另一个随机数。

它基本上卡在 cv2.imshow 直到按下“q”键,然后“while 循环”再次运行。

标签: pythonpython-3.xopencv

解决方案


推荐阅读