👌

Lambdaでの音声処理(ffmpeg, librosa)を完全攻略した

2022/10/06に公開

はじめに

pythonを用いた音声処理をLambdaで行いたかったが、コンテナベースでffmpegやlibrosaを動かすために結構苦戦したので記事にした。

AmazonLinuxベースでコンテナイメージを作成しようとしたが、yumコマンドでffmpegやlibsndfileがインストールできず、それの回避方法を本記事で記載している。

超概要

yumでインストールできないので、curlコマンドで必要なパッケージをダウンロードしてきて、インストール作業を行う。

具体的なDockerFile

インストールするために、本筋とは関係がないgccのインストールをしているので、もしかしたらより良い方法もあるかもしれないが、いったん動作したので本記事としてはこれが完成版。
どなたか、より良くしたらコメントで教えて下さい。

FROM public.ecr.aws/lambda/python:3.7

ENV SNDFILE_VERSION=1.0.28

COPY requirements.txt  .
RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"
WORKDIR "${LAMBDA_TASK_ROOT}"

RUN curl -L -o "libsndfile-${SNDFILE_VERSION}.tar.gz" "http://www.mega-nerd.com/libsndfile/files/libsndfile-${SNDFILE_VERSION}.tar.gz"

RUN tar xf "libsndfile-${SNDFILE_VERSION}.tar.gz"

WORKDIR "${LAMBDA_TASK_ROOT}/libsndfile-${SNDFILE_VERSION}"

RUN yum install -y gcc
RUN ./configure --prefix=/opt/
RUN make
RUN make install

WORKDIR "${LAMBDA_TASK_ROOT}"

RUN curl https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz -o ffmpeg.tar.xz -s
RUN tar -xf ffmpeg.tar.xz
RUN mv ffmpeg-*-amd64-static/ffmpeg /usr/bin

# Create function directory
RUN mkdir -p ${LAMBDA_TASK_ROOT}

COPY lambda_function.py .

CMD [ "lambda_function.lambda_handler" ]

終わりに

lambdaで音声処理をすることは少ないかもしれませんが、fargateやEC2でAmazonLinuxをベースにしたときにも困るだろうと想像しているので、本記事を参考にしていただければ幸いです。

Discussion