MetaのFFmpeg活用 — 1日数百億回、大規模メディア処理の秘密
内部フォーク廃止、マルチレーン並列エンコード、リアルタイム品質メトリクス、自社ASIC
Meta Engineering Blogの記事に基づく、MetaのFFmpeg活用方法の整理。
1日数百億回
Metaはffmpeg(変換CLI)とffprobe(メタデータ照会)を1日数百億回実行する。1日10億件以上の動画アップロードを処理し、各動画をDASH再生用に複数の解像度・コーデック・画質でエンコードする。
内部フォークの問題
Metaは長年FFmpegの内部フォークを運用していた。当時アップストリームになかった機能が必要だったからだ:
スレッドベースのマルチレーンエンコード
リアルタイム品質メトリクス計算
だがフォークがアップストリームからどんどん乖離していった。新しいコーデック・フォーマットサポートはアップストリームにしか入らず、リベースのたびにリグレッションが発生した。ユーザーがアップロードする多様なフォーマットを中断なく処理するにはアップストリームの最新版が必要だった。
最終的にFFlabs、VideoLANと協力して内部フォークを完全廃止し、アップストリームのみに切り替えた。
マルチレーントランスコーディング
DASH再生のために1つの動画を複数の解像度・コーデック・フレームレート・画質でエンコードする必要がある。アプリのビデオプレーヤーがネットワーク状態に応じてリアルタイムでエンコーディングを切り替える。
最も単純な方法は各レーンを個別FFmpegプロセスで実行すること。だがこれではデコードをレーン数分繰り返し、プロセス起動オーバーヘッドもレーン数分発生する。
単一FFmpegコマンドでフレームを1回だけデコードし各エンコーダーに分配すれば、デコード重複が消えプロセスオーバーヘッドも1回に減る。1日10億件以上の規模ではプロセスあたりの節約が全体として大きな差を生む。
並列エンコードスレッディング
既存のFFmpegは複数エンコーダー使用時にフレームごとに直列実行していた。Meta内部フォークは全エンコーダーインスタンスを並列実行するよう修正した。
FFmpeg開発者(FFlabs、VideoLAN含む)の貢献でFFmpeg 6.0からより効率的なスレッディングが実装され始め、8.0で完成した。Meta内部フォークの設計に直接影響を受けており、数十年ぶりに最も複雑なFFmpegリファクタリングとして記録された。
この改善はMetaだけでなくすべてのFFmpegユーザーに恩恵を提供する。
リアルタイム品質メトリクス
PSNR、SSIM、VMAFのような品質メトリクスは圧縮による画質劣化を数値化する。既存FFmpegではエンコード完了後に別コマンドで計算していた。だがライブストリーミングではリアルタイム計算が必要だ。
Metaの解決策:各出力レーンのエンコーダーの後ろにデコーダーを挿入する。エンコードされたフレームを再デコードして原本と比較すれば、単一FFmpegコマンドで各レーンの品質メトリクスをリアルタイムに算出できる。
FFmpeg 7.0からFFlabsとVideoLAN開発者の貢献で「インループ(in-loop)」デコーディングが有効化され、この機能に関する内部フォーク依存が完全に解消された。
自社ASIC — MSVP
Metaはビデオトランスコーディング専用ASICのMSVP(Meta Scalable Video Processor)を自社設計した。FFmpegの標準ハードウェアAPI(NVIDIA NVDEC/NVENC、Intel QSV等と同一インターフェース)を通じてMSVPを統合した。
ソフトウェアパイプラインとハードウェアパイプラインが同一のFFmpeg CLIで動作するため、パイプライン間の一貫性が保たれる。
MSVPはMeta内部インフラでのみ使用され、外部開発者がハードウェアにアクセスできないため、このパッチは内部にのみ維持される。
アップストリーム貢献基準
Metaの基準は明確だ:
汎用的改善 → アップストリーム貢献(マルチレーンスレッディング、リアルタイム品質メトリクス)
Metaインフラ特化 → 内部パッチ維持(MSVPサポート)
25年以上開発されてきたFFmpegへの継続投資を通じて、Metaプラットフォームの新しい動画体験と安定性を同時に強化する方向だ。
動作フロー
Metaは1日数百億回ffmpeg/ffprobeを実行し、10億件以上の動画をDASH用にエンコード
単一コマンドで1回デコード→複数エンコーダー分配でデコード重複排除
FFmpeg 6.0〜8.0の並列スレッディングはMetaフォーク設計がベース
エンコーダー後にデコーダーを挿入しリアルタイム品質メトリクス(PSNR/SSIM/VMAF)算出
自社ASIC(MSVP)をFFmpeg標準ハードウェアAPIで統合
汎用改善はアップストリーム貢献、Meta特化パッチは内部維持