概要

FFmpegは、デコード、エンコード、トランスコード、マルチプレクサ、デマルチプレクサ、ストリーム、フィルタリング等の多くのものを再生することができるマルチメディアフレームワークである。
不明瞭な古いフォーマットから最先端のものまでをサポートしている。

FFmpegから使用できるライブラリには、以下に示すものが含まれている。

  • libavcodec
  • libavutil
  • libavformat
  • libavfilter
  • libavdevice
  • libswscale
  • libswresample


また、ffmpegファイル、ffplayファイル、ffprobeファイル等の実行ファイルは、エンドユーザがトランスコードや再生に使用することができる。


ビルドに必要なライブラリのインストール

sudo zypper install wget pkg-config autoconf automake glibc-devel gcc-c++ cmake git libtool meson ninja nasm yasm \
                    zlib-devel libgnutls-devel libgnutlsxx-devel libSDL2-devel libnuma-devel \
                    fontconfig-devel freetype2-devel fribidi-devel xxhash-devel libxml2-devel libICE-devel libSM-devel \
                    libchromaprint-devel frei0r-plugins-devel l-smash-devel \
                    libgme-devel codec2-devel rav1e-devel libcdio-devel libcdio-paranoia-devel libbluray-devel libtwolame-devel \
                    libvidstab-devel libwebp-devel libxvidcore-devel zvbi-devel cppzmq-devel zimg-devel libmysofa-devel \
                    alsa-devel libpulse-devel liba52-devel libass-devel libva-devel libvdpau-devel libvorbis-devel libfaac-devel libfaad-devel \
                    libbs2b-devel libdc1394-devel libraw1394-devel imlib2-devel libgsm-devel libtheora-devel libgpac-devel \
                    giflib-devel librsvg-devel libunistring-devel libamrnb-devel libamrwb-devel libopencore-amr-devel \
                    libxcb-devel xcb-util-devel libX11-devel libXfixes-devel libXext-devel libXau-devel libXdmcp-devel \
                    libXrandr-devel libXrender-devel libXt-devel glu-devel libdrm-devel openal-soft-devel \
                    libcaca-devel gluegen2-devel liblcms2-devel \
                    texinfo texi2html \
                    snappy-devel librubberband-devel shaderc-devel libshine-devel soxr-devel librtmp-devel srt-devel speex-devel \  # 必要な場合
                    yasm nasm        \  # 手動でインストールしない場合
                    vmaf-devel       \  # 手動でインストールしない場合
                    x264-devel       \  # 手動でインストールしない場合 
                    x265-devel       \  # 手動でインストールしない場合
                    libfdk-aac-devel \  # 手動でインストールしない場合
                    libvpx-devel     \  # 手動でインストールしない場合
                    libopus-devel    \  # 手動でインストールしない場合
                    dav1d-devel      \  # 手動でインストールしない場合
                    libaom-devel     \  # 手動でインストールしない場合
                    libmp3lame-devel    # 手動でインストールしない場合


tex2htmlライブラリをパッケージ管理システムからインストールする場合、膨大な依存関係のライブラリをインストールすることになるため、多くの時間が掛かる。
手動でtexi2htmlライブラリをインストールする方が、より短い時間でできる可能性がある。
詳細は、インストール - Git#依存関係のライブラリのインストールを参照すること。


NASMアセンブラのインストール (必要な場合のみ)

NASMアセンブラは、FFmpegの一部のビルドに必要なアセンブラである。
例えば、FFmpeg 5.0では、FFmpegのアセンブルに必要なNASMアセンブラは2.13以降であるため、
パッケージ管理システムのNASMアセンブラが2.12以前の場合は、手動でインストールする必要がある。

NASMアセンブラの公式Webサイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf nasm-<バージョン>.tar.xz
cd nasm-<バージョン>


NASMアセンブラをビルドおよびインストールする。

mkdir build && cd build

../configure --prefix=<NASMアセンブラのインストールディレクトリ>
make -j $(nproc)
make install


~/.profileファイル等に環境変数を追記する。

vi ~/.profile


export PATH="/<NASMアセンブラのインストールディレクトリ>/:$PATH"



YASMアセンブラのインストール (必要な場合のみ)

YASMは、2条項BSDライセンスのもと、NASMを全面的に書き直したものであり、複数の構文をネイティブに理解できるように設計されている。
YASMの主な目的は、低レベルでコードを扱うことができ、他のソフトウェアプロジェクトに容易に統合することができる再利用可能なライブラリであるlibyasmを作成することである。

YASMアセンブラの公式Webサイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf yasm-<バージョン>.tar.gz
cd yasm-<バージョン>


または、git cloneコマンドを使用して、ソースコードをダウンロードする。

git clone https://github.com/yasm/yasm.git
cd yasm


YASMアセンブラをビルドおよびインストールする。

mkdir build && cd build

cmake -DCMAKE_INSTALL_PREFIX=<YASMアセンブラのインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release -DENABLE_NLS=ON ..
make -j $(nproc)
make install


~/.profileファイル等に環境変数を追記する。

vi ~/.profile


export PATH="/<YASMアセンブラのインストールディレクトリ>/:$PATH"



VMAFライブラリのインストール

VMAFライブラリとは、ビデオ品質指標VMAFを算出するためのライブラリである。

VMAFライブラリのGithubにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf vmaf-<バージョン>.tar.xz
cd vmaf-<バージョン>


または、git cloneコマンドを実行して、ソースコードをダウンロードする。

git clone https://github.com/Netflix/vmaf.git
cd vmaf


VMAFライブラリをビルドおよびインストールする。

mkdir build && cd build

meson setup --prefix <FFmpegのインストールディレクトリ> -Denable_tests=false -Denable_docs=false --buildtype=release .. \
            --default-library=static  # スタティックライブラリを使用する場合
ninja -C .
ninja -C .install



H.264ビデオエンコーダのインストール

VideoLanのGitLabから、H.264ビデオエンコーダのソースコードをダウンロードする。

git clone https://code.videolan.org/videolan/x264.git -b stable
cd x264


H.264ビデオエンコーダをビルドおよびインストールする。

mkdir build && cd build

../configure --prefix=<FFmpegのインストールディレクトリ> --enable-shared --enable-static --enable-bashcompletion --enable-pic
make -j $(nproc)
make install



H.265/HEVC ビデオエンコーダのインストール

H.265/HEVC ビデオエンコーダの公式Webサイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf x265_<バージョン>.tar.gz
cd x265_<バージョン>


または、H.265/HEVCビデオエンコーダのBitBucketから、H.264/HEVC ビデオエンコーダのソースコードをダウンロードする。

git clone https://bitbucket.org/multicoreware/x265_git.git -b stable
cd x265_git


H.265/HEVC ビデオエンコーダをビルドおよびインストールする。

mkdir build_x265 && cd build_x265

cmake -DCMAKE_INSTALL_PREFIX=<FFmpegのインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release ../source/
make -j $(nproc)
make install

# または

cmake -G Ninja -DCMAKE_INSTALL_PREFIX=<FFmpegのインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release ../source/
ninja -C .
ninja -C .install



VP8/VP9 ビデオエンコーダ/デコーダのインストール

VP8/VP9 ビデオエンコーダ/デコーダの公式Webサイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf libvpx-<バージョン>.tar.gz
cd libvpx-<バージョン>


または、git cloneコマンドを実行して、ソースコードをダウンロードする。

git clone https://github.com/webmproject/libvpx.git
cd libvpx


VP8/VP9 ビデオエンコーダ/デコーダをビルドおよびインストールする。

mkdir build_vpx && cd build_vpx

../configure --prefix=<FFmpegのインストールディレクトリ> --enable-shared --enable-vp8 --enable-vp9 \
             --enable-webm-io --enable-libyuv
make -j $(nproc)
make install



AACオーディオエンコーダのインストール

AACオーディオエンコーダのsourceForgeまたはGithubにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf fdk-aac-<バージョン>.tar.gz
cd fdk-aac-<バージョン>


または、git cloneコマンドを実行して、ソースコードをダウンロードする。

git clone https://github.com/mstorsjo/fdk-aac.git
cd lifdk-aac


AACオーディオエンコーダをビルドおよびインストールする。

mkdir build && cd build

cmake -DCMAKE_INSTALL_PREFIX=<FFmpegのインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release ..
make -j $(nproc)
make install
# または
cmake -G Ninja -DCMAKE_INSTALL_PREFIX=<FFmpegのインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release ..
ninja -C .
ninja -C .install



Opus オーディオデコーダ / エンコーダ

Opus オーディオデコーダ / エンコーダの公式Webサイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf opus-<バージョン>.tar.gz
cd opus-<バージョン>


または、git cloneコマンドを実行して、ソースコードをダウンロードする。

git clone https://github.com/xiph/opus.git
cd opus


Opus オーディオデコーダ / エンコーダをビルドおよびインストールする。

mkdir build && cd build

cmake -DCMAKE_INSTALL_PREFIX=<FFmpegのインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_SHARED_LIBRARY=ON ..
make -j $(nproc)
make install
# または
cmake -G Ninja -DCMAKE_INSTALL_PREFIX=<FFmpegのインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_SHARED_LIBRARY=ON ..
ninja -C .
ninja -C .install



AV1 デコーダ (dav1d)のインストール

dav1dライブラリは、AOMが提供するライブラリよりもはるかに高速である。

AVX-512をサポートするためには、NASM 2.14以降が必要である。
もし、AVX-512を無効にする場合は、mesonコマンドのセットアップにおいて、-Denable_avx512=falseオプションを付加する。

VideoLanの公式Webサイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf dav1d-<バージョン>.tar.xz
cd dav1d-<バージョン>


または、git cloneコマンドを実行して、ソースコードをダウンロードする。

git clone https://code.videolan.org/videolan/dav1d.git
cd dav1d


AV1デコーダ(dav1d)をビルドおよびインストールする。

mkdir build && cd build

meson setup .. --prefix <FFmpegのインストールディレクトリ> -Denable_tests=false \
               --default-library=static  # スタティックライブラリを使用する場合
ninja -C .
ninja -C .install



AV1 ビデオエンコーダ/デコーダ (AOM)のインストール

AV1 ビデオエンコーダ/デコーダは、安定したAPIを持っていない可能性があるため、libavcodec / libaomenc.cのコンパイルに失敗する場合がある。
その時は、パッケージ管理システムからAV1 ビデオエンコーダ/デコーダをインストールすること。

AV1 ビデオエンコーダ/デコーダの公式Webサイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf aom-<タグ名>.tar.gz
cd aom-<タグ名>


または、git cloneコマンドを実行して、ソースコードをダウンロードする。

git clone https://aomedia.googlesource.com/aom
cd aom


AV1 ビデオエンコーダ/デコーダをビルドおよびインストールする。

mkdrir build_aom && cd build_aom

cmake -DCMAKE_INSTALL_PREFIX=<FFmpegのインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release -DENABLE_TESTS=OFF -DBUILD_SHARED_LIBS=1 -DENABLE_NASM=on ..
make -j $(nproc)
make install
# または
cmake -G Ninja -DCMAKE_INSTALL_PREFIX=<FFmpegのインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release -DENABLE_TESTS=OFF -DBUILD_SHARED_LIBS=1 -DENABLE_NASM=on ..
ninja -C .
ninja -C . install



AV1 ビデオエンコーダ/デコーダ (SVT-AV1)のインストール

AV1 ビデオエンコーダ/デコーダ (SVT-AV1)のGitLabにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf SVT-AV1-<バージョン>.tar.gz
cd SVT-AV1-<バージョン>


git cloneコマンドを実行して、AV1 ビデオエンコーダ/デコーダ (SVT-AV1)のソースコードをダウンロードする。

git clone --depth 1 https://gitlab.com/AOMediaCodec/SVT-AV1.git
cd SVT-AV1


AV1 ビデオエンコーダ/デコーダ (SVT-AV1)をビルドおよびインストールする。

mkdrir build && cd build

cmake -DCMAKE_INSTALL_PREFIX=<FFmpegのインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release -DENABLE_AVX512=ON .. \
      -DBUILD_DEC=OFF  # デコーダを無効にする場合
make -j $(nproc)
make install
# または
cmake -G Ninja -DCMAKE_INSTALL_PREFIX=<FFmpegのインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release -DENABLE_AVX512=ON .. \
      -DBUILD_DEC=OFF  # デコーダを無効にする場合
ninja -C .
ninja -C . install



AviSynth+のインストール

AviSynth+ライブラリは、AviSynthフレームサーバの改良版であり、機能と開発者の利便性を向上させたものである。

AviSynth+ライブラリのGithubにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf AviSynthPlus-<バージョン>.tar.gz
cd AviSynthPlus-<バージョン>


または、git cloneコマンドを実行して、ソースコードをダウンロードする。

https://github.com/AviSynth/AviSynthPlus.git
cd AviSynthPlus


AviSynth+ライブラリをビルドおよびインストールする。

mkdir build && cd build

cmake -DCMAKE_C_COMPILER=<GCC 8以降のgccファイルのパス> -DCMAKE_CXX_COMPILER=<GCC 8以降のg++ファイルのパス> \
      -DCMAKE_INSTALL_PREFIX=<FFmpegのインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release ..
make -j $(nproc)
make install



Lameのインストール

LameのSourceForgeにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf lame-<バージョン>.tar.gz
cd lame-<バージョン>


Lameをビルドおよびインストールする。

mkdrir build && cd build

../configure --prefix=<FFmpegのインストールディレクトリ> --enable-mp3x --enable-mp3rtp --with-vorbis --enable-nasm
make -j $(nproc)
make install



FFmpegのインストール

FFmpegの公式webサイトにアクセスして、ソースコードをダウンロードする。


ダウンロードしたファイルを解凍する。

tar xf ffmpeg-<バージョン>.tar.xz
cd ffmpeg-<バージョン>


または、git cloneコマンドを実行して、ソースコードをダウンロードする。

git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg


FFmpegをビルドおよびインストールする。

mkdir build && cd build

../configure --prefix=<FFmpegのインストールディレクトリ> \
             --enable-shared \  # FFmpegの設定オプション
             --enable-gray   \  # FFmpegの設定オプション
             # 以下は、外部ライブラリのサポート
             --enable-gpl \
             --enable-gnutls \
             --enable-libfontconfig --enable-libfreetype --enable-libfribidi \  # ドローテキストフィルタ向け
             --enable-libxml2 \
             --enable-libcdio --enable-libbluray --enable-libpulse \
             --enable-libtheora   \  # オープンなビデオ圧縮フォーマット
             --enable-libvidstab  \  # ビデオのデシェイクを行うライブラリ
             --enable-libwebp     \  
             --enable-libxvid     \  # MPEG-4/Xvid エンコーダ
             --enable-libzvbi --enable-libzmq --enable-libzimg \
             --enable-chromaprint \  # オーディオソースからフィンガープリントを抽出するライブラリ
             --enable-frei0r      \  # 動画フィルタのためのAPI
             --enable-opengl      \
             --enable-libdrm      \  # Direct-Renderingマネージャライブラリ
             --enable-libass      \  # ASS/SSA (Advanced Substation Alpha/Substation Alpha)サブタイトルフォーマット用のサブタイトルレンダラ (VSFilterと互換性がある)
             --enable-libmp3lame  \  # Lame
             --enable-libtwolame  \  # Mpeg2 最適化エンコーダ
             --enable-libx264     \  # H.264
             --enable-libx265     \  # H.265/HEVC
             --enable-libvpx      \  # VP8/VP9 ビデオエンコーダ/デコーダ
             --enable-nonfree     \
             --enable-libfdk-aac  \  # AACオーディオエンコーダ
             --enable-libopus     \  # Opus オーディオデコーダ / エンコーダ
             --enable-libdav1d    \  # AV1デコーダ(libaomよりも高速)
             --enable-libaom      \  # AV1 ビデオエンコーダ/デコーダ
             --enable-libsvtav1   \  # AV1 ビデオエンコーダ/デコーダ
             --enable-libvorbis   \  # オーディオ向けの汎用圧縮オーディオフォーマット
             --enable-libvmaf     \
             --enable-libcodec2   \  # 700~3200[bps]の通信品質の音声に対応した音声コーデック
             --enable-libmysofa   \  # AES69-2015規格に従って保存されたHRTFを含むAES SOFAファイルを読み込むためのライブラリ
             --enable-libdc1394   \  # 1394 BDCSに準拠したカメラを制御するための機能(カメラとの通信は、libraw1394が提供する低レベルの機能を利用)
             --enable-libbs2b     \  # Bauer Stereophonic-to-Binaural DSPは、ステレオ・オーディオレコードのヘッドホンリスニングを改善する
             --enable-libgsm      \
             --enable-libgme      \  # Game Music Emulatorは、ビデオゲーム音楽ファイルエミュレータ集
             --enable-libcaca     \
             --enable-lcms2  # 2.13以降が必要となる
make -j $(nproc)
make install


FFmpegの実行に必要なライブラリをインストールする。

sudo zypper install libmysofa1 libzmq5 libcodec2-1_0 gpac