如何达到每秒精确25张图像.Pygame



每一帧我读取音频并将其转换为视觉方式。然后我拍了一张照片。

我的问题是,下面的方法需要不同数量的图像每秒。因此,当我将图像转换为视频时,它会比作为输入播放的音频短(大约短5-10秒)。

FPS = 25
clock = pygame.time.Clock()
pygame.mixer.music.load(filename)
pygame.mixer.music.play(0)
running = True 
while running and pygame.mixer.music.get_busy():
print(clock.get_fps()) #output 21 - 25 FPS
t = pygame.time.get_ticks()
deltaTime = (t - getTicksLastFrame) / 1000.0
getTicksLastFrame = t
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((0, 0, 0))
for b in bars:
b.update(deltaTime, get_decibel(pygame.mixer.music.get_pos() / 1000.0, b.freq))
b.render(screen)
pygame.display.flip()
pygame.display.update()
video.make_png(screen)
clock.tick(FPS)

我正在考虑放慢音频,所以我将只拍摄(每秒12+-图像),但这种方法也行不通,因为FPS上限不稳定。我想到的另一种方法是用FFmpeg将视频拉伸到音频的长度。然而,我相信应该有一个更优雅的解决方案。

将非常感谢任何建议!

tick_busy_loop()代替tick()

clock.tick(FPS)

clock.tick_busy_loop(FPS)

tick():

[…[/p]这个函数使用SDL_Delay函数,这个函数在每个平台上并不准确,但是不会占用太多的CPU。

tick_busy_loop():

[…这个函数使用pygame.time.delay(),在一个忙循环中使用大量的CPU来确保计时更准确。

最新更新