如何在Windows10上的PyGame1.9.5中播放视频

2024-10-03 11:24:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个游戏,在windows上我不能播放电影文件。但在Ubuntu里,我可以玩。那么如何在windows上播放pygame1.9.5中的视频呢。在

我试着改变pygame的版本,试着添加模块。但都不管用。在

movie_screen = pygame.Surface(movie.get_size())

movie.set_display(movie_screen)
movie.play()


cnt = 0
playing = True
while playing:
    screen.fill( (0,0,0) )
    cnt+=1
    if cnt>=1875:
        cnt=0
        movie.rewind()
        movie.play()
    for event in pygame.event.get():
        if controlstart == True:
            if event.type == pygame.KEYDOWN:
                if event.key==pygame.K_KP_ENTER or 
                event.key==pygame.K_RETURN:
                    pygame.mixer.music.stop()
                    pygame.mixer.Channel(2).play(enter_sfx)
                    y += 1
                    fade(1280, 720)
                    xb = 0
                    yb = 0
                    if y == 3236:
                        controlstart = False
                    if y == 436:
                        movie.stop()
                        playing = False
                        pygame.quit()
                        quit()
                if event.key == pygame.K_UP:
                    pygame.mixer.Channel(3).play(move_sfx)
                    y += 1
                    if y == 3236:
                        y = 235
                        y1 = 3000
                    if y == 236:
                        y = 435
                        y1 = 3000
                    if y == 436:
                        y1 =335
                        y = 3235

                if event.key == pygame.K_DOWN:   
                    pygame.mixer.Channel(4).play(move_sfx)
                    y += 1
                    if y == 236:
                        y = 3235
                        y1 = 335
                    if y == 3236:
                        y1 = 3000
                        y = 435
                    if y == 436:
                        y1 = 3000
                        y = 235
        if event.type == pygame.QUIT:
            movie.stop()
            playing = False
            pygame.quit()
            quit()

    screen.blit(movie_screen,(0, 0))

我希望它能工作,但它没有也不能播放视频


Tags: keyeventplayifchannelmoviescreenpygame
1条回答
网友
1楼 · 发布于 2024-10-03 11:24:11

PyGame1.9.5没有模块来显示电影(至少在文档中没有),可能是因为它不完整,他们试图将代码从库sdl1.2转换为sdl2.0,后者没有movie模块。在

您可以尝试将cv2pygame一起使用

此代码直接显示在来自任何流的screen上(内置照相机、本地文件、删除流)。窗口的大小必须与流相同。我不知道为什么,但我必须在显示前转换图像。在

import pygame
import cv2

#  - local (built-in) camera  -
#stream = 0

#  - local file  -
#stream = '2019-03-26_08-43-15.mkv'

#  - http stream  -
# doesn't work any more
#stream = 'http://media.dumpert.nl/tablet/9f7c6290_Verstappen_vs._Rosberg_with_Horner_Smile___Streamable.mp4.mp4.mp4'

#  - rtsp stream  -
#stream = 'rtsp://streaming1.osu.edu/media2/ufsap/ufsap.mov'

#  - rtmp stream  -
# Big Buck Bunny
stream = 'rtmp://184.72.239.149/vod/mp4:bigbuckbunny_1500.mp4'

# open stream
cap = cv2.VideoCapture(stream)

# read one frame and check if there was no problem
ret, img = cap.read()
if not ret:
    print("Can't read stream")
    #exit()

# transpose/rotate frame 
#img = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
img = cv2.transpose(img)

# display its width, height, color_depth
print('shape:', img.shape)

pygame.init()

# create window with the same size as frame
screen = pygame.display.set_mode((img.shape[0], img.shape[1]))

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # read one frame and check if there was no problem
    ret, img = cap.read()
    if not ret:
        running = False
        break
    else:
        # transpose/rotate frame
        #img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
        #img = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
        img = cv2.transpose(img)

        # blit directly on screen         
        pygame.surfarray.blit_array(screen, img)

    pygame.display.flip()

pygame.quit()

此代码使用Surface从流中获取帧,因此窗口可能具有不同的大小。在

^{pr2}$

相关问题 更多 >