使用pygame.mixer.music打开时如何使用ffmpeg覆盖文件

时间:2015-02-11 16:58:25

标签: python audio ffmpeg pygame

我有这种有趣的情况,我希望通过ffmpeg使用subprocess.check_call()转换大量音频片段,然后使用pygame.mixer.music.play()播放它们。 但是因为在转换所有文件时会有很多小文件,我想每次都覆盖它,称之为tmp.wav

转换如下:

outfilename = "tmp.wav"
proc_args  = ["ffmpeg"]
proc_args += ["-ss", str(begin / 1000)]
proc_args += ["-i", os.path.join(audiodir, infilename)]
proc_args += ["-to", str(duration / 1000)]
proc_args += ["-ar", str(AUDIORATE)] # sample frequency (audio rate)
proc_args += ["-y"]
proc_args += [outfilename]
DEVNULL = open(os.devnull, 'wb')
try:
    subprocess.check_call(proc_args, stdout = DEVNULL, stderr = DEVNULL)
    # print "Converting audio succeeded."
except subprocess.CalledProcessError as e:
    print "Converting audio failed."
    return 0.

播放如下:

pygame.mixer.music.load(outfilename)
pygame.mixer.music.play()

现在,出现了一个问题。第一个文件被转换并正确播放。但是当跳到下一个文件时,tmp.wav无法覆盖。我认为这是因为文件仍然在音乐模块中打开,但是没有说明如何关闭文件。在转换新文件之前,我已经尝试了pygame.mixer.music.stop()pygame.mixer.quit()pygame.mixer.stop(),但没有一个能够正常运行。

如何解决这个问题?

0 个答案:

没有答案