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

2024-04-18 18:00:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我要计算视频文件中每帧1秒音频片段的频谱图。在

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

从视频中提取并以48 kHz采样的音频。我使用window_size=480(0.01*采样率)和stride=240(0.5重叠)。我所有的视频文件每秒25帧,持续时间为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]的操作),但不知道如何执行,因为波形参数只接受1维的数组。另外,我也不确定批量操作是否会加快进程。在


Tags: sample函数outputratetfasfilenamestart