3

ffmpegを使用してフレームをつなぎ合わせるのではなく、各フレームを画像として保存して、ゲームのビデオをキャプチャしようとしています。これらのスクリプトの例に従いました。

これが私のコードの基本的なロジックです:

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() 

ビデオドライバを「ダミー」に設定する最初の行をコメントアウトすると、画像は期待どおりに表示されます。ただし、(小さな)ウィンドウが開くため、cronジョブとして実行するとスクリプトが失敗します。行のコメントを外すと、一連の空白の黒い画像が表示されます。

何が悪いのか分かりますか?

4

1 に答える 1

4

画面として機能するベース画像の表面に長方形を描くことで、これを回避することができました。

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() 

おそらく他の誰かがこれが違いを生む理由を説明することができます。(元々間違ったサーフェスパラメータを使用していましたか?)

これはcronジョブとして正常に機能しました。

于 2013-01-23T06:33:22.170 に答える