Jellyfinのトランスコーディング機能は、メディアをユーザーのデバイスやネットワーク環境に最適化するための重要な仕組みです。特に、クライアントデバイスが元のメディア形式を直接再生できない場合や、帯域幅の制限がある場合に利用されます。
トランスコードをCPUではなく、GPUで行うのが、ハードウェアトランスコーディング機能です。
Synology のNASにおいて、一部の機種(IntelのCPU採用)では、ハードウェアトランスコーディングに対応しており、設定を行うことにより、トランスコード時のCPU負荷を軽減し、複数のストリームを効率的に処理できるようになります。
前提 本記事でのDSM(OS)バージョンはSynology DSM 7.2を用いています。
1.Jellyfinのトランスコーディングの仕組み
1-1.トランスコーディングとは
Jellyfinは、サーバー上のメディアファイルをデバイスやブラウザがサポートしている形式に変換する機能を持っています。これにより、元のメディアファイルがデバイスで直接再生できない場合でも、視聴が可能になります。
トランスコーディングは以下の3つの側面で行われます。
- ビデオの変換
- コーデック(例:H.264、H.265)や解像度(例:1080p→720p)を変換します。
- ネットワーク帯域幅が低い場合、ビットレートを下げることでストリーミングをスムーズにします。
- オーディオの変換
- 対応していないオーディオ形式(例:DTS、AAC)をサポートされている形式(例:AACやMP3)に変換します。
- コンテナの変換
- デバイスが特定のコンテナ形式(例:MKV、MP4)をサポートしていない場合、適切な形式に変更します。
1-2.トランスコーディングが必要なケース
トランスコーディングは以下のケースで、Jellyfinが判断して実行します。
- デバイスやブラウザが特定のコーデックやフォーマットをサポートしていない場合。
- ネットワーク帯域が限られている場合に低ビットレートでの再生が必要な場合。
- 字幕がハードコーディング(映像に直接埋め込む)されていないと再生できない場合。
1-3.トランスコーディングの種類
- ソフトウェアトランスコーディング
- CPUを使用して変換を行います。汎用性が高いですが、負荷が大きく、強力なCPUが必要です。
- ハードウェアアクセラレーション
- GPUや専用エンコーダ(例:NVIDIA NVENC、Intel Quick Sync Video、AMD VCE)を使用します。CPUの負荷を軽減し、より高速に処理を行えます。Jellyfinでは、適切な設定を行うことでこれを有効化できます。
2.ハードウェアトランスコーディングが使用可能な機種
Synology NASでは、IntelのCPUを採用している機種において、ハードウェアトランスコーディングに対応しています。
最新リリースの機種だと、DS224+はCPUがCeleron J4125であるため対応しています。我が家で使用しているDS220+もCeleron J4025であり対応してます。
ハイスペック機種であっても、CPUがAMD(Ryzen)の機種である場合は未対応のようです。
3.ハードウェアトランスコーディングを使用する設定
3-1.Jellyfinインストール時の対応
こちらの記事で紹介したインストールを行った場合は、ハードウェアトランスコーディングに対応しています。
3-2.Jellyfinインストール後の設定
Jellyfinに管理ユーザーでログインし、ダッシュボードを選択します。
プレイバック>トランスコーディングを選択します。
ハードウェアアクセラレーションのプルダウンメニューより、「Indel QuickSync(QSV)」を選択します。
[ハードウェアデコードを有効]オプションで、GPUがサポートしている以下のコーデックを選択します。
上記以外のオプションはデフォルトのまま、画面最下部の「保存」をクリックして設定を保存します。
以上の設定で、ハードウェアトランスコーディングの設定は完了です。
4.ハードウェアトランスコーディングの効果
以下の内容の1分程度の短い動画を、トランスコードが発生する環境で、ハードウェアトランスコーディング有効の場合と、ハードウェアトランスコーディング無効(ソフトウェアでトランスコード)の場合で再生比較してみました。
- コーデック:MPEG4
- 解像度:1920x1080
- フレームレート:29.970036
- ビットレート:4095 kbps
- ビット深度:8 bit
CPU負荷の比較です。赤枠がハードウェアトランスコーディング有効、青枠がハードウェアトランスコーディング無効となります。
ハードウェアトランスコーディング有効の場合、動画再生のタイミングでトランスコードが開始し、CPU負荷は上がりますが、動画再生完了までにはトランスコードが完了し、再生には支障がありませんでした。ハードウェアトランスコーディング無効の場合は、トランスコードにかかる時間が、動画再生の時間を大幅に上回る処理時間となり、この間、CPUが高負荷となり、かつ動画も細切れ再生となりました。
DS220+のCPUはCeleron J4025であり、比較的ローパワーのCPUであるため、トランスコードが発生する環境であれば、ハードウェアトランスコーディング有効は必須であると思います。
5.パフォーマンス最適化のポイント
上記に示したように、トランスコードが発生する環境かつ、CPUがローパワーの場合はハードウェアトランスコーディングを活用することが必須ですが、そもそもトランスコードが発生しないように、サーバ上に配置するメディアファイルを、再生デバイスで対応されている形式で保存しておくのが良いです。メディアのコーデックやフォーマットを、デバイス互換性の高いH.264/AAC/MP4に変換しておくと、トランスコードが減少します。
- ダイレクトプレイ
トランスコーディングを一切行わず、元のファイルをそのまま配信します。 - ダイレクトストリーム
コンテナ形式のみを変換し、ビデオやオーディオの再エンコードは行いません。
これらを優先することで、サーバー負荷を大幅に減らせます。
6.まとめ
Synology NASに、Jellyfinをインストール・セットアップした環境において、ハードウェアトランスコーディングを設定する方法について紹介しました。
使用可能な機種は限定されますが、ハードウェアトランスコーディングを適切に設定することにより、Jellyfinのパフォーマンスを大幅に向上させることが可能です。
以上、最後まで記事を読んでいただき、ありがとうございました。