H.264のハードウェアトランスコードはできるのに、AV1ではできない場合に確認すべきことは?

エヴァ・ウォンテクニカルライター であり ZimaSpaceの常駐ティンカーでもあります。 生涯のオタクであり、 ホームラボとオープンソースソフトウェアに情熱を持っています。彼女は複雑な技術的概念をわかりやすく、 実践的なガイドに翻訳することを専門としています。エヴァはセルフホスティングは楽しくあるべきで、怖がるものではないと信じています。彼女のチュートリアルを通じて、コミュニティが ハードウェアのセットアップを解明する手助けをしています。初めてのNAS構築からDockerコンテナの習得まで。

H.264で成功することは、H.264でGPU経路が機能していることを示しますが、同じハードウェアがAV1のデコード、エンコード、プロファイル、またはビット深度をサポートしていることを証明するものではありません。

ハードウェアトランスコードは、コーデック固有の処理が連続する一連の工程です。ソースをデコードし、スケーリングやトーンマッピングを適用し、クライアント向けに選択された出力形式へエンコードします。旧世代および中期世代のGPUでは、H.264はアクセラレーションできても、AV1はソフトウェアデコードのみ、AV1ハードウェアデコードはできてもAV1エンコードはできない、またはどちらもサポートしない場合があります。グローバルなアクセラレーション設定を変更する前に、まずAV1のどの段階で失敗しているかを特定してください。

AV1のデコードとエンコードのどちらが失敗しているか確認する

実行中のFFmpegコマンドとトランスコードの理由を確認します。入力コーデック、ハードウェアデコーダー、フィルターパス、出力コーデック、ハードウェアエンコーダー、最初に表示されるエラー行を記録してください。

サーバーがAV1をデコードしてH.264へエンコードできる場合もあれば、H.264をデコードしてAV1へのエンコードを試みる場合もあります。これらは異なる機能です。Jellyfinのハードウェアに関する議論では、他のハードウェア経路が利用できる一方で、AV1 QSVおよびVA-API経路が、インストールされたGPUではサポートされていなかったシステムが紹介されています。

メディアサーバーに両方の選択肢がある場合に限り、AV1入力からH.264出力へのテストと、H.264入力からAV1出力へのテストを1回ずつ実行します。前者は成功し、後者が失敗する場合、AV1デコードは利用できますが、AV1エンコードは利用できません。

コーデックの方向とプロファイル別にハードウェア機能を確認する

実際のGPU世代とデバイスIDを調べ、デコードとエンコードのサポートを個別に比較します。AV1 Mainプロファイル、8ビットと10ビットの違い、クロマ形式、解像度、最大レベルも確認してください。

新しいデバイスでも、コーデックのサポートが部分的な場合があります。Intel media-driverの報告では、Tiger LakeでAV1ハードウェアデコードが失敗する一方、ソフトウェアデコードは動作しました。これは、特定のカーネルとドライバーの組み合わせでは、AV1のコードパスが存在していても失敗する可能性があることを示しています。

H.264の使用率、GPU製品ファミリー、またはアプリケーションのチェックボックスだけでAV1の対応可否を判断しないでください。実際のソースプロファイルと要求された出力エントリーポイントを、インストール済みのスタックが報告する内容と照合してください。

ホストが公開しているデコードおよびエンコードプロファイルを確認する

対象のレンダーデバイスまたはCUDAデバイスに対して、プラットフォームの機能確認ツールを実行します。VA-APIではプロファイルとエントリーポイントの出力を取得し、NVIDIAではインストール済みドライバーと、FFmpegで利用可能なデコーダーおよびエンコーダーを確認してください。

AV1はデコードには表示されてもエンコードには表示されない場合があります。また、低電力エンコードモードでは、H.264には不要なファームウェアが必要になることがあります。Intelのmedia-driverリポジトリでは、AVC、HEVC、VP9、AV1の低電力ビットレート制御がHuCファームウェアの利用可能性に依存する場合があると説明されています。

ホストが必要なAV1エントリーポイントを公開していない場合は、ホスト層で停止してください。カーネルとユーザー空間ドライバーが提供していないコーデックブロックを、コンテナの権限やメディアサーバーの設定変更で作り出すことはできません。

カーネル、ファームウェア、ユーザー空間ドライバーのバージョンを比較する

カーネル、ファームウェアパッケージ、GPUユーザー空間ドライバー、libvaまたはCUDAスタック、コンテナランタイム、FFmpegビルドを記録します。アップデート後もH.264は安定して動作する一方で、新しいAV1経路だけが退行することがあります。

初期のIntel Arc導入環境では、カーネルとmedia-driverの周辺スタックが成熟するまで、AV1を含む複数のコーデックでVA-APIのデコードおよびエンコードに失敗する報告がありました。この事例は、新しいコーデック経路ではドライバースタックの互換性がより重要である理由を示しています。

現在のバージョンを、最後に正常動作した構成およびディストリビューションがサポートするパッケージの組み合わせと比較してください。新しいユーザー空間メディアドライバーを互換性のない古いカーネルと組み合わせたり、パッケージ化されたFFmpegコンポーネントを個別に置き換えたりしないでください。

コンテナ内で同じデバイスとFFmpegビルドをテストする

メディアサーバーのコンテナに入り、レンダーノードまたはNVIDIAデバイス、数値グループ、ドライバーライブラリ、同梱FFmpegのコーデック一覧を確認します。ホストで利用できることは、コンテナが同じスタックを使用している証明にはなりません。

短い既知の正常なAV1サンプルを、ハードウェアデコードと、HDR、字幕、スケーリングを使わない単純なH.264出力で処理します。その後、アプリケーションのFFmpegバイナリと実際のデバイス選択を使って繰り返してください。

ZimaSpaceのハードウェアトランスコードの確認ガイドでは、コンテナがソフトウェアへ暗黙にフォールバックせず、想定したデバイスを使用していることを確認するための関連テストを説明しています。

AV1の映像処理と配信コンテナの問題を切り分ける

AV1ソースのデコード自体は正常でも、クライアントが音声変換、別のHLSセグメント形式、HDR処理、または選択した組み合わせに対応しない配信コンテナを要求すると失敗することがあります。

Jellyfin Webの問題報告では、あるHLSコンテナの選択時には音声トランスコードを伴うAV1再生に失敗しましたが、fMP4-HLSを有効にすると動作しました。これは、配信コンテナが失敗箇所になる可能性を示しています。

単純なSDRのAV1ファイル、互換性のある音声、字幕なし、H.264出力で再テストします。音声変換、HDRトーンマッピング、字幕、通常のクライアントプロファイルは、一度に1つずつ追加してください。

分類が完了してからソフトウェアフォールバックまたは互換性のある出力を使用する

GPUがAV1デコードには対応していてもエンコードに対応していない場合は、ハードウェアデコードを維持し、対応していればクライアント向け出力をH.264またはHEVCでエンコードします。AV1デコードが利用できない場合、低解像度ならソフトウェアデコードで動作することがありますが、高ビットレートの4Kでは遅すぎる可能性があります。

AV1出力が有用かどうかは、クライアントの対応状況にも左右されます。Jellyfin Webでは、AV1クライアント対応がプロファイルに依存しているため、ブラウザープロファイルがH.264を選択し続ける問題が追跡されています。

テストしたAV1ファイルが意図したハードウェアデコーダーまたは測定済みのソフトウェアフォールバックを使用し、出力コーデックがクライアントに適合し、トランスコード速度がリアルタイムを上回り、AV1固有の変更後もH.264セッションが動作し続ければ、修復は完了です。

サポートとヒント

もっと読む

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.