📌
docker環境でSRTを有効にしてffmpeg 5.0.xをビルドする
Oracle Cloudのarm64のubuntu 20.04 を使用しています。
新しいバージョンのffmpegをビルドします。
ビルドするときにさまざまな開発用パッケージが必要になるのですが、今回はそれをdocker環境の中でやって、日常の環境に余計なものをインストールしないようにしてみました。
デフォルトのffmpegのコンフィグを確認
$ /usr/bin/ffmpeg -version
ffmpeg version 4.2.4-1ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
configuration: --prefix=/usr --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
(横スクロールして見てください)
ffmpegのソースコードを入手して、最近のリリースタグでチェックアウトする
$ git clone https://git.ffmpeg.org/ffmpeg.git
$ cd ffmpeg
$ git tag
...
n4.5-dev
n5.0
n5.0.1
n5.1-dev
v0.5
v0.5.1
v0.5.2
v0.5.3
v0.6
v0.6.1
$ git checkout -b w5.0.1 n5.0.1
docker環境の生成
ffmpegのソースコードを展開したカレントディレクトリをdocker環境内にマウントします。
$ docker run -it -v $PWD:/root/ffmpeg ubuntu:20.04 /bin/bash
docker環境内でビルド
# cd /root/ffmpeg/
# apt update
# apt upgrade
# apt install vim
# vi /etc/apt/sources.list
# apt update
# apt build-dep ffmpeg
# apt install libsrt-dev libssl-dev
# sh conf.sh
/etc/apt/sources.list
の変更に関してはこちらを参照。
./configure
を何度か試すので、conf.sh
に書き出しました。
ffmpeg関連のライブラリはスタティックリンクしたいので--disable-shared --enable-static
SRTのプロトコルを使いたいので --enable-libsrt
ffmpeg 4.2.4 -> 5.0.1 で削除されたり、コンフィグ時にエラーになったオプションを削除しています。
conf.sh
./configure --prefix=/usr/local --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --disable-shared --enable-static --enable-libsrt
#--enable-avresample
#--enable-libwavpack
#--enable-libwebp
#--enable-avisynth
#--disable-filter=resample
(横スクロールして見てください)
# make -j`nproc`
無事にビルドが完了したら、docker環境から抜けます。
# exit
ビルド環境の保存
後日修正してビルドしたくなったときのために終了したコンテナをcommitしておきます。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1293d119b64c ubuntu:20.04 "/bin/bash" About an hour ago Exited (0) 10 seconds ago
$ docker commit 1293d119b64c ffmpeg_build
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ffmpeg_build latest 1ade1c126fcd 33 seconds ago 1.12GB
続きをするには以下のようにします。
$ docker run -it -v $PWD:/root/ffmpeg ffmpeg_build /bin/bash
インストール
実行ファイルだけを/usr/local/bin
にコピーし、新しいものが使用されるようにhashを再作成します。
$ sudo cp ffmpeg ffprobe ffplay /usr/local/bin
$ type ffmpeg
ffmpeg is hashed (/usr/local/bin/ffmpeg)
$ hash -r
$ type ffmpeg
ffmpeg is /usr/local/bin/ffmpeg
バージョンの確認。
$ ffmpeg -version
ffmpeg version 5.0.1-1ubuntu0.1 Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
configuration: --prefix=/usr/local --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --disable-shared --enable-static --enable-libsrt
libavutil 57. 17.100 / 57. 17.100
libavcodec 59. 18.100 / 59. 18.100
libavformat 59. 16.100 / 59. 16.100
libavdevice 59. 4.100 / 59. 4.100
libavfilter 8. 24.100 / 8. 24.100
libswscale 6. 4.100 / 6. 4.100
libswresample 4. 3.100 / 4. 3.100
libpostproc 56. 3.100 / 56. 3.100
SRTのプロトコルが入っていることを確認。
$ ffmpeg -protocols 2>/dev/null |grep srt
srtp
srt
srtp
srt
関連
Discussion