2013-01-23 51 views
3

我試圖通過將每幀保存爲圖像而不是將它們拼接在一起使用ffmpeg來捕獲我的遊戲視頻。我跟着這些腳本的例子:在Pygame中,如何以無頭模式保存屏幕圖像?

這裏是我的代碼的基本邏輯:

os.environ['SDL_VIDEODRIVER'] = 'dummy' 
pygame.init() 
pygame.display.set_mode((1,1)) 
screen = pygame.Surface((400, 400)).convert() 

# screen becomes attribute of game object: game.screen 
game = MyGame(screen) 

while game.running: 
    game.update() # <--- updates game.screen 
    pygame.display.flip() 
    pygame.image.save(game.screen, 'frame-%03d.png' % (game.frame_num)) 

create_video_using_ffmpeg() 

如果我註釋掉的第一行設置視頻驅動程序到「虛擬」,圖像按預期發生。但它會打開一個(小)窗口,因此腳本在作爲cronjob運行時會失敗。沒有註釋的行,我只是得到一系列空白的黑色圖像。

任何想法發生了什麼問題?

回答

2

我能夠繪製一個矩形,以作爲我的屏幕基本圖像表面來解決此:

os.environ['SDL_VIDEODRIVER'] = 'dummy' 
pygame.init() 
pygame.display.set_mode((1,1)) 

# surface alone wouldn't work so I needed to add a rectangle 
screen = pygame.Surface((400, 400), pygame.SRCALPHA, 32) 
pygame.draw.rect(screen, (0,0,0), (0, 0, 400, 400), 0) 

# screen becomes attribute of game object: game.screen 
game = MyGame(screen) 

while game.running: 
    game.update() # <--- updates game.screen 
    pygame.display.flip() 
    pygame.image.save(game.screen, 'frame-%03d.png' % (game.frame_num)) 

create_video_using_ffmpeg() 

也許別人可以解釋爲什麼這有差別。 (我最初是否使用了錯誤的表面參數?)

這成功地作爲一個cronjob。

相關問題