目前我广泛使用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)
调用应该在解析失败时抛出异常或其他东西!
任何人都知道我该怎么做?
答案 0 :(得分:2)
根据documentation contrib.ffmpeg.decode_audio
,如果解码失败,则会返回空张量,因此您可以检查FFmpeg
是否遇到致命错误。
如果错误可以恢复,这将无效,因为FFmpeg
将能够继续解码。