如何在TensorFlow图中读取Ogg或MP3音频文件?

Car*_*omé 8 audio ffmpeg tensorflow

我见过tf.image.decode_pngTensorFlow中的图像解码器,但读取音频文件(WAV,Ogg,MP3等)怎么样?没有可能TFRecord吗?

这样的事情:

filename_queue = tf.train.string_input_producer(['my-audio.ogg'])
reader = tf.WholeFileReader()
key, value = reader.read(filename_queue)
my_audio = tf.audio.decode_ogg(value)
Run Code Online (Sandbox Code Playgroud)

dsa*_*laj 6

不幸的是,TensorFlow 2.x 不支持@sygi 的答案。另一种解决方案是使用一些外部库(例如pydublibrosa)来实现 mp3 解码步骤,并通过使用tf.py_function. 所以你可以按照以下方式做一些事情:

from pydub import AudioSegment
import tensorflow as tf

dataset = tf.data.Dataset.list_files('path/to/mp3s/*')

def decode_mp3(mp3_path):
    mp3_path = mp3_path.numpy().decode("utf-8")
    mp3_audio = AudioSegment.from_file(mp3_path, format="mp3")
    return mp3_audio.get_array_of_samples()

dataset = dataset.map(lambda path:
    tf.py_function(func=decode_mp3, inp=[path], Tout=tf.float32))

for features in dataset.take(3):
    data = features.numpy()
    plt.plot(data)
    plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


syg*_*ygi 5

是的,包裹tensorflow.contrib.ffmpeg中有特殊的解码器.要使用它,您需要先安装ffmpeg.

例:

audio_binary = tf.read_file('song.mp3')
waveform = tf.contrib.ffmpeg.decode_audio(audio_binary, file_format='mp3', samples_per_second=44100, channel_count=2)
Run Code Online (Sandbox Code Playgroud)