全体の流れ
Amazon Linux 2023 (AL2023) にて ffmpegthumbnailer
を使えるようにするまでハマったので残しておく。
-
ffmpegthumbnailer
を使えるようにするまで-
ffmpeg
のソースからビルドとインストール -
ffmpegthumbnailer
のソースからビルドとインストール
-
- 発展 デプロイ用にパッケージ化
1. ffmpeg のインストールとビルド
まずは ffmpeg
のインストールとビルドを行う。
ffmpegthumbnailer
のビルドにて必要になる。
必要なパッケージをインストール
$ sudo dnf install -y git nasm yasm make cmake gcc gcc-c++ libtool automake autoconf
ffmpegのソースコードをクローン
$ cd /usr/local/src
$ sudo git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
x264とx265のサポートを無効にしてffmpegをビルドおよびインストール
$ cd /usr/local/src/ffmpeg
$ sudo ./configure --prefix=/usr/local --enable-shared --enable-gpl --disable-libx264 --disable-libx265
$ sudo make
$ sudo make install
だいぶ時間がかかる。t3.medium
で20分くらい
2. ffmpegthumbnailer のインストールとビルド
次に、 ffmpegthumbnailer
をソースからビルドしてインストールする。
必要なパッケージをインストール
$ sudo dnf install -y cmake libjpeg-devel libpng-devel glib2-devel
ffmpegthumbnailerのソースコードをクローン
$ cd /usr/local/src
$ sudo git clone https://github.com/dirkvdb/ffmpegthumbnailer.git
ビルド用ディレクトリの作成
$ cd /usr/local/src/ffmpegthumbnailer
$ sudo mkdir build
$ cd /usr/local/src/ffmpegthumbnailer/build
環境変数を設定
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
$ export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
$ export C_INCLUDE_PATH=/usr/local/include:$C_INCLUDE_PATH
$ export CPLUS_INCLUDE_PATH=/usr/local/include:$CPLUS_INCLUDE_PATH
cmakeを使用してビルド
$ sudo cmake .. -DFFMPEG_ROOT=/usr/local -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_PREFIX_PATH=/usr/local -DPKG_CONFIG_EXECUTABLE=/usr/bin/pkg-config
$ sudo make
$ sudo make install
ライブラリのコピーとシンボリックリンクの作成
$ sudo cp /usr/local/src/ffmpegthumbnailer/build/libffmpegthumbnailer.so.4.15.1 /usr/local/lib/
$ sudo ln -sf /usr/local/lib/libffmpegthumbnailer.so.4.15.1 /usr/local/lib/libffmpegthumbnailer.so.4
$ sudo ln -sf /usr/local/lib/libffmpegthumbnailer.so.4.15.1 /usr/local/lib/libffmpegthumbnailer.so
ライブラリキャッシュの更新
$ sudo ldconfig
インストール後の確認
$ ffmpegthumbnailer -v
ffmpegthumbnailer version: 2.2.2
恒久化
$ echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/custom-libs.conf
$ sudo ldconfig
発展
オートスケーリングでインスタンスの台数が変動するプロダクトでは、毎回make
をするのが辛い。時間がかかりすぎる。
ビルドした成果物をS3にアップロードして、インスタンスの初期セットアップ時はS3から成果物をダウンロードして展開することで短縮を図る。
S3にアップロード方法
ビルド成果物のアーカイブ
$ cd /usr/local
$ sudo tar -czvf ffmpeg_ffmpegthumbnailer_build.tar.gz \
/usr/local/bin/ffmpeg \
/usr/local/bin/ffmpegthumbnailer \
/usr/local/lib/libav* \
/usr/local/lib/libpost* \
/usr/local/lib/libswresample* \
/usr/local/lib/libswscale* \
/usr/local/lib/libavutil* \
/usr/local/lib/libffmpegthumbnailer* \
/usr/local/lib64/libffmpegthumbnailer* \
/usr/local/include/libav* \
/usr/local/include/libffmpegthumbnailer* \
/usr/local/lib/pkgconfig/libav* \
/usr/local/lib64/pkgconfig/libffmpegthumbnailer* \
/usr/local/share/man/man1/ffmpegthumbnailer.1
S3にアップロード
$ sudo aws s3 cp ffmpeg_ffmpegthumbnailer_build.tar.gz s3://your-bucket-name/path/to/ffmpeg_ffmpegthumbnailer_build.tar.gz
scp
コマンドで1度ローカルに落としてからマネコンにて直接アップロードもアリ
S3からにダウンロードして使う方法
S3からダウンロード
$ cd /usr/local
$ sudo aws s3 cp s3://your-bucket-name/path/to/ffmpeg_ffmpegthumbnailer_build.tar.gz .
アーカイブを解凍してキャッシュ更新
$ sudo tar -xzvf ffmpeg_ffmpegthumbnailer_build.tar.gz
$ sudo ldconfig
おまけ Elastic Beanstalk 使用時の .ebextensions 設定ファイル
S3の成果物を利用する時
01_ffmpeg_ffmpegthumbnailer.config
container_commands:
01_download_ffmpeg_ffmpegthumbnailer:
command: |
sudo mkdir -p /usr/local
cd /usr/local
sudo aws s3 cp s3://your-bucket-name/path/to/ffmpeg_ffmpegthumbnailer_build.tar.gz .
sudo tar -xzvf ffmpeg_ffmpegthumbnailer_build.tar.gz -C /
02_update_ldconfig:
command: |
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/custom-libs.conf
sudo ldconfig
毎回ビルド時(時間かかる)
01_ffmpeg_ffmpegthumbnailer.config
container_commands:
01_build_ffmpeg:
command: |
sudo dnf install -y git nasm yasm make cmake gcc gcc-c++ libtool automake autoconf
cd /usr/local/src
sudo git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
sudo ./configure --prefix=/usr/local --enable-shared --enable-gpl --disable-libx264 --disable-libx265
sudo make
sudo make install
02_install_ffmpegthumbnailer_dependencies:
command: sudo dnf install -y cmake libjpeg-devel libpng-devel glib2-devel
03_build_ffmpegthumbnailer:
command: |
cd /usr/local/src
sudo git clone https://github.com/dirkvdb/ffmpegthumbnailer.git
cd ffmpegthumbnailer
mkdir build
cd build
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/usr/local/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/usr/local/include:$CPLUS_INCLUDE_PATH
sudo cmake .. -DFFMPEG_ROOT=/usr/local -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_PREFIX_PATH=/usr/local -DPKG_CONFIG_EXECUTABLE=/usr/bin/pkg-config
sudo make
sudo make install
04_create_ffmpegthumbnailer_symlinks:
command: |
sudo cp /usr/local/src/ffmpegthumbnailer/build/libffmpegthumbnailer.so.4.15.1 /usr/local/lib/
sudo ln -sf /usr/local/lib/libffmpegthumbnailer.so.4.15.1 /usr/local/lib/libffmpegthumbnailer.so.4
sudo ln -sf /usr/local/lib/libffmpegthumbnailer.so.4.15.1 /usr/local/lib/libffmpegthumbnailer.so
05_update_ldconfig:
command: |
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/custom-libs.conf
sudo ldconfig