You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda运行FFmpeg处理远程视频上传S3出现空文件问题

问题根因与解决方案

核心错误修复

首先修复FFmpeg命令中的语法错误:你代码中写的-c: a copy存在多余空格,正确写法是-c:a copy,这个错误会导致FFmpeg参数解析失败,直接终止运行,无输出内容,就是你得到0字节文件的主要原因。

另外你的命令中重复定义了分辨率参数:-vf中已经包含scale=1080x1920,后面又加了-s 1080x1920,属于冗余配置,可删除其中一个避免冲突。

新增运行时错误校验

你当前代码没有判断FFmpeg的运行状态,直接上传stdout内容,即使FFmpeg执行失败也无法感知,建议增加错误判断和日志打印:

p1 = subprocess.run(split_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 新增FFmpeg执行结果校验
if p1.returncode != 0:
    # 打印错误日志到CloudWatch,方便排查问题
    print(f"FFmpeg执行错误,日志:{p1.stderr.decode('utf-8')}")
    raise RuntimeError(f"视频处理失败,返回码:{p1.returncode}")

优化输出兼容性

mov格式需要输出流支持随机寻址,而stdout是流式不可寻址的,输出mov到stdout可能会出现异常,可选择以下任意一种方案优化:

  • 方案1:将输出格式改为mp4,同时修改生成的key后缀为.mp4,mp4原生支持流式输出
  • 方案2:先将FFmpeg输出写入Lambda的/tmp目录,再读取文件上传到S3,兼容性更高,修改示例:
# 修改FFmpeg命令输出路径
command='''
/opt/bin/ffmpeg -i %s \
-vf "crop=w=in_h*9/16:h=in_h,scale=1080x1920" \
-vcodec libx264 \
-crf 23 \
-preset veryfast \
-c:a copy \
/tmp/output.mov \
-y
''' % (download_url)

# 执行后读取文件上传
with open('/tmp/output.mov', 'rb') as f:
    response = s3.put_object(Body=f.read(), Bucket='edited-clips', Key=key)

确认Lambda基础配置

  • 内存配置建议不低于1024MB,视频编解码属于高资源消耗操作,内存不足会被系统强制终止进程
  • 超时时间调整到至少30秒,可根据视频大小适当延长,避免处理未完成就被Lambda终止
  • 确认Lambda执行角色具备edited-clips桶的s3:PutObject权限,否则上传会失败
  • S3对象键建议去掉开头的斜杠,将key = '/edits/%s.mov'改为key = 'edits/%s.mov',避免出现多余的前缀斜杠

内容的提问来源于stack exchange,提问作者enjoysturtles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:36:00