ニュース

GPUでビデオをエンコード・デコード ~Linuxで普及の「VA-API」がWindowsで利用可能に

Windows 10 November 2019 Update/Windows 11以降で

公式ブログ「DirectX Developer Blog」

 米Microsoftは2月15日(現地時間)、ビデオ関連の演算をGPUでハードウェア処理するためのAPI「Video Acceleration API」(VA-API)がWindowsで利用できるようになったと発表した。

 「VA-API」はもともとIntelによって開発されたオープンソースのライブラリ(libva)およびAPI仕様で、ハードウェアの違いを吸収し、デコードやエンコードなどを統一的に行えるようにしたもの。GPUを活用することで高いパフォーマンスを実現しながら、CPUの負担を下げて電力を節約できる。現在はIntel以外にも無料で開放されており、「VLC」や「FFmpeg」、「GStreamer」などでもサポートされている。

 「VA-API」はこれまで主にLinux環境で使用されており、Windowsでも「D3D12 Video API」で実装された「VA-API」ドライバーを利用すれば「Windows Subsystem for Linux」(WSL)の「VA-API」を介したビデオハードウェアアクセラレーションは可能となっている。しかし、「WSL」を介することのパフォーマンスペナルティや環境構築の難しさが懸念されていた。そこで以下の改善が実施され、「VA-API」関連の技術スタックがWindows環境で直接サポートされることになった。

  • 「libva 2.17」以降で「libva-win32」ノードを新たに追加。Windows環境でも任意のGPUアダプターから「VA-API」アクセラレーションが可能に
  • 「Mesa 22.3」以降で「WSL」と同じ「VA-API」ドライバーをWindows向けにコンパイルできるように(VAOn12)。これは「D3D12 Video API」上に実装され、ハードウェアベンダーの違いを超えた「VA-API」アクセラレーションを提供する

 これにより、「VA-API」を利用するアプリの移植や運用が容易になることが期待される。

 「libva-win32」と「VAOn12」ドライバーを入手するには、「Microsoft.Direct3D.VideoAccelerationCompatibilityPack」という「NuGet」パッケージを導入し、指定された環境変数をセットすればよい。コードサンプルも「GitHub」で公開されている。

 なお、ビデオのデコードには「Windows 10 November 2019 Update」以降および「Windows 11」が必要。エンコードには追加で「DirectX 12 Agility SDK 1.608.2」以降が必要となる。「VAOn12」ドライバー自体に追加の要件はない。「D3D12 Video API」がるようでる環境であれば、問題なく動作するという。