大纲
在直播里领域,我们经常需要对视频流进行处理。FFmpeg则是该领域中处理的利器。这篇文章,我们将以视频流截图为例,讲解如何在AWS Lambda中对m3u8视频流进行截图。因为Lambda是无服务架构,其本地存储是不可靠的,于是最后我们需要将截图文件上传S3桶。
1 部署有FFmpeg功能的Lambda环境
1.1 部署层
这块的方案可以见《在AWS Lambda上部署标准FFmpeg工具——自定义层的方案》和《在AWS Lambda上部署EC2编译的FFmpeg工具——自定义层的方案》
《在AWS Lambda上部署标准FFmpeg工具——Docker方案》也是可以参考的。但是这个要求代码在部署时已经完备,而本例会在后面分析代码,所以本文中不参考这套部署方案。
1.2 部署代码
1.2.1 FFmpeg指令
我们使用的指令是:
ffmpeg -probesize 32768 -i {
m3u8_stream_url} -y -t 0.001 -ss 1 -f image2 -r 1 -
其中*{m3u8_stream_url}*是需要被替换成视频流地址。其参数解析见下:
- -probesize 32768:以字节为单位设置探测大小,即分析获取流信息的数据大小
- -i:输入目标
- -y:无需询问即可覆盖输出目标
- -t:当用作输入选项(之前-i)时,限制从输入文件读取数据 的持续时间。我这里设置的是0.001秒
- -ss:开始时间。
- -f:强制输入或输出文件格式。
- image2:图像文件解复用器。
- -r:提取图像的频率
- -:输出目标。因为FFmpeg截图的图片不能落盘,于是通过这个配置让图片内容进入标准输出。
1.2.2 代码
我们使用Python代码来完成这个功能。
import json
import<