メインコンテンツにスキップ

ハードウェアトランスコーディング

この機能を使用すると、GPUを使用してトランスコーディングを高速化し、CPUの負荷を軽減できます。 ただし、ハードウェアトランスコーディングは、同じ設定のソフトウェアトランスコーディングに比べて、品質が低下し、通常はビデオサイズが大幅に大きくなります。スロープリセットを使用し、より効率的なコーデックを選ぶことでこの差を縮小できます。 この機能は新しいためまだ試験的であり、すべてのシステムで動作するとは限りません。

情報

ハードウェア加速を有効にした後、トランスコーディングジョブをやり直す必要はありません。有効化後のジョブに対して加速デバイスが使用されます。

対応API

  • NVENC(NVIDIA)
  • Quick Sync(Intel)
  • RKMPP(Rockchip)
  • VAAPI(AMD / NVIDIA / Intel)

制約

  • ここで説明する手順および設定はDocker Compose専用です。他のコンテナエンジンでは異なる設定が必要です。
  • LinuxおよびWindows(WSL2経由)のサーバーのみがサポートされています。
  • WSL2ではQuick Syncはサポートされていません。
  • 現在、Raspberry Piはサポートされていません。
  • 2パスモードはNVENCのみサポートされています。他のAPIではこの設定を無視します。
  • デフォルトではエンコードのみがハードウェアによって加速されます。そのためCPUはソフトウェアデコードとトーンマッピングに使用されます。
    • ビデオトランスコーディング設定でハードウェアデコードを有効にすることで、フルエンドツーエンドの加速が可能です。
  • ハードウェア依存
    • コーデックのサポート状況は異なりますが、H.264とHEVCは通常サポートされています。
      • 特に、NVIDIAとAMDのGPUはVP9エンコードをサポートしていません。
    • 新しいデバイスほどトランスコーディングの品質は高くなります。

前提条件

NVENC

  • サーバーに公式のNVIDIAドライバーがインストールされている必要があります。
  • Linux(WSL2を除く)では、NVIDIA Container Toolkitもインストールする必要があります。

QSV

  • VP9を動作させるには:
    • Intel第9世代以上のCPUが必要です
    • 第11世代以前のCPUを使用している場合、この手順を実行してLow-Powerモードを有効にする必要があります
    • また、サーバーが特に第11世代CPUを搭載し、かつUbuntu 22.04 LTSに付属するカーネル5.15を使用している場合は、このカーネルをアップグレードする必要があります(Jellyfinドキュメントより)。

RKMPP

RKMPPを動作させるためには:

  • 対応するRockchip ARM SoCが必要です。
  • ハードウェアトーンマッピングをサポートしているのはRK3588のみであり、他のSoCはハードウェアエンコードを使用しながらも遅いソフトウェアトーンマッピングを使用します。
  • トーンマッピングには、ホストシステムに/usr/lib/aarch64-linux-gnu/libmali.so.1が存在する必要があります。お使いのMali GPU(RK3588ではlibmali-valhall-g610-g13p0-gbm)に対応したlibmaliリリースをインストールし、hwaccel.transcoding.ymlファイルを次のように変更してください:
    • rkmppセクションで、必要な3行の先頭についている#記号を削除してコメントを解除してください
    • - /dev/mali0:/dev/mali0
    • - /etc/OpenCL:/etc/OpenCL:ro
    • - /usr/lib/aarch64-linux-gnu/libmali.so.1:/usr/lib/aarch64-linux-gnu/libmali.so.1:ro

設定

基本設定

  1. 未取得の場合は、最新のhwaccel.transcoding.ymlファイルをダウンロードし、それをdocker-compose.ymlと同じフォルダに配置してください。

  2. docker-compose.ymlimmich-serverセクション内で、extendsセクションのコメントを解除し、適切なバックエンドにcpuを変更してください。

    注意:WSL2でのVAAPI使用時は、vaapiではなくvaapi-wslを使用してください。

  3. 更新された設定でimmich-serverコンテナを再デプロイしてください。

  4. 管理ページのVideo transcoding settingsセクションで、ハードウェア加速設定を適切なオプションに変更し保存してください。

    注意:Jasper LakeおよびElkhart Lake CPUを使用している場合は、Hardware Acceleration -> Constant quality modeCQPに設定してください。

  5. (オプション)最適なパフォーマンスを得るためにハードウェアデコードを有効にします。

単一構成ファイル

UnraidやPortainerを含むいくつかのプラットフォームは、執筆時点では複数のComposeファイルをサポートしていません。その代替として、hwaccel.transcoding.ymlファイルの関連内容を直接immich-serverサービスに「インライン化」することができます。

例えば、このファイルのqsvセクションは以下のとおりです:

devices:
- /dev/dri:/dev/dri

これをhwaccel.transcoding.ymlから拡張する代わりに、immich-serverサービスに追加できます:

immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# `extends`セクションはありません
devices:
- /dev/dri:/dev/dri
volumes:
...

これが完了したら、「基本設定」のステップ3に進んでください。

All-In-One - Unraid設定

QSV
  1. Unraid > Docker > (停止)Immichコンテナ > 編集
  2. 下にスクロールして「パス、ポート、変数、ラベル、またはデバイスを追加」を選択
  3. ドロップダウンメニューで「デバイス」を選択し、任意の名前と値に/dev/driを入力。
  4. 「基本設定」のステップ4に進みます。
NVENC
  1. コンテナアプリで次の環境変数を追加:Key=NVIDIA_VISIBLE_DEVICES Value=all
  2. コンテナアプリ内で、ベーシックモードからアドバンストモードに変更し、「追加パラメータ」フィールドに次を追加:--runtime=nvidia
  3. コンテナアプリを再起動します。
  4. 「基本設定」のステップ4に進みます。

ヒント

  • 品質と効率を維持するため、ソフトウェアトランスコーディングよりもスロープリセットを選択すると良いでしょう
  • NVIDIAおよびIntelデバイスでVAAPIを使用することは可能ですが、それぞれのデバイスに最適化されたAPIを使用することをお勧めします
  • トランスコード中にユーティリゼーション(例えばNVIDIAの場合はnvtop、Intelの場合はintel_gpu_topなど)を確認することで、デバイスが認識され使用されていることを確認できます。トランスコード中にエラーログが表示されないことも、使用されていることを示します。