当前位置: 首页 > news >正文

在AWS Lambda上部署标准FFmpeg工具——自定义层的方案

大纲

  • 1 确定Lambda运行时环境
    • 1.1 Lambda系统、镜像、内核版本
    • 1.2 运行时
      • 1.2.1 Python
      • 1.2.2 Java
  • 2 打包FFmpeg
  • 3 创建Lambda的Layer
  • 4 测试
    • 4.1 创建Lambda函数
    • 4.2 附加FFmpeg层
    • 4.3 添加测试代码
    • 4.4 运行测试
  • 参考文献

FFmpeg被广泛应用于音/视频流处理领域。对于简单的需求,我们可以直接运行FFmpeg二进制程序命令就可以完成。但是对于定制性的功能,则需要熟悉系统的代码设计框架,进行二次开发。文本讨论的是在AWS无服务架构的Lambda上,如何通过自定义层部署FFmpeg二进制程序。

1 确定Lambda运行时环境

Lambda运行时决定了其运行的CPU架构、操作系统和辅助软件。不同语言的运行时环境不同,相同语言的不同版本的运行时不同,所以这步的确认非常重要,否则会造成FFmpeg与Lambda不兼容的问题。下面是从AWS官方摘录了运行时信息,仅供参考。

1.1 Lambda系统、镜像、内核版本

系统镜像Linux 内核
Amazon Linux镜像 – amzn-ami-hvm-2018.03.0.20181129-x86_64-gp24.14
Amazon Linux 2自定义4.14

1.2 运行时

1.2.1 Python

Python 运行时标识符AWS Python的软件工具包操作系统架构
Python 3.9python3.9boto3-1.20.32 botocore-1.23.32Amazon Linux 2x86_64,arm64
Python 3.8python3.8boto3-1.20.32 botocore-1.23.32Amazon Linux 2x86_64,arm64
Python 3.7python3.7boto3-1.20.32 botocore-1.23.32Amazon Linuxx86_64
Python 3.6python3.6boto3-1.20.32 botocore-1.23.32Amazon Linuxx86_64

1.2.2 Java

Java 运行时标识符JDK作系统架构
Java 11java11amazon-corretto-11Amazon Linux 2x86_64,arm64
Java 8java8.al2amazon-corretto-11Amazon Linux 2x86_64,arm64
Java 8java8amazon-corretto-11Amazon Linuxx86_64

本例使用Python3.9版本,其操作系统是Amazon Linux 2,Linux内核是“4.14”,架构是“x86_64,arm64”。在这两种CPU架构中,我们选择适用面更广的x86_64。如果选择arm64,后续FFmpeg选择,以及Lambda函数运行时也要做出相应调整。

2 打包FFmpeg

在FFmpeg官网的下载页面,可以找到“Linux Static Builds”。这个链接下的编译结果支持Linux内核3.2.0版本以上的系统,我们只要选择相应的架构就行了。
在上一步中,我们选择了x86_64,对应的是amd64的FFmpeg。至于为什么是这样的对应关系,可以参见维基百科的内容。总体来说,就是一个是AMD取得名字,一个是Intel取得名字。

x86-64(又称x64,即英文词64-bit extended,64位拓展的简写)是一个处理器的指令集架构,基于x86架构的64位拓展,向后兼容于16位及32位的x86架构。x64于1999年由AMD设计,AMD首次公开64位集以扩展给x86,称为“AMD64”。其后也为英特尔所采用,现时英特尔称之为“Intel 64”,在之前曾使用过“Clackamas Technology” (CT)、“IA-32e”及“EM64T”。
苹果公司和RPM包管理员以“x86-64”或“x86_64”称呼此64位架构。甲骨文公司及Microsoft称之为“x64”。BSD家族及其他Linux发行版则使用“amd64”,32位版本则称为“i386”(或 i486/586/686),Arch Linux及其派生发行版用x86_64称呼此64位架构。

将对应的包下载下来

wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz.md5
md5sum -c ffmpeg-release-amd64-static.tar.xz.md5
tar xvf ffmpeg-release-amd64-static.tar.xz

打包成AWS Lambda的层可以接受的包格式zip(特别需要注意目录层级关系

mkdir -p ffmpeg/bin
cp ffmpeg-4.3.1-amd64-static/ffmpeg ffmpeg/bin/
cd ffmpeg
zip -r ../ffmpeg.zip .

3 创建Lambda的Layer

由于FFmpeg的包不是很大,我们可以直接通过本地文件上传的方式提交层的内容。
同时要选择好与上步下载的FFmpeg相同架构的“x86_64”。由于从Python3.6到Python3.9都支持x86_64架构,所以这个层可以给这些版本的Python使用。
最后注意下,在License处填写http://www.ffmpeg.org/legal.html,以确保许可。
在这里插入图片描述

4 测试

4.1 创建Lambda函数

选择适用于上述创建层的运行时环境(Python3.9)和架构(x86_64)
在这里插入图片描述

4.2 附加FFmpeg层

在这里插入图片描述
在这里插入图片描述

4.3 添加测试代码

下面的代码通过查询FFmpeg版本号,以测试上述部署的可行性。

import subprocess
import shlexdef lambda_handler(event, context):if not event:return {'statusCode': 400,'body': json.dumps('event error')}ffmpeg_cmd = "/opt/bin/ffmpeg -version"command = shlex.split(ffmpeg_cmd)p = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)return {'statusCode': 200,'body': str(p.stdout, encoding='utf-8')}

4.4 运行测试

在这里插入图片描述
可以看到上述部署是成功的。

参考文献

  • https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/lambda-runtimes.html
  • https://aws.amazon.com/cn/blogs/media/processing-user-generated-content-using-aws-lambda-and-ffmpeg/
  • https://blog.csdn.net/wujiesunlirong/article/details/126424832

相关文章:

在AWS Lambda上部署标准FFmpeg工具——自定义层的方案

大纲 1 确定Lambda运行时环境1.1 Lambda系统、镜像、内核版本1.2 运行时1.2.1 Python1.2.2 Java 2 打包FFmpeg3 创建Lambda的Layer4 测试4.1 创建Lambda函数4.2 附加FFmpeg层4.3 添加测试代码4.4 运行测试 参考文献 FFmpeg被广泛应用于音/视频流处理领域。对于简单的需求&#…...

prometheus服务发现之consul

文章目录 前言一、Consul 在这里的作用二、原理三、实现过程安装 consul节点信息(exporter)注册进去consul节点信息(exporter)从consul解除注册:prometheus配置consul地址 总结 前言 我们平时使用 prometheus 收集监控…...

基于SSM的鞍山职业技术学院图书借阅管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的鞍山职业技术学院图书借阅管理…...

分布式数据库HBase

文章目录 前言 一、HBase概述 1.1.1 什么是HBase HBase是一个分布式的、面向列的开源数据库HBase是Google BigTable的开源实现HBase不同于一般的关系数据库, 适合非结构化数据存储HBase是一种分布式、可扩展、支持海量数据存储的 NoSQL数据库。HBase是依赖Hadoop的。为什么HBa…...

快捷切换raw页面到repo页面-Raw2Repo插件

Raw2Repo By Rick 📖快捷切换代码托管平台raw页面到repo页面 🔗github链接 https://github.com/rickhqh/Raw2Repo ✨Features 功能: ✅单击 Raw2Repo 插件按钮,即可跳转到相应的代码仓库页面。✅支持 GitHub、Gitee、GitCode …...

web:[GXYCTF2019]BabyUpload(文件上传、一句话木马、文件过滤)

题目 页面显示为文件上传 随便上传一个文件看看 上传一个文本文件显示 上传了一个图片显示 上传包含一句话木马的图片 上传了一个包含php一句话木马的文件,显示如上 换一个写法 上传成功 尝试上传.htaccess,上传失败,用抓包修改文件后缀 …...

C++ Div3、Sqrt 函数高性能实现(带汇编指令集)

均采用魔法数字(Magic Number)实现,一个是经典求平方根函数所使用的魔法数字:0x5f375a86、0x5f3759df。 float Sqrt(float x) noexcept { /* 0x5f3759df */float xhalf 0.5f * x;int32_t i *(int32_t*)&x;i 0x5f375a86 - …...

西南科技大学模拟电子技术实验四(集成运算放大器的线性应用)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) 反相比例运算电路(1)实验…...

【五分钟】学会利用cv2.resize()函数实现图像缩放

引言 在numpy知识库:深入理解numpy.resize函数和数组的resize方法中,小编较为详细地探讨了numpy的resize函数背后的机理。从结果来看,numpy.resize函数并不适合对图像进行缩放操作。而opencv中的resize函数虽然和numpy的resize函数同名&…...

vuepress-----18、图片缩放

图片引入两种方式 地址 # 图片缩放插件 # 实战 md文件引入图片 <img class"zoom-custom-imgs" :src"$withBase(/favicon.ico)" alt"favicon">安装配置插件 vuepress/medium-zoom: {selector: img.zoom-custom-imgs,},效果展示...

前端开发_移动Web+动画

平面转换 作用&#xff1a;为元素添加动态效果&#xff0c;一般与过渡配合使用 概念&#xff1a;改变盒子在平面内的形态&#xff08;位移、旋转、缩放、倾斜&#xff09; 平面转换又叫 2D 转换 平移 属性&#xff1a;transform: translate(X轴移动距离&#xff0c;Y轴移动…...

【Python】 生成二维码

创建了一个使用 python 创建二维码的程序。 下面是生成的程序的图像。 功能描述 输入网址&#xff08;URL&#xff09;。 输入二维码的名称。 当单击 QR 码生成按钮时&#xff0c;将使用 QRname 中输入的字符将 QR 码生成为图像。 程序代码 import qrcode import tkinterd…...

Qt与Sqlite3

操作流程&#xff1a; (1)与数据库连接 (2)进行增删改查操作 (3)关闭数据库 示例&#xff1a; 参考&#xff1a;Qt 操作SQLite数据库_qt sqlite数据库操作_houxian1103的博客-CSDN博客 再谈QSqlQuery::exec: database not open问题的解决_qt database not open-CSDN博客…...

在idea中使用maven创建dynamic web project

1、先创建一个empty project 2、添加一个module , 核心是选择maven archetype webapp, 这个是maven提供的创建web工程的模版。 3、添加完等自动安装好即可 4、目录可能不完整 右键src---->点击New---->点击Directory &#xff08;注意&#xff1a;这是笔者所缺失的结…...

【外观模式】SpringBoot集成mail发送邮件

前言 发送邮件功能&#xff0c;借鉴 刚果商城&#xff0c;根据文档及项目代码实现。整理总结便有了此文&#xff0c;文章有不对的点&#xff0c;请联系博主指出&#xff0c;请多多点赞收藏&#xff0c;您的支持是我最大的动力~ 发送邮件功能主要借助 mail、freemarker以及rocke…...

GUAVA 工具类

Guava是一个Google的开源Java库&#xff0c;常用的工具&#xff1a; 集合工具类&#xff0c;包括Lists&#xff08;创建&#xff1a;newArrayList、newLinkedList等&#xff09;、Sets&#xff08;创建&#xff1a;newHashSet、newLinkedHashSet等&#xff09;和Maps&#xff…...

高云GW1NSR-4C开发板上手使用

1.开发板 核心板&#xff0c;主芯片GW1NSR-LV4CQN48P&#xff0c;丝印文字“奥陶纪Octet&#xff0c;QQ群808770961”&#xff1a; 晶振&#xff1a;27MHz&#xff0c;22引脚 两个按键&#xff1a;靠近中间&#xff0c;23引脚&#xff0c;按下为低电平&#xff1b;靠近外侧&…...

androidstudio设置内存

androidstudio一直 scanning files to index&#xff0c;需要去设置内存&#xff1a; 操作如下&#xff1a;...

[ 蓝桥杯Web真题 ]-Markdown 文档解析

目录 介绍 准备 目标 规定 思路 补充知识 解法参考 介绍 Markdown 因为其简洁的语法大受欢迎&#xff0c;已经成为大家写博客或文档时必备的技能点&#xff0c;众多博客平台都提倡用户使用 Markdown 语法进行文章书写&#xff0c;然后再发布后&#xff0c;实时的将其转化…...

flask web学习之flask与http(一)

文章目录 一、请求响应循环二、HTTP请求1. 请求报文2. request对象3. 在flask中处理请求3.1 路由匹配3.2 设置监听的http方法3.3 URL处理 三、请求钩子 一、请求响应循环 每一个web应用都包含这种处理方式&#xff0c;请求-响应循环&#xff1a;客户端发出请求&#xff0c;服务…...

番茄小说下载器:打造个人数字图书馆的完整攻略

番茄小说下载器&#xff1a;打造个人数字图书馆的完整攻略 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否曾遇到过网络信号不佳时无法追更小说的烦恼&#xff1f;或者希…...

别再用subprocess了!Mojo原生FFI直连Python C API的5种安全模式,含CPython 3.11+PyPy兼容性矩阵表

第一章&#xff1a;Mojo 与 Python 混合编程案例 生产环境部署Mojo 作为新兴的系统级编程语言&#xff0c;原生兼容 Python 生态&#xff0c;支持在关键性能路径中无缝调用 Mojo 编译模块&#xff0c;同时复用 Python 的成熟工具链与部署基础设施。在生产环境中&#xff0c;典型…...

安全测试入门:开发与测试都需要知道的OWASP TOP 10

为何OWASP TOP 10是测试人员的必修课&#xff1f;在数字化浪潮席卷全球的今天&#xff0c;软件已深度融入商业运营与社会生活。每一次点击、每一次数据交换的背后&#xff0c;都潜藏着安全风险。对于软件测试从业者而言&#xff0c;功能与性能测试仅是基础&#xff0c;安全测试…...

MCP 实现深度技术报告

1. MCP 协议概述与架构定位 1.1 协议背景 Model Context Protocol (MCP) 是 Anthropic 推出的开放标准协议&#xff0c;旨在标准化 AI 助手与外部数据源、工具之间的集成方式。在 Claude Code 中&#xff0c;MCP 不仅是外部集成接口&#xff0c;更是核心架构组件&#xff0c;…...

C++学习笔记——初始化列表、创建和实例化对象、new 关键字、隐式构造与 explicit 关键字、运算符与运算符重载

目录 1. 初始化列表 1.1 基本语法 1.2 为什么使用初始化列表&#xff1f; 1.3 初始化顺序 2. 创建和实例化对象 2.1 栈上分配&#xff08;自动存储期&#xff09; 2.2 堆上分配&#xff08;动态存储期&#xff09; 2.3 栈 vs 堆&#xff1a;Cherno 的建议 3. new 关键…...

AI绘画新玩法:图图的嗨丝造相-Z-Image-Turbo部署实战,轻松生成高质量渔网袜图片

AI绘画新玩法&#xff1a;图图的嗨丝造相-Z-Image-Turbo部署实战&#xff0c;轻松生成高质量渔网袜图片 1. 引言&#xff1a;解锁AI绘画的专属风格 你是否曾经遇到过这样的困扰&#xff1f;想要生成特定风格的图片&#xff0c;比如穿着精致渔网袜的人物形象&#xff0c;但使用…...

基于RFM模型的电商用户价值分层画像分析

摘要本项目旨在通过Python对电商平台用户行为数据进行深度挖掘与分析&#xff0c;以构建用户画像为核心&#xff0c;实现对高价值用户、低价值用户及“白嫖党”的精准分层。项目基于RFM&#xff08;Recency, Frequency, Monetary&#xff09;模型理论&#xff0c;通过数据清洗、…...

VBA UserForm控件交互实战:跨窗体数据传递与动态更新

1. UserForm基础与跨窗体数据传递原理 刚接触VBA UserForm时&#xff0c;我经常被各种控件的交互问题困扰。特别是当需要多个窗体协同工作时&#xff0c;数据传递就成了大难题。记得有次做订单管理系统&#xff0c;主窗体收集客户信息&#xff0c;子窗体处理产品明细&#xff0…...

效果对比:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF在多轮对话与复杂指令跟随上的表现

效果对比&#xff1a;Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF在多轮对话与复杂指令跟随上的表现 1. 模型能力概览 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF&#xff08;以下简称"推理蒸馏模型"&#xff09;是一款专注于复杂推理和多轮对…...

网站关键词排名变化规律是什么_网站关键词排名优化对SEO的重要性是什么

网站关键词排名变化规律是什么_网站关键词排名优化对SEO的重要性是什么 在当今数字化时代&#xff0c;网站的SEO优化是一个至关重要的领域。其中&#xff0c;关键词排名的变化规律和关键词排名优化对SEO的重要性尤为关键。本文将详细探讨这两方面的内容&#xff0c;帮助你更好…...