如何使用张量流加速频谱图计算?

时间:2019-03-29 14:24:19

标签: python tensorflow spectrogram

我想为视频文件中的每一帧计算1秒音频剪辑的频谱图。

我使用tensorflow.contrib.framework.python.ops.audio_ops.audio_spectrogram函数来计算频谱图。

从视频中提取并以48 kHz采样的音频。我正在使用window_size=480(0.01 * sample_rate)和stride=240(0.5重叠)。我所有的视频文件均为25 fps,时长为1〜10分钟。因此,它需要每秒计算25个频谱图。

我目前正在通过在时间x到x + 1秒处获取波形并将波形传递给audio_spectrogram()函数来计算频谱图。这是我如何计算音频文件的频谱图的摘录代码:

audio_binary = tf.read_file(filename)
wav = audio_ops.decode_wav(audio_binary)

with tf.Session() as sess:
    waveform, sample_rate = tf.run(wav)

for i in range(25 * video_duration):
    start = i * sample_rate / 25 # fps
    spect = audio_ops.audio_spectrogram(waveform[start:start+sample_rate], 480, 240)

    # spectrogram post processing...

    with tf.Session() as sess, open(get_output_filename(filename, i)) as output:
        encode = tf.image.encode_jpeg(spect)
        output.write(tf.run(encode))

不幸的是,这段代码要花费很长时间才能计算所有频谱图。完全计算5个音频文件的频谱图需要12个小时。我有数百个视频要计算:(。

有什么方法可以加快这个过程吗?

我正在考虑批量执行audio_spectrogram()函数(对[batch_size, waveform]进行某种操作),但不知道如何执行,因为wave参数仅占用1个dim的数组。另外,我不太确定是否分批进行操作会加快这一过程。

0 个答案:

没有答案