👌
Lambdaでの音声処理(ffmpeg, librosa)を完全攻略した
はじめに
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