在Tensorflow

时间:2018-04-12 07:10:12

标签: python tensorflow ffmpeg

目前我广泛使用tensorflow的ffmpeg界面:

from tensorflow.contrib.framework.python.ops import audio_ops as contrib_audio
from tensorflow.python.ops import io_ops
from tensorflow.contrib import ffmpeg

def load(mp3_path):
    with tf.name_scope("loading") as scope:
        audio_binary = tf.read_file(mp3_path)
        waveform = tf.reshape(ffmpeg.decode_audio(
            audio_binary, file_format='mp3', 
            samples_per_second=44100, channel_count=1), [-1])
        return waveform

这很棒,但有时候(好吧,很多)我在循环一堆文件来创建TFRecord文件时会遇到这样的错误:

[mp3 @ 0xdd4400] Header missing
Error while decoding stream #0:0: Invalid data found when processing input
[mp3 @ 0xf2e440] Header missing
Error while decoding stream #0:0: Invalid data found when processing input
[mp3 @ 0x202bf40] invalid new backstep -1
[mp3 @ 0x15c5440] Header missing
Error while decoding stream #0:0: Invalid data found when processing input
[mp3 @ 0x1752460] Header missing
Error while decoding stream #0:0: Invalid data found when processing input
[mp3 @ 0x1f10160] Header missing
Error while decoding stream #0:0: Invalid data found when processing input
[mp3 @ 0x1a16dc0] Header missing
Error while decoding stream #0:0: Invalid data found when processing input
[mp3 @ 0x9f2c80] Header missing
Error while decoding stream #0:0: Invalid data found when processing input

在运行此Python脚本时显示在stdout中。

我想以某种方式抓住这些!如果我读取的数据无效,请阻止我的其余循环继续。

目前,这些错误刚刚发生,脚本开心地继续运行,这可能不是它应该工作的方式。

我没有为此使用数据集API,因此这些直接session.run(waveform_op)调用应该在解析失败时抛出异常或其他东西!

任何人都知道我该怎么做?

1 个答案:

答案 0 :(得分:2)

根据documentation contrib.ffmpeg.decode_audio,如果解码失败,则会返回空张量,因此您可以检查FFmpeg是否遇到致命错误。

如果错误可以恢复,这将无效,因为FFmpeg将能够继续解码。