将pydub与AWS存储的文件一起使用

时间:2019-04-15 17:39:20

标签: django amazon-web-services amazon-s3 pydub

我想串联存储在AWS中的两个文件,将它们另存为.wav,然后将它们传递给IBM的语音文本API。 这是正常打给IBM的电话。

Let us try another step

pydub是否可以直接导出到AWS,因为我无法在线将其存储在本地?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

当您说“导出到AWS”时,我想您的意思是Amazon S3。您要从那里调用IBM的语音文本API。要在python中与Amazon S3交互,您应该使用boto3 SDK。

如果不需要,您不需要将数据导出到临时本地文件。您可以将数据保留在python的内存中。

import os
import io

import boto3
from pydub import AudioSegment
from ibm_watson import SpeechToTextV1

speech_to_text = SpeechToTextV1()

s3r = boto3.resource("s3")
bucket = "randall-stackoverflow"

file1 = io.BytesIO()
s3r.Object(bucket, "file1.wav").download_fileobj(file1)
file2 = io.BytesIO()
s3r.Object(bucket, "file2.wav").download_fileobj(file2)

sound1 = AudioSegment.from_wav(file1)
sound2 = AudioSegment.from_wav(file2)

combined = sound1.append(sound2) # maybe add crossfade
recognition_job = speech_to_text.create_job(
    combined.raw_data,
    content_type='audio/wav',
    timestamps=True
)

如果我不提Amazon Transcribe会让您在AWS云中完成所有这些工作,那我会感到很失落。

transcribe = boto3.client("transcribe")
url = "{}/{}/{}".format(
    s3r.meta.client.meta.endpoint_url,
    bucket,
    "file1.wav"
)
transcribe.start_transcription_job(
    TranscriptionJobName="ExampleJob",
    Media={"MediaFileUri": url},
    LanguageCode="en-US",
    MediaFormat="wav"
)