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

如何在Amazon Linux 2环境下运行启用--enable-libfontconfig配置的FFmpeg(适配AWS Lambda)

如何在Amazon Linux 2环境下运行启用--enable-libfontconfig配置的FFmpeg(适配AWS Lambda)

问题背景

我知道你已经在AWS Lambda(基于Amazon Linux 2)上成功运行了FFmpeg,但现在需要启用--enable-libfontconfig配置来支持字体相关的处理——可惜之前用的John Van Sickle预编译版本没带这个配置,自己尝试从头编译也碰了壁。别担心,我来给你一步步梳理可行的解决方案。

核心思路

Lambda的运行环境和Amazon Linux 2的EC2实例完全一致,所以咱们必须在相同环境下编译FFmpeg,才能保证编译出来的二进制文件和依赖库能在Lambda里正常运行。下面是完整的实操步骤:

第一步:准备Amazon Linux 2编译环境

  • 先启动一台Amazon Linux 2的EC2实例,选适配Python 3.11的环境(和你之前搭建Lambda环境用的一致)。
  • 连接到EC2后,先把系统更新到最新版本:
sudo yum update -y

第二步:安装编译所需的依赖包

编译FFmpeg和libfontconfig需要一堆开发库,直接用yum一键安装:

sudo yum install -y git make gcc gcc-c++ autoconf automake libtool pkgconfig zlib-devel openssl-devel freetype-devel fontconfig-devel

第三步:编译带libfontconfig的FFmpeg

  1. 拉取FFmpeg的源码(也可以下载指定版本的压缩包,比如你需要的稳定版):
git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
  1. 配置编译选项,重点要加上--enable-libfontconfig,同时为了适配Lambda,咱们要尽量轻量化,关掉不需要的功能:
./configure \
  --prefix=/tmp/ffmpeg-build \
  --disable-debug \
  --disable-doc \
  --disable-static \
  --enable-shared \
  --enable-gpl \
  --enable-libfontconfig \
  --enable-small \
  --enable-openssl \
  --enable-freetype
  1. 开始编译,用-j$(nproc)可以利用EC2的所有CPU核心,加快编译速度:
make -j$(nproc)
make install

第四步:打包成Lambda Layer

Lambda Layer需要特定的目录结构,而且得把依赖的共享库也带上,不然Lambda环境里找不到这些库会报错:

  1. 先整理编译好的文件:
cd /tmp/ffmpeg-build
mkdir -p layer/bin
cp bin/ffmpeg layer/bin/
cp bin/ffprobe layer/bin/
  1. 复制依赖的共享库——可以用ldd命令查看FFmpeg需要哪些库,然后把它们都复制到layer的lib目录里:
mkdir -p layer/lib
# 先复制fontconfig和freetype相关的核心库
cp /usr/lib64/libfontconfig.so.1 layer/lib/
cp /usr/lib64/libfreetype.so.6 layer/lib/
# 再复制FFmpeg依赖的其他系统库
ldd /tmp/ffmpeg-build/bin/ffmpeg | grep -o '/usr/lib64/[^ ]*' | xargs cp -t layer/lib/
  1. 把整个layer目录打包成zip:
cd layer
zip -r ffmpeg-fontconfig-layer.zip .

第五步:上传到Lambda并验证

  1. 把打包好的ffmpeg-fontconfig-layer.zip上传到AWS Lambda作为Layer,然后关联到你的Lambda函数上。
  2. 写个简单的测试代码,验证FFmpeg是否真的启用了libfontconfig:
import subprocess
import os

def lambda_handler(event, context):
    # Lambda Layer里的bin目录会被加到PATH,也可以直接指定路径
    ffmpeg_path = os.path.join(os.environ['LAMBDA_TASK_ROOT'], 'bin', 'ffmpeg')
    result = subprocess.run([ffmpeg_path, '-version'], capture_output=True, text=True)
    print(result.stdout)
    if 'libfontconfig' in result.stdout:
        return {"status": "搞定!", "message": "带libfontconfig的FFmpeg已经可以用啦"}
    else:
        return {"status": "出错了", "message": "没检测到libfontconfig,检查下打包步骤"}

几个小提醒

  • 编译时尽量关掉不需要的功能,不然Layer体积太大,Lambda有大小限制的。
  • 复制依赖库的时候别漏了,不然运行时会报“找不到共享库”的错误。
  • 如果需要特定版本的FFmpeg,在git clone之后用git checkout 版本号切换到对应版本再编译就行。

备注:内容来源于stack exchange,提问作者Adrien Kaczmarek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 10:18:18