我已经编写了一些Python代码,试图在Pygame中显示另一个我想要的视频:
import pygame
import time
def playvid(vidfile, runtime, FPS):
print("playing" + vidfile)
playmovie = pygame.movie.Movie(vidfile)
movie_screen = pygame.Surface(playmovie.get_size()).convert()
playmovie.set_display(movie_screen)
playmovie.play()
thentime = time.time()
playing = True
while playing:
screen.blit(movie_screen,(0,0))
pygame.display.update()
clock.tick(FPS)
nowtime = time.time()
#Play the video for 5s
if nowtime - thentime > runtime + 1: playing = False
print("done this one")
#FPS = 29.97
pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode((0, 0),pygame.FULLSCREEN)
run = True
while run:
playvid('snowdone.mpg', 10, 29.97)
playvid('snowdone1.mpg', 10, 29.97)
run = False
pygame.quit()
播放第一个视频很好,但播放第二个视频会发出警告:
“运行时错误!
程序:C:\ Python27 \ pythonw.exe
此应用程序已请求Runtime以不寻常的方式终止它。 请联系应用程序的支持团队获取更多信息。“
两个视频都可以自行播放,所以这不是一个mpg问题。有什么建议吗?
答案 0 :(得分:0)
我不知道为什么我建议的改变有效的具体原因,但显然它有效。
按原样使用你的代码,我的第一部电影不会运行超过4-5秒(它总是在大致相同的点停止),然后pygame窗口会崩溃。
在pygame.event.get
循环中添加一段简单的while playing
代码,修复了所有内容
while playing:
for event in pygame.event.get():
pass
screen.blit(movie_screen,(0,0))
pygame.display.update()
clock.tick(FPS)
nowtime = time.time()
#Play the video for 5s
if nowtime - thentime > runtime + 1: playing = False
看起来奇怪的是,即使在事件的循环中什么都不做,也会毫无问题地运行代码。