世界を動かす技術を、日本語で。

MetaにおけるFFmpeg:大規模メディア処理

概要

  • FFmpeg はMetaのメディア処理基盤の中核ツール
  • 内部フォークから公式FFmpegへの完全移行を実現
  • マルチレーンエンコーディングとリアルタイム品質指標の公式実装
  • ハードウェアAPIによる自社ASIC(MSVP)サポート
  • 今後もFFmpegへの貢献とコミュニティ協力を継続

FFmpegの役割とMetaでの活用

  • FFmpeg は多様な コーデック・コンテナ フォーマット対応の業界標準ツール
  • ffmpeg (CLIアプリ)と ffprobe (メディア情報取得)を日々数百億回実行
  • 動画編集・変換だけでなく、 複雑なフィルタチェーン による高度なメディア操作
  • 新しい動画体験の創出と既存サービスの 信頼性向上 に寄与

内部フォークの課題と公式FFmpegへの移行

  • 独自フォーク で先行実装していた機能(マルチレーンエンコーディング、リアルタイム品質指標)
  • 公式FFmpegの進化により、 機能・互換性の乖離 が拡大
  • 二重管理 による保守負荷増大とリグレッションリスク
  • FFlabs、VideoLANとの協業で 必要機能を公式FFmpegへ実装
  • 公式バージョン一本化による 保守性向上と最新機能活用

マルチレーン・トランスコーディングの効率化

  • 動画アップロード時、 DASH 対応の複数エンコーディング生成
  • 各解像度・コーデック・品質のストリームを 単一FFmpegコマンドで同時生成
    • デコード処理の重複排除、プロセス起動のオーバーヘッド削減
  • 内部フォーク では動画エンコーダーの 並列実行 を実現
  • FFmpeg 6.0以降で マルチスレッド最適化 が公式実装
  • 1日10億件超の動画処理における 計算資源効率化

リアルタイム品質指標の実現

  • PSNR, SSIM, VMAF などの品質指標を リアルタイム算出
    • オンデマンド用途ではエンコード後に別コマンドで計算可能
    • ライブ配信では エンコード直後に即時算出 が必要
  • 各出力レーンに デコーダーを挿入 し、圧縮前後フレームを比較
  • FFmpeg 7.0以降の インループデコード 実装により内部フォーク不要化

メタ独自パッチとハードウェアサポート

  • 一部 Meta独自機能 はインフラ固有のため公式パッチ化せず
  • NVIDIA, AMD, Intel 等のハードウェアAPI対応
  • Meta Scalable Video Processor (MSVP) も同APIでサポート
    • 社内専用ASICのため、公式FFmpegには非公開
  • 内部パッチの 継続的リベースと検証 による品質担保

今後の展望とコミュニティ貢献

  • マルチレーンエンコーディングリアルタイム品質指標 で内部フォークを完全廃止
  • ハードウェアAPI活用で MSVPとソフトウェアパイプラインの統合運用
  • 25年以上進化を続けるFFmpeg の信頼性・機能拡張への貢献継続
  • オープンソース開発者との連携による 業界全体への波及効果
  • 今後も Meta・業界・ユーザー に価値ある新機能開発に注力

謝辞

  • オープンソースコミュニティFFlabsVideoLAN の協力に感謝
  • Metaエンジニア(Max Bykov、Jordi Cenzano Ferret、Tim Harris、Colleen Henry、Mark Shwartzman、Haixia Shi、Cosmin Stejerean、Hassene Tmar、Victor Loh)への謝意

Hackerたちの意見

ドイツの国営テックファンドが、FFmpegにメタ経由で多額の寄付をしたらしいよ。

「[Meta]の投稿で言及されている資金はありがたいけど、プロジェクトを維持するには足りない」 https://x.com/FFmpeg/status/2029053011314786701

メタがFFmpegにどれくらい寄付したか知ってる?ちょっと調べたら、ドイツのSTFが2024/2025年に€157,580.00寄付したみたい。

何このジョーク… メタが何十億も稼いで、自分たちのものを作らずに数百万を節約してるのに、国の基金以上の寄付ができないなんて。

ドイツの主権技術ファンドが15万ドル以上寄付したんだって。METAエンジニアの1年分の時間っていくらかな?30万ドル?それ以上?もし彼らが1年分のエンジニアリング時間を使ったら、Metaはドイツの主権技術ファンドの2倍以上を提供したことになるね。おそらく、メディアエンコーディングやアップストリーミングパッチに取り組んでいるチームがいて、ジュニアやミッドレベルのソフトウェアエンジニア以上の人たちも含まれていると思うから、彼らが仕事で少なくとも年間100万ドルを提供しているとは驚かないよ。

これって、コストコで試食だけで満腹になったって言ってるようなもんじゃない?メタは今、何十億も稼いでるんだから、頼ってるFOSSプロジェクトにちゃんと資金を提供するべきだよ。無駄なデータセンターの開発にお金をばらまくんじゃなくて。そうしないと、またXZの失敗みたいなことになるのが目に見えてる。疲れた無給のFOSSメンテナが、無作為なJia Tanを信じちゃうんだから。

メタがあるからこそPHPがまだ生き残ってるんだよね。それに、MVC地獄に陥らずに済んでる大きな理由でもある。彼らはオープンソースに賭けて、たくさんの技術をオープンソースにしてる。オープンソースに関しては、最高の企業の一つだと思う。彼らがどれだけ寄付してるかは知らないけど、プロジェクトに対してたくさんの助成金を出してるのは見たことあるよ。

「これって、コストコで試食だけで満腹になったって言ってるようなもんじゃない?」この例えは失敗だね。無料サンプルはコストコ(または他の業者)にお金がかかるから。メタがFFmpegを使ってることで叩くのは、Linuxを使ってる全てのテック企業を叩くのと同じくらい意味がないよ。もしかして君もそうするのかもしれないけど、よくわからないな。

この投稿は、彼らが改善を上流に上げたことについてのものだよ!企業がオープンソースをうまく活用して、プロジェクトの改善に貢献することに腹を立てるなら、オープンソースの本質を理解してないってことだよ。ただのピッチフォークを探してるだけなんじゃない?

彼らは自分たちの修正を上流に提供したからね。それが一番重要なことだと思う。

「私たちの内部フォークがどんどん古くなっていく中で、FFmpegの開発者やFFlabs、VideoLANと協力して、内部フォークを完全に廃止し、私たちのユースケースに対して上流版に完全に依存できる機能をFFmpegに開発しました。一部のコメントは、彼らが還元している事実を見落としているようですが、彼らだけがこの恩恵を受けているわけではありません。もっと寄付できる?もちろん、でもこれこそオープンソースの利点の一つで、誰もが上流に上げられた変更や、ある団体からの財政的支援を受けて恩恵を受けるんです。」

大手テック企業がオープンソースプロジェクトなしでは存在しないってことを、ちょっと思い出してほしいな。

そうだね、彼らはオープンソースに貢献したのは良いことだ。でも個人的には、そのブログ記事のトーンに問題があると思った。特にこの冒頭のフレーミングが気になった:>「長年、自社で開発したFFmpegのフォークに頼らざるを得なかったが、最近ようやくFFmpegに追加された機能を提供できるようになった」最初からそれらの機能を上流に反映できなかったのかな?上流と統合せずに、今になってこれをポジティブに捉えようとしてるのが不自然に感じる。もっと良い方法があったはずなのに(例えば「早く上流に、頻繁に上流に」っていうマントラ)。この試みは「メタ、業界全体、そして私たちの製品を使う人々に利益をもたらす」って言ってるけど、ちょっとズレてる気がする。この投稿を読んでるのはエンジニアたちだから、マーケティングのフワフワした話が技術的なブログに入ってくるのは好きじゃないな。特に良いこととそうでないことが混ざった話に口紅を塗ろうとしてる時はね。だから、そう、彼らがOSSに貢献したのは良いことだけど、そのコミュニケーションの仕方は違ったかもしれないね。

メタに対して文句を言えないことの一つは、彼らがコミュニティ全体に貢献しているってことだよね。React Nativeを使ってるんだから、こんにちは!? Reactも使ってるし!たくさんのプロジェクトがあって、正直彼らがこんなに多くを提供してくれてることに感謝しないと。

これはポジティブな進展だけど、それを引き起こした条件を軽視したり無視したりするわけにはいかないよね。返すことは、私的利益のために変化を保持することよりも少なかったんだから。それでも、Metaはオープンソースにもたくさんのものを提供しているし、差別化の観点から見ても、見逃されてはいないと思う。

「私たちの内部フォークがどんどん古くなっていく中で」うわ、それめっちゃ共感できる。あと、FFmpeg 8がついにHDRの色マッピングを完璧に扱えるようになったよ、最後にGentooで再コンパイルしたときにね :)

これめっちゃいいね!前はメタデータを自動でコピーするのにすごく苦労したから、嬉しいわ。

いいね!しばらくこの業界から離れてたけど、聞けて嬉しいよ。

同時に、新しいバージョンのFFmpegは新しいコーデックやファイルフォーマットのサポート、信頼性の向上をもたらしました。これにより、ユーザーからの多様な動画コンテンツを中断なく取り込むことができるようになりました。内部の改善を上流に反映させるために努力したのは良いことですが、他の言及されていないテックジャイアンツよりは確実に良い行動です。彼らが毎日数十億回もこれを運用しているとしたら、ずっとこの改善をサポートしていたのか気になりますね。そうでないなら、なんで?

全てのエンコーダーインスタンスを並行して動かすことで、全体的により良い並列処理が得られるんだよね。これはライブストリーミングの使い方にはすごく合ってるし、動画を複数のフォーマットにトランスコードする場合にも意味があると思う。でも、ffmpegで時間軸の並列化が見てみたいな。要するに、入力動画をキーフレームのチャンクに素早く分割して、各キーフレームを並行してエンコードするってこと。これなら、たとえ単一の出力を生成するだけでも素晴らしい並列化ができるし、ほとんどのイントラフレーム並列化がするように動画品質を下げることもないんだ。

エンコーダーはP/Bフレームのエンコードの一環として、インターフレーム分析(動きとか)を行うんだけど、この作業を一度だけやって、全てのエンコードで再利用できないかな。

ffmpegのマシンにとっては、幸いにも全て軽量なコンテンツなんだ。もっと重いものだとオーバーロードしちゃうよね。

1日に数十億回の実行ってすごいよね。自動動画アセンブリのためにffmpegを何千回も実行してるけど、それでもその規模だとプロセスの起動オーバーヘッドが目立つんだ。単一デコードのマルチ出力トリックだけで、切り替えた時に約40%の壁時間を節約できたよ。これが100億回に掛け算されたら、どんな節約になるのか想像もつかない。

ファブリス・ベラールが引退する時、快適に引退できることを願ってる。彼のソフトウェアの創作によって、すごくお金が生まれてるからね。

Meta/Facebookチームには、ffmpegffprobeに時間やエネルギー、改善をしてくれて感謝してるよ。プロジェクトに資金提供を考えてくれるといいな。そうすれば、ffmpegはコードの品質やドキュメント、使いやすさ、コミュニティイベントやハッカソンなんかに投資できるから。