一般技術

ライセンス問題を解消してH.264動画をデコード【OpenCV/FFmpeg】

2023年3月29日

はじめに

現在、H.264 の動画コーデックが広く利用されています。
YouTubeをはじめ、多くの動画は H.264 で符号化されて配信・保存されています。

 

H.264 を利用するサービス提供やソフトウェアの再配布をする場合、ライセンス問題が発生します
この記事では、どの様なライセンス問題があり、どのように回避するのかを説明します。

 

2つのライセンス問題

MPEG-LAライセンス

先ずは、特許に関するライセンスです。
Wikipedia では、以下のように記載されています。

H.264には多数の特許権が含まれており、本規格を採用したハードウェアやソフトウェア製品を製造する企業は、特許使用料であるパテント料の支払いが求められる。これらのライセンスに関する管理は、パテントプールであるMPEG-LAコンソーシアムが特許権者からの委託を受けて業務を代行している。

SANACHAN
SANACHAN
記載の通り、H.264 の規格を扱うだけで、特許使用料を支払う必要があります

 

GPLv2/GPLv3ライセンス

H.264 を扱える OSS のライセンスに注意が必要となります。

H.264 のデコード、エンコードを行ったり、動画や静止画を扱える便利な OSS として、
OpenCV が広く利用されていますが、バックエンドに FFmpeg を利用しています。

 

FFmpeg(標準構成)のライセンスは GPL となり、FFmpeg/OpenCV をリンクするだけで、
全ソースコードの開示義務が発生します。

SANACHAN
SANACHAN
GPLの「コピーレフト」の考え方で、リンクするとライセンスが伝搬します。

 

回避する方法

2つのライセンス問題を解消するために、OpenH264 を利用します。

注意

OpenH264 を利用する場合は注意点があります。最後までお読みください。

 

MPEG-LAライセンス

OpenH264 の公式ページに、以下の記載があります。

We will not pass on our MPEG-LA licensing costs for this module, and based on the current licensing environment, this will effectively make H.264 free for use on supported platforms.

また、FAQで以下の記載があります。

the team can use the binary module distributed by Cisco, in which case Cisco will cover the MPEG LA licensing fees.

纏めると、

Ciscoが提供するバイナリを使用する場合、MPEG-LAライセンスの支払いは不要

ということです。

SANACHAN
SANACHAN
バイナリ」というのがミソで、ソースコードからビルドしたものはNGです。

 

GPLv2/GPLv3ライセンス

OpenH264 の公式ページに、以下の記載があります。

Cisco has taken their H.264 implementation, and open sourced it under BSD license terms.

OpenH264 自体は BSD ライセンスのため、GPLライセンス問題を回避可能です。

つまり、OpenH264 を FFmpeg のプラグインとして H.264 のデコードに使用すれば、
MPEG-LAライセンス問題と合わせて解決することができます

メモ

FFmpeg は、H.264 のデコードに x264 というライブラリを使用しており、
このライブラリが GPL のため、伝搬して FFmpeg も GPL ライセンスになっています。

 

OpenCV/FFmpeg/OpenH264のビルド方法

apt などのパッケージ管理ツールで OpenCV/FFmpeg をインストールすると、
先のライセンス問題が発生します。

そのため、ここからは OpenCV / FFmpeg / OpenH264 のカスタムビルド方法について記載します。
Ubuntu 20.04 LTS の環境で動作確認済みの方法となります。

 

必要となる追加パッケージ

 command
$ sudo apt install \
cmake \
make \
git \
g++ \
pkg-config \
nasm \
yasm

 

OpenH264

 command
$ git clone -b v1.7.0 --depth 1 --single-branch https://github.com/cisco/openh264.git
$ cd openh264
$ make -j nproc
$ sudo make install-shared
$ sudo ldconfig

必要なヘッダー類をインストールしたら、Cisco が提供しているバイナリで上書きします。

 command
$ curl -o ./libopenh264-1.7.0-linux64.4.so.bz2 -L https://github.com/cisco/openh264/releases/download/v1.7.0/libopenh264-1.7.0-linux64.4.so.bz2
$ bunzip2 libopenh264-1.7.0-linux64.4.so.bz2
$ sudo cp libopenh264-1.7.0-linux64.4.so /usr/local/lib/libopenh264.so.1.7.0

 

FFmpeg

 command
$ git clone -b n4.2.7 --depth 1 --single-branch https://git.ffmpeg.org/ffmpeg.git
$ cd ffmpeg
$ ./configure \
--disable-gpl \
--enable-libopenh264 \
--enable-pic \
--enable-shared
$ make -j nproc
$ sudo make install
$ sudo ldconfig
SANACHAN
SANACHAN
Ubuntu 20.04 に apt で入れる場合と同じバージョンです。

 

OpenCV

 command
$ git clone -b 4.2.0 --depth 1 --single-branch https://github.com/Itseez/opencv.git
$ git clone -b 4.2.0 --depth 1 --single-branch https://github.com/Itseez/opencv_contrib.git
$ cd opencv
$ mkdir build && cd build
$ cmake \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D BUILD_JAVA=OFF \
-D BUILD_SHARED_LIBS=ON \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_GENERATE_PKGCONFIG=YES \
-D WITH_FFMPEG=ON \
..
SANACHAN
SANACHAN
Ubuntu 20.04 に apt で入れる場合と同じバージョンです。

 

おわりに

いかがでしたでしょうか。

ライセンスの解釈は、各会社や会社の法務部によって判断が異なりますので、
商用で利用される際は、一度相談してみるとよいかと思います。

SANACHAN
SANACHAN
本記事の方法で再配布を行う場合、自己責任でお願いします。

 

おまけ:ビルドスクリプト

SANACHAN
SANACHAN
OpenCVは、H.264を静止画へデコードする最小構成にしています。

 

参考

 

こちらの記事もよく読まれています

  • この記事を書いた人
  • 最新記事
SANACHAN

SANACHAN

「生涯一エンジニア」を掲げ、大手グローバル企業でSE/PGとして8年勤め、キャリアアップ転職した現役のエンジニアです。世にあるメジャーな全プログラム言語(コボル除く)を自由に扱えます。一児の父。自分のため、家族のため、日々勉強してます。システムエンジニア、プログラミングに関する情報を蓄積している雑記帳です。

-一般技術
-, , ,