gpt4 book ai didi

encoding - Lambda 上的 FFmpeg 转码导致无法使用(静态)音频

转载 作者:行者123 更新时间:2023-12-03 15:59:47 31 4
gpt4 key购买 nike

我想在 AWS 中转向无服务器音频转码例程。我一直在尝试设置一个 Lambda 函数来做到这一点;执行静态 FFmpeg 二进制文件并重新上传生成的音频文件。我使用的静态二进制文件是 here .

我在 Python 中使用的 Lambda 函数如下所示:

import boto3

s3client = boto3.client('s3')
s3resource = boto3.client('s3')

import json
import subprocess

from io import BytesIO

import os

os.system("cp -ra ./bin/ffmpeg /tmp/")
os.system("chmod -R 775 /tmp")

def lambda_handler(event, context):

bucketname = event["Records"][0]["s3"]["bucket"]["name"]
filename = event["Records"][0]["s3"]["object"]["key"]

audioData = grabFromS3(bucketname, filename)

with open('/tmp/' + filename, 'wb') as f:
f.write(audioData.read())

os.chdir('/tmp/')

try:
process = subprocess.check_output(['./ffmpeg -i /tmp/joe_and_bill.wav /tmp/joe_and_bill.aac'], shell=True, stderr=subprocess.STDOUT)
pushToS3(bucketname, filename)
return process.decode('utf-8')
except subprocess.CalledProcessError as e:
return e.output.decode('utf-8'), os.listdir()


def grabFromS3(bucket, file):

obj = s3client.get_object(Bucket=bucket, Key=file)
data = BytesIO(obj['Body'].read())

return(data)

def pushToS3(bucket, file):

s3client.upload_file('/tmp/' + file[:-4] + '.aac', bucket, file[:-4] + '.aac')

return

你可以收听这个 here的输出. 警告 :调低音量,否则耳朵会流血。

原文件可听 here .

有谁知道可能导致编码错误的原因?文件上传似乎不是问题,因为 Lambda fs 上的 md5 与上传文件的 MD5 匹配。

我还尝试在 EC2 中的 Amazon Linux 实例上构建静态二进制文件,然后将其压缩并移植到 Lambda 项目中,但同样的问题仍然存在。

我难住了! :(

最佳答案

好吧,这是一个有趣的。

所以事实证明,Python 子进程从后台运行的一些 Lambda 进程继承了标准输入。我在看this AWS re:Invent keynote他正在描述他们遇到的一些问题。这个问题。

我添加了 stdin=subprocess.DEVNULL到子进程调用,音频现在已修复。

如果你问我,这是非常有趣的错误。

关于encoding - Lambda 上的 FFmpeg 转码导致无法使用(静态)音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52007992/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com