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

AWS Lambda使用FFmpeg处理S3视频报错:文件或目录不存在

问题排查与解决

1. 确认输入视频已成功下载至Lambda的/tmp目录

Lambda仅允许读写/tmp目录,若未将S3中的源视频正确下载到该目录,ffmpeg会因找不到输入文件而无法生成输出文件。检查你的S3下载代码:

import boto3

s3 = boto3.client('s3')
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']

# 确保下载路径正确
s3.download_file(bucket, key, '/tmp/input.mp4')

同时确认Lambda执行角色拥有目标S3桶的GetObject权限。

2. 捕获ffmpeg命令的执行日志

ffmpeg命令执行失败时不会主动抛出Python异常,仅返回非0退出码,需捕获输出日志才能定位问题。修改你的ffmpeg执行代码:

import subprocess

# 示例降分辨率命令(保持宽高比,将高度设为720)
cmd = [
    'ffmpeg',
    '-i', '/tmp/input.mp4',
    '-vf', 'scale=-2:720',
    '-c:v', 'libx264',
    '-crf', '23',
    '-preset', 'fast',
    '-c:a', 'copy',
    '/tmp/resizedVideo.mp4'
]

# 捕获命令输出与错误信息
result = subprocess.run(cmd, capture_output=True, text=True)
print("FFmpeg stdout:", result.stdout)
print("FFmpeg stderr:", result.stderr)
print("Return code:", result.returncode)

# 命令执行失败时主动抛出异常
if result.returncode != 0:
    raise Exception(f"FFmpeg执行失败: {result.stderr}")

查看CloudWatch日志中的ffmpeg错误输出,常见问题包括输入文件损坏、参数格式错误(如scale参数写法不对)。

3. 检查/tmp目录的空间与权限

Lambda的/tmp目录默认有512MB存储空间,若源视频过大导致处理时空间不足,也会无法生成输出文件。可添加代码查看剩余空间:

import shutil
disk_usage = shutil.disk_usage('/tmp')
print(f"/tmp剩余空间: {disk_usage.free / 1024 / 1024:.2f} MB")

另外,/tmp目录默认权限为777,可通过以下代码确认:

import os
print("/tmp目录权限:", oct(os.stat('/tmp').st_mode)[-3:])

4. 核对输出文件路径的准确性

确保后续操作(如上传至S3)使用的路径与ffmpeg输出路径完全一致,避免大小写、拼写错误(Linux系统路径区分大小写)。

常见错误案例

  • 输入文件路径错误:下载时用/tmp/input.mp4,但ffmpeg命令中写成/tmp/Input.mp4
  • ffmpeg参数错误:scale参数格式错误(如写成720:-2而非scale=-2:720)
  • 源视频编码不兼容:ffmpeg无法识别输入视频的编码格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:36:35