gpt4 book ai didi

Python Lambda 函数和 ffmpeg 命令以及从 jpg 到 ts 文件的标准输出

转载 作者:行者123 更新时间:2023-12-04 23:20:14 25 4
gpt4 key购买 nike

我有一个 AWS Lambda Python 函数设置来处理 jpg 并将其转换为 ts 文件。
我遵循了这些说明 https://aws.amazon.com/blogs/media/processing-user-generated-content-using-aws-lambda-and-ffmpeg/但将命令从 vfr 更改为 cfr 转换为 jpg 到 ts 转换。
这是我正在使用的命令ffmpeg_cmd = "/opt/bin/ffmpeg -r 30000/1001 -loop 1 -i \"" + s3_source_signed_url + "\" -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=48000 -t 30 -vcodec libx264 -crf 23 -s 1920x1080 -r 30000/1001 -g 150 -pix_fmt yuv420p -acodec aac -b:a 96k -ar 48000 -"除了在我的 Lambda 中查找 jpeg 和 jpg 后缀的 s3 触发器之外,AWS 文章中的其他所有内容基本相同。
但这会导致 0 字节的 ts 文件。
我有一种预感,我需要在写入标准输出时修改具有可搜索输出格式(例如 mpegts)的命令;目前我的命令可能不适用于标准输出,这就是为什么我得到一个空的 ts 文件。但我无法正确格式化命令。对此的任何帮助将不胜感激!

最佳答案

解决这个问题的关键是使用临时文件夹和使用子进程调用
这是 Lambda 函数代码

import subprocess
import shlex
import boto3
import os


def lambda_handler(event, context):

s3_client = boto3.client('s3')

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]
destination_bucket = "destination-bucket"
destination_bucketfile_name = os.path.dirname(s3_source_key) + "/" + s3_source_basename+".ts"

l_input = "/tmp/" + os.path.basename(s3_source_key)
l_output = "/tmp/"+ s3_source_basename + ".ts"


s3_client.download_file(s3_source_bucket,s3_source_key,l_input)
subprocess.run(['ls','-l','/tmp'])

ffmpeg_cmd = "/opt/lib/ffmpeg -y -framerate 30000/1001 -loop 1 -i \"" + l_input + "\"" + " -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=48000 -c:v libx264 -crf 23 -s 1920x1080 -r 30000/1001 -g 150 -pix_fmt yuv420p -c:a aac -b:a 96k -ar 48000 -t 31 -f mpegts " + l_output
print(ffmpeg_cmd)
command1 = shlex.split(ffmpeg_cmd)
p1 = subprocess.call(ffmpeg_cmd, shell=True)

response="Failed"
if(p1==0):
response = s3_client.upload_file(l_output, Bucket=destination_bucket, Key=destination_bucketfile_name)
else:
print("Failed Process "+str(p1))

os.remove(l_input)
os.remove(l_output)

return {
'statusCode': 200,
'body': json.dumps(response)

}

关于Python Lambda 函数和 ffmpeg 命令以及从 jpg 到 ts 文件的标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68565819/

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