Librosa library run fail on Azure Function [Failure Exception: ReadTimeoutError: ffmpeg output]

Librosa library run fail on Azure Function [Failure Exception: ReadTimeoutError: ffmpeg output]

我将 librosa 和 audioread 库 python 函数上传到事件触发器 Azure 函数。一旦我将 m4a 或 ogg 文件上传到 blob,事件触发器将调用 Azure 函数来读取音频文件。但是,它有时工作有时不能。任何人都知道为什么?请帮忙!

我的代码是:

def load_audio(audio_path):
    f = audioread.audio_open(audio_path)
    audio_info={}
    audio_info['channels'] = f.channels
    audio_info['samplerate'] = f.samplerate
    audio_info['duration'] = f.duration
    audio_info['content'] = []
    for buf in f:
        in_data = np.frombuffer(buf, dtype=np.int16)
        audio_info['content'].extend(in_data)
    audio_info['content'] = np.array(audio_info['content'])
    return audio_info


def main(event: func.EventGridEvent, context: func.Context, bloboutoptimalenf: func.Out[bytes]):
    logging.info(f"Python blob trigger function processed blob \n")

    a=event.get_json()
    url = a['url']
    blob_client = BlobClient.from_blob_url(url)
    
    download_steam = blob_client.download_blob()
    logging.info('audio_finish+load')
    
    with open(os.path.join(tempfile.gettempdir(),'input.ogg'),'wb') as thefile:
        thefile.write(download_steam.readall())
        audio_path = thefile.name
   audio_information = load_audio(audio_path)

有时有效,有时显示以下错误:

Result: Failure Exception: ReadTimeoutError: ffmpeg output: 
b" Metadata:\n creation_time : 2021-06-21T08:35:04.000000Z\
nStream mapping:\n Stream #0:0 -> #0:0 (aac (native) -> pcm_s16le (native))
\nPress [q] to stop, [?] for help\nOutput #0, s16le, to 'pipe:':
\n Metadata:\n major_brand : mp42\n minor_version : 0\n 
compatible_brands: mp42isom\n iTunSMPB : 00000000 00000800 00000084 000000000327637C 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000\n 
encoder : Lavf58.20.100\n Stream #0:0(und): Audio: pcm_s16le, 44100 Hz,
 mono, s16, 705 kb/s (default)\n Metadata:\n creation_time : 2021-06-21T08:35:04.000000Z\n
 encoder : Lavc58.35.100 pcm_s16le\nsize= 8474kB time=00:01:
38.38 bitrate= 705.6kbits/s speed= 196x \rsize= 17108kB 
time=00:03:18.62 bitrate= 705.6kbits/s speed= 198x \rsize= 24206kB time=00:04:41.03 bitrate= 705.6kbits/s speed= 186x \rsize= 
31412kB time=00:06:04.69 bitrate= 705.6kbits/s speed= 181x 
\rsize= 39060kB time=00:07:33.48 bitrate= 705.6kbits/s speed= 181x \rsi" Stack: File "/azure-functions-host/workers/python/3.8/LINUX/X64/azure_functions_worker/
dispatcher.py", line 402, in _handle__invocation_request call_result = await self._loop.run_in_executor( File "/usr/local/lib/python3.8
/concurrent/futures/thread.py", line 57, in run result = 
self.fn(*self.args, **self.kwargs) File "/azure-functions-host
/workers/python/3.8/LINUX/X64/azure_
functions_worker/dispatcher.py", line 611, in _run_sync_func return ExtensionManager.get_sync_invocation_wrapper(context, File "/azure-functions-host/workers/python/3.8/LINUX/X64/azure_functions_worker
/extension.py", line 215, in _raw_invocation_wrapper result = function(**args) File "/home/site/wwwroot/BlobTriggerbendiforjson/__init__.py", 
line 319, in main audio_information = load_audio(audio_path) File "/home/site/wwwroot/BlobTriggerbendiforjson/__init__.py"
, line 31, in load_audio for buf in f: File "/usr/local/lib/python3.8/site-packages/audioread/ffdec.py", line 204, in read_data raise 
ReadTimeoutError('ffmpeg output: {}'.format(

如@bmcfee所说 here :

这不是 librosa 问题 -- 如果文件无法加载,那是因为 audioread 无法对其进行解码。它似乎正在使用 ffmpeg 后端,这意味着(可能)ffmpeg 也无法对其进行解码。该文件本身已损坏。我建议放入一些调试打印以准确追踪导致问题的文件。

所以,这是一个依赖性错误。