boto3 S3 对象解析

2024-04-19

我正在尝试编写一个 Python 脚本来处理存储在 S3 上的音频数据。

我有一个 S3 对象,我正在使用它调用

def grabAudio(filename, directory):

     obj = s3client.get_object(Bucket=bucketname, Key=directory+'/'+filename)

return obj['Body'].read()

使用访问数据

print(obj['Body'].read())

产生正确的音频信息。所以它可以很好地访问存储桶中的数据。

当我尝试在我的音频处理库(pydub)中使用这些数据时,它失败了:

audio = AudioSegment.from_wav(grabAudio(filename, bucketname))

Traceback (most recent call last): File "split_audio.py", line 38, in <module> audio = AudioSegment.from_wav(grabAudio(filename, bucketname)) File "C:\Users\jmk_m\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pydub\audio_segment.py", line 544, in from_wav return cls.from_file(file, 'wav', parameters) File "C:\Users\jmk_m\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pydub\audio_segment.py", line 456, in from_file file.seek(0) AttributeError: 'bytes' object has no attribute 'seek'

从 s3 传入的对象的格式是什么?我猜是字节数组?如果是这样,有没有办法将其解析为 .wav 格式而无需保存到磁盘?我试图避免保存到磁盘。

还对替代音频处理库开放。


感谢 Linas 链接了类似的问题,感谢 Jiaaro 的回答。

 import io
    s = io.BytesIO(y['data'])
    AudioSegment.from_file(s).export(x, format='mp3')

允许我直接从桶中拉入内存

obj = s3client.get_object(Bucket=bucketname, Key=customername+'/'+filename)

data = io.BytesIO(obj['Body'].read())
audio = AudioSegment.from_file(data)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

boto3 S3 对象解析 的相关文章

随机推荐