首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件转换AWS Lambda

文件转换AWS Lambda
EN

Stack Overflow用户
提问于 2021-04-10 17:21:21
回答 2查看 872关注 0票数 1

我希望.webm文件在到达.wav桶后被转换为.wav文件。我学习了教程,并试图使用.webm -> .wav ffmpeg命令描述这里从我的用例中调整它。

我的AWS函数通常可以工作,因为当我的.webm文件命中源桶时,它被转换为.wav,并在目标桶中结束。但是,生成的文件.wav总是0字节(尽管.webm不是,包括适当的音频)。我把代码改错了吗?我只更改了第一个链接中的ffmpeg_cmd行。

代码语言:javascript
复制
import json
import os
import subprocess
import shlex
import boto3

S3_DESTINATION_BUCKET = "hmtm-out"
SIGNED_URL_TIMEOUT = 60

def lambda_handler(event, context):

    s3_source_bucket = event['Records'][0]['s3']['bucket']['name']
    s3_source_key = event['Records'][0]['s3']['object']['key']

    s3_source_basename = os.path.splitext(os.path.basename(s3_source_key))[0]
    s3_destination_filename = s3_source_basename + ".wav"

    s3_client = boto3.client('s3')
    s3_source_signed_url = s3_client.generate_presigned_url('get_object',
        Params={'Bucket': s3_source_bucket, 'Key': s3_source_key},
        ExpiresIn=SIGNED_URL_TIMEOUT)
    
    ffmpeg_cmd = "/opt/bin/ffmpeg -i \"" + s3_source_signed_url + "\" -c:a pcm_f32le " + s3_destination_filename + " -"
    
    
    command1 = shlex.split(ffmpeg_cmd)
    p1 = subprocess.run(command1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    resp = s3_client.put_object(Body=p1.stdout, Bucket=S3_DESTINATION_BUCKET, Key=s3_destination_filename)

    return {
        'statusCode': 200,
        'body': json.dumps('Processing complete successfully')
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-10 17:53:38

所提供的代码使用ffmpeg的输出作为源数据上载。为此,ffmpeg需要输出数据。打破命令

代码语言:javascript
复制
"-i \"" + s3_source_signed_url + "\" " +   # The input filename to use
"-c:a pcm_f32le " +                        # The encoder to use
s3_destination_filename + " " +            # The output filename to write to
"-"                                        # Output data to stdout

换句话说,您是在告诉ffmpeg使用两个不同的输出。这不是你想要的。最重要的是,如果删除输出文件名,使其只尝试使用stdout,它将不知道使用哪种文件格式。

如果您使用的命令如下:

代码语言:javascript
复制
ffmpeg_cmd = "/opt/bin/ffmpeg -i \"" + s3_source_signed_url + "\" -c:a pcm_f32le -f wav -"

它应该能做你想要的。这里,ffmpeg被指示输出为wav文件,并且只将输出发送到stdout。

票数 0
EN

Stack Overflow用户

发布于 2021-12-16 05:11:02

我尝试了将数据输出到stdout的方法,但花费了超过15分钟,但失败了。

因此,我使用的EFS可以容纳超过512 MB的文件。与Lambda - AWS Lambda一起使用Amazon

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67037257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档