FFmpeg の OpenH264 ビルド自動化とバイナリ配布

Pocket

FFmpeg は動画や音声のエンコード・デコードに広く使用されているツールだが、特許ライセンスの問題から、商用利用時には注意が必要だ。

本記事では、 Cisco の OpenH264 を利用することでライセンス問題に対処し、さらに GitHub Actions による自動ビルドにて x64 Windows 向けの FFmpeg 8.0 を含む最新バージョンを、継続的に提供する取り組みについて紹介したい。

はじめに

FFmpeg のソースコード自体は GPL/LGPL でライセンスされており、自由に利用できる。

しかし、その実行に当たってコーデックアルゴリズムの特許ライセンスについては、 FFmpeg ではいかなる保証も行っていない。
つまり、利用者各々が特許ライセンスの問題を解決しなければならないのである。

これについては、 FFmpeg 公式サイト内の FFmpeg License and Legal Considerations でも触れられている。

この特許問題はエンコーダだけでなく、デコーダにも関係する。
例えば H.264 をソースに AV1 などのロイヤリティーフリーのコーデックへのエンコードにも影響し、実利用上避けがたい問題だ。

特に H.264 については、個人利用では特許リスクを考慮するほどではないと一般的に言われているが、商用利用については無視できないリスクがある。

そこで注目したいのが、 Cisco が提供する OpenH264 である。

Cisco OpenH264 の利点

Cisco OpenH264 を正しく使用することで、 Cisco がライセンス料を肩代わりしてくれる。

具体的には、利用者自らが Cisco から直接入手した OpenH264 のバイナリを動的リンクした場合に、このライセンス料の肩代わりが適用される。

詳細は About The Cisco-Provided Binary of OpenH264 Video Codec に記載されているので確認して欲しい。

AVC/H.264 のライセンスフィーには企業年間上限の設定があるが、 Cisco の事業規模を考えると、既にこの上限額を支払っているとされる 1
ネットワーク機器事業者である Cisco にとって、特許ライセンスの問題で H.264 の普及が妨げられるよりも、高圧縮なコーデックが広く使われる方が望ましい状況だと考えられる。

実際に、主要な Web ブラウザーである Firefox は、この仕組みを積極的に活用している。
起動時に OpenH264 の DLL を自動でダウンロードし、拡張機能として組み込むことで、 H.264 コーデックの再生に対応している。

自動ビルド

OpenH264 を動的リンクした FFmpeg を手元でコンパイルする方法については、様々な情報源で見かけることができる。

しかし、新しい FFmpeg のバージョンが出る度に自前でビルドするのは面倒だ。
コンパイル済みのビルドの配布についての情報は、ぱっと探してみた限りだと意外と見当たらない。

過去を探ると、 Crigges/Prebuilt-LGPL-2.1-FFmpeg-with-OpenH264 などで同様の目的のビルドが存在しているが、最近の FFmpeg のバージョンについての配布は見つかりにくい状況にある。

そこで、 FFmpeg のリポジトリを日々監視し、新しいバージョンが出たら GitHub Actions を使って自動ビルドしてリリースする仕組みを advanceboy/ffmpeg-for-openh264-auto-builds に構築してみた。

ビルド方法自体は、基本的に 開発メモ その315 FFMPEG で libopenh264 を Windows で使う を参考にしており、 msys2 上の mingw x86_64 にてビルドしている。

ただし、 h.264 だけでは使い勝手が限られるため、以下のロイヤリティーフリー 2 と言われているコーデックにも対応を追加している:

  • AV1
  • VP9
  • Opus
  • Ogg Vorbis

使用方法

  1. Releases · advanceboy/ffmpeg-for-openh264-auto-builds から希望する ffmpeg のバージョンを選択し、 Windows 64 ビット向けの ffmpeg-*-openh264-*-mingw-w64-x86_64.zip をダウンロード
  2. (1) のリリースページに記載されているバージョンの OpenH264 のビルド済み DLL を、 Cisco の Releases · cisco/openh264 からダウンロード
  3. ダウンロードした DLL を展開し、 libopenh264.dll とリネームして ffmpeg.exe と同じフォルダに配置

もし ffmpeg.exeffprobe.exe の実行時に以下のようなエラーが出た場合、 上記の (2), (3) の作業が適切でないので、見直してみよう。

libopenh264.dll が見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。

[OK]

現状の課題

普通に利用する上では問題ないのだが、現時点で以下の課題が残されている。

これらの解決策について知見をお持ちの方は、ぜひプルリクエストをお願いしたい:

  1. OpenH264 だけをダイナミックリンクし、その他のライブラリをスタティックリンクできれば DLL 構成がすっきりするのだが、現状 AV1 などの外部ライブラリも DLL になってしまっている。
    • これをビルドオプションで実現できる手段がわからなかった。
  2. Release 作成前に libopenh264.dll 入手して起動テストする際、 DLL のハッシュチェックを http で行っているため、改ざんリスクの検証として不十分である。
    • ドメインハイジャック等による偽データへの差し替え攻撃への対策には、 DLL のデジタル署名の検証を行うのが望ましいのだろうとは考えているが、現時点では未実装。

おわりに

本記事では、 FFmpeg のコーデック特許ライセンスの問題に対して、 Cisco OpenH264 を活用した解決策と、その自動ビルドによる継続的な提供の仕組みについて解説した。

この仕組みにより、最新の FFmpeg を商用利用可能な形で容易に入手できるようになった。
是非皆さんにも、特許に関する懸念から解放されて、安心して商用・個人活動に取り組んでいただきたい。


  1. https://xiphmont.dreamwidth.org/tag/h.264 

  2. あくまで配布元がそう主張しているだけで、全くリスクが無いわけではない。実際いくつかのコーデックでは特許を主張しライセンス料を取らんとする動きも無くはない。多くはパテントトロールだろうが。 

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください