ハードウェアトランスコーディング
この機能を使用すると、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エンコードをサポートしていません。
- 新しいデバイスほどトランスコーディングの品質は高くなります。
- コーデックのサポート状況は異なりますが、H.264とHEVCは通常サポートされています。
前提条件
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
設定
基本設定
-
未取得の場合は、最新の
hwaccel.transcoding.yml
ファイルをダウンロードし、それをdocker-compose.yml
と同じフォルダに配置してください。 -
docker-compose.yml
のimmich-server
セクション内で、extends
セクションのコメントを解除し、適切なバックエンドにcpu
を変更してください。注意:WSL2でのVAAPI使用時は、
vaapi
ではなくvaapi-wsl
を使用してください。 -
更新された設定で
immich-server
コンテナを再デプロイしてください。 -
管理ページの
Video transcoding settings
セクションで、ハードウェア加速設定を適切なオプションに変更し保存してください。注意:Jasper LakeおよびElkhart Lake CPUを使用している場合は、
Hardware Acceleration
->Constant quality mode
をCQP
に設定してください。 -
(オプション)最適なパフォーマンスを得るためにハードウェアデコードを有効にします。
単一構成ファイル
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
- Unraid > Docker > (停止)Immichコンテナ > 編集
- 下にスクロールして「パス、ポート、変数、ラベル、またはデバイスを追加」を選択
- ドロップダウンメニューで「デバイス」を選択し、任意の名前と値に
/dev/dri
を入力。 - 「基本設定」のステップ4に進みます。
NVENC
- コンテナアプリで次の環境変数を追加:Key=
NVIDIA_VISIBLE_DEVICES
Value=all
- コンテナアプリ内で、ベーシックモードからアドバンストモードに変更し、「追加パラメータ」フィールドに次を追加:
--runtime=nvidia
- コンテナアプリを再起動します。
- 「基本設定」のステップ4に進みます。
ヒント
- 品質と効率を維持するため、ソフトウェアトランスコーディングよりもスロープリセットを選択すると良いでしょう
- NVIDIAおよびIntelデバイスでVAAPIを使用することは可能ですが、それぞれのデバイスに最適化されたAPIを使用することをお勧めします
- トランスコード中にユーティリゼーション(例えばNVIDIAの場合は
nvtop
、Intelの場合はintel_gpu_top
など)を確認することで、デバイスが認識され使用されていることを確認できます。トランスコード中にエラーログが表示されないことも、使用されていることを示します。