FFmpeg はまさにメディア処理用のマルチツールです. 業界標準ツールとして, 幅広いオーディオおよびビデオのコーデックとコンテナ形式をサポートします. メディアの編集と操作のために複雑なフィルター チェーンを調整することもできます。. 当社アプリのユーザー向け, FFmpeg は、新しいビデオ体験を実現し、既存のものの信頼性を向上させる上で重要な役割を果たします。.
メタが動いてる ffmpeg (メインの CLI アプリケーション) そして ffプローブ (メディア ファイルのプロパティを取得するユーティリティ) バイナリ ファイルが 1 日に何百億回も送信される, これにより、メディア ファイルを処理する際に特有の課題が生じます。. FFmpeg は個々のファイルのトランスコーディングと編集を簡単に処理できます, しかし、私たちのワークフローでは、ニーズを満たすために追加の要件が課されます. 長年にわたり、私たちは自分たちのものに頼らなければなりませんでした, 最近 FFmpeg に追加された機能を提供するために内部で開発された FFmpeg のブランチ, のような: B. スレッド化されたマルチレーンエンコーディングとリアルタイムの品質メトリック計算.
時間とともに, 私たちの内部フォークは、FFmpeg のアップストリーム バージョンから大幅に分岐しました。. 同時に, FFmpeg の新しいバージョンでは、新しいコーデックとファイル形式がサポートされ、信頼性も向上しました。, ユーザーからより多様なビデオ コンテンツを中断することなくキャプチャできるようになります。. このため、内部フォークに加えて、FFmpeg の現在のオープンソース バージョンの両方をサポートする必要がありました。. これにより、機能セットが徐々に分岐することになっただけでなく、, しかし、リグレッションを回避するために内部の変更を安全にリベースするという課題もあります.
内部フォークがどんどん時代遅れになってきたため、, 私たちは FFmpeg 開発者と協力しました, FFラボ, VideoLAN と FFmpeg の機能を開発することで、内部フォークを完全に排除し、ユースケースでアップストリーム バージョンのみに依存できるようになりました。. アップストリームのパッチとリファクタリングの使用, 以前は内部フォークで対処する必要があった 2 つの重要なギャップを埋めることができました。: ねじ切りされた, マルチトラックトランスコーディング, リアルタイムの品質指標.
VOD およびライブ ストリーミング向けのより効率的なマルチトラック トランスコーディングの構築
![写真[1]-メタの FFmpeg: Windows 7、8、10、11 向けの大規模なメディア処理 - Winpcsoft.com](https://winpcsoft.com/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
ユーザーが当社のアプリのいずれかを介してビデオをアップロードするとき, HTTP 経由のダイナミック アダプティブ ストリーミングをサポートするエンコーディングのセットを生成します。 (ダッシュ) 再生. DASH 再生により、アプリのビデオ プレーヤーはネットワーク状況などの信号に基づいてエンコードを動的に選択できます。. これらのエンコーディングは解像度が異なる場合があります, コーデック, フレームレートとビジュアル品質レベル, ただし、それらは同じソース エンコーディングから作成されており、プレーヤーはリアルタイムでシームレスに切り替えることができます。.
非常にシンプルなシステムで, 個別の FFmpeg コマンド ラインにより、各トラックのエンコーディングを一度に 1 つずつ生成できます。. これは、各命令を並行して実行することで最適化できます。, しかし、各プロセスで重複した作業が実行されるため、これはすぐに非効率になります。.
これを回避するには, 単一の FFmpeg コマンド ライン内で複数の出力を生成できます。, ビデオのフレームは一度デコードされ、各出力のエンコーダー インスタンスに送信されます。. これにより、ビデオ デコード重複排除のオーバーヘッドと各コマンド ラインに起因するプロセスの起動時間を大幅に削減できます。. 処理が終わったことを考えると、 1 毎日 10 億件の動画がアップロードされる, それぞれ複数の FFmpeg の実行が必要です, プロセスごとのコンピューティング使用量が削減され、大幅な効率化が実現します。.
内部 FFmpeg フォークにより追加の最適化が実現されました: 並列ビデオエンコーディング. 個々のビデオ エンコーダは内部的にマルチスレッドを備えていることがよくありますが、, FFmpeg の以前のバージョンでは、複数のエンコーダが使用されている場合、特定のフレームに対して各エンコーダがシリアルに実行されました。. すべてのエンコーダ インスタンスを並行して動作させることにより、, 全体的により優れた並列処理を実現できます.
FFmpeg 開発者の貢献に感謝します, FFlabs と VideoLAN を含む, FFmpeg 以降、より効率的なスレッドが実装されました。 6.0, 最後の仕上げで着陸します 8.0. これは内部フォークの設計に直接影響を受けており、私たちが信頼していた重要な機能の 1 つでした。. この開発がこれにつながりました ここ数十年で最も複雑な FFmpeg のリファクタリング すべての FFmpeg ユーザーに対してより効率的なエンコードが可能になりました.
内部フォークから完全に移行するには, 別の事前実装された機能が必要でした: リアルタイムの品質指標.
ライブ ストリームのトランスコーディング時にリアルタイムの品質メトリクスを有効にします
![写真[2]-メタの FFmpeg: Windows 7、8、10、11 向けの大規模なメディア処理 - Winpcsoft.com](https://winpcsoft.com/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
ビジュアル品質の指標, メディアの知覚された視覚的品質を数値的に表現します。, 圧縮による品質の低下を定量化するために使用できます。. これらの指標は、参照指標または非参照指標に分類されます。, 前者は、 参照 別のコードにコーディングする 歪 コーディング.
FFmpeg は、PSNR などのさまざまなビジュアル品質メトリクスを計算できます, エンコードが完了した後、別のコマンド ラインで 2 つの既存のエンコードを使用する SSIM と VMAF. これは、オフラインまたは VOD の使用例に適しています。, ただし、リアルタイムで品質指標を計算する必要があるライブ ストリーミングではありません。.
これを行うには、各出力トラックで使用される各ビデオ エンコーダの後にビデオ デコーダを挿入する必要があります。. これらはビデオの各フレームにビットマップを提供します 後 フレームを比較できるように圧縮が適用されています 前に 圧縮. 最後に, 単一の FFmpeg コマンド ラインを使用して、エンコードされたトラックごとに品質メトリクスをリアルタイムで作成できます。.
FFmpeg 開発者によって実現された「インループ」デコードのおかげで, FFlabs と VideoLAN を含む, FFmpegから始まる 7.0, この機能については、内部の FFmpeg フォークに依存する必要がなくなりました。.
コミュニティに大きな影響を与える場合にはアップストリームします
トランスコーディング時のリアルタイム品質メトリクスやより効率的なスレッド処理などにより、Meta 内外のさまざまな FFmpeg ベースのパイプラインの効率が向上します。, そして私たちは、FFmpeg コミュニティと業界全体を支援するために、これらの開発を上流で実現できるようにすることに尽力しています。. しかし, 内部で開発したパッチがいくつかありますが、アップストリームに貢献するのは意味がありません。. これらは当社のインフラストラクチャに非常に固有のものであり、一般化することはできません。.
FFmpeg はハードウェア アクセラレーション デコーディングをサポートします, NVIDIA の NVDEC や NVENC などのデバイスを使用したエンコードとフィルタリング, AMD の統合ビデオ デコーダー (UVD), およびインテルのクイック同期ビデオ (QSV). 各デバイスは、FFmpeg の標準 API の実装によってサポートされています。, 統合が容易になり、デバイス固有のコマンド ライン フラグの必要性が最小限に抑えられます。. のサポートを追加しました メタスケーラブルビデオプロセッサ (MSVP)ビデオトランスコーディング用のカスタム ASIC, 同じ API を介して、プラットフォーム固有の特殊性を最小限に抑えながら、異なるハードウェア プラットフォーム上で共通のツールを使用できるようにします。.
MSVP は Meta 自身のインフラストラクチャ内でのみ使用されるため, FFmpeg 開発者にとって、テストと検証のためにハードウェアにアクセスせずにこれをサポートすることは困難です。. この場合, このようなパッチを内部に保持しておくのは理にかなっています, 対外的には何の役にも立たないから. 私たちは責任を持って、時間をかけて内部パッチを新しい FFmpeg バージョンにリベースしてきました。, アップグレード中の堅牢性と正確性を確保するために広範な検証を実行する.
FFmpeg に対する当社の継続的な取り組み
より効率的なマルチレーンエンコーディングとリアルタイムの品質メトリクスのおかげで, すべての VOD およびライブ ストリーミング パイプラインの内部 FFmpeg フォークを完全に排除することができました。. FFmpeg の標準化されたハードウェア API のおかげで, ソフトウェアベースのパイプラインと並行して MSVP ASIC を最小限の摩擦でサポートすることができました。.
FFmpeg は時の試練に耐えてきました 25 長年にわたる活発な開発. リソース利用率を向上させる開発, 新しいコーデックと機能のサポートを追加する, 信頼性の向上により、より幅広いメディアに対する堅牢なサポートが可能になります. 私たちのプラットフォームを利用している人々にとって, これは、新しいエクスペリエンスを可能にし、既存のものの信頼性を向上させることを意味します. 私たちはオープンソース開発者と協力して FFmpeg への投資を継続する予定です, メタに利益をもたらす, 業界全体, そして当社の製品を使用する人々.
謝辞
オープンソース コミュニティの貢献に感謝いたします。, FFlabs と VideoLAN のパートナー, そして多くのメタエンジニア, マックス・ビコフを含む, ジョルディ・チェンツァーノ・フェレット, ティム・ハリス, コリーン・ヘンリー, マーク・シュワルツマン, 海夏市, コズミン・ステジェリアン, ハッセン・トマール, そしてビクター・ロー.
