QNAP Container Station Jellyfin Server 構築

TS-h1283XU-RP」上のコンテナ(Container Station)で Jellyfin Server を構築します。

基本のセットアップ方法については、「QNAP QuTS hero 5 セットアップ」をご覧ください。

 

Jellyfin って何?

自前でホスティング可能なマルチメディアサーバーのソフトウェアです。

Netflix、Amazonプライムビデオと同じような動画配信を自分のサーバーから出来るようになります。

音楽などにも対応しているためSpotifyの代わりにすることも可能です。

しかしながら、データ自体は自分で用意する必要があること、著作権法の関係があるので自分だけで使用することが注意点です。

 

有名どころのマルチメディアサーバーソフトウェアでは、以下のようなものが見つかります。

Plexは有名ですが、ユーザー管理(LDAP非対応・オンライン認証必要)の点で除外します。

EmbyとJellyfinがLDAPに対応しているため、どちらかを採用したいです。

JellyfinはEmbyからフォークして開発されたもので、Embyはクローズドソースに移行したようです。

また、多くの機能が有償となっており、今回はJellyfinを構築したいと思います。

 

Jellyfin Server を Container Station に設定

詳細はこちらにある通りで、このDockerイメージを動かす場合には、いくつかの設定が必要になります。

latest タグと各種バージョンのタグがあります。

 

事前準備

データの保存先としてディレクトリを作成します。

以下のディレクトリを準備しておきます。

  • /share/Container/jellyfin/cache/
  • /share/Container/jellyfin/config/

コマンド例:

mkdir -p /share/Container/jellyfin/cache/ && mkdir -p /share/Container/jellyfin/config/

メディアファイルの置き場は後で考えます。

とりあえず動作に最低限必要なディレクトリを用意します。

 

Dockerコンテナの設定

「Container Station」にはDocker Hubの仕様から、全てのタグが列挙されないというバグがあります。

タグが多いイメージに関して、Docker Hub APIはタグを取得する際の件数制限があり、全てのタグが表示されません。

Jellyfinのプロジェクトに関しては、非常にタグが多いプロジェクトで、latestタグ列挙まで行かず止まってしまいますので、自分でタグを入力して進める方法を取ります。

 

「Container Station」を開き、「コンテナ」タブから「作成」ボタンを押してコンテナ作成をします。

QNAP Docker Jellyfin Server 001

「コンテナの作成」という画面が表示されるので、イメージ欄に「jellyfin/jellyfin:latest」と入力して「次へ」を押して進みます。

「コンテナを作成する前にレジストリからイメージをプルしてみてください。」にチェックを入れなくてもローカルにイメージが無い場合にはプルされるので大丈夫です。

コンテナ再作成等、アップデートしたいときにチェックを入れましょう。

2026年1月時点では、10.11.5が最新版です。「latest」ではなく「10.11」タグを使用してもいいと思います。

使いたいバージョンに応じて適宜書き換えてください。

 

QNAP Docker Jellyfin Server 002

  • 名前:任意(わかりやすいもの)
  • 設定・再起動ポリシー:「停止時以外」
  • ネットワーク設定・露出ポート:ホスト 8096/tcp コンテナ 8096/tcp
  • ネットワーク設定・デフォルトの Web URL ポート:無効

7359/udp も開けておくと、Jellyfin クライアントが自動でサーバーを発見できるようです。

私の環境では、サーバーを置いてあるセグメントとは別セグメントを普段使っているので必要ない設定になります。

同一セグメントにインターフェースを置く場合には設定したほうが便利だと思います。

「詳細設定」をクリックして、詳細設定に進む。

 

「ネットワーク」ページ

(追記)アップデート時に「直接再作成」でコンテナ再作成をすると、Container StationのバグかMACアドレスが同じになるコンテナが発生することがありました。

Dockerネットワークが不安定になり、通信できない状態となってしまうので、MACアドレス欄を空欄(任意)にするのではなく、必ず適当な値を入力をしておきましょう。

入力欄の右端にある丸い矢印マーク(🔃)をクリックすると、適当なMACアドレスが払い出されます。

他と被ってなければOKです。

 

「環境」ページ

QNAP Docker Jellyfin Server 003

「新しい変数の追加」ボタンで以下の内容を増やす。

  • 変数「TZ」値「Asia/Tokyo」

 

「ストレージ」ページ

QNAP Docker Jellyfin Server 004

ボリューム「/cache」・「/config」設定があるため、それを一旦削除。

「ボリュームの追加」ボタン横の矢印から「マウントされたホストのパスをバインド」を選択して追加。

  • ホスト「/Container/jellyfin/cache」に対してコンテナ「/cache」RWのままで
  • ホスト「/Container/jellyfin/config」に対してコンテナ「/config」RWのままで

(なお、ボリュームの設定のままでも、ボリュームに /share/Container/jellyfin/ のパスで設定を入れると勝手にマウントになります)

この設定でコンテナ内のディレクトリをファイルシステムにマッピングさせます。

前述の通り、メディアファイルのディレクトリ設定は後でコンテナを「再作成」で設定することにします。

 

また、名前解決を行うために以下の設定を入れるといいでしょう。

ホスト「/Container/hosts」に対してコンテナ「/etc/hosts」をROで追加

これはLDAP接続のドメイン名解決のためなので必須ではないです。

なぜ「/Container/hosts」ファイルにするのかは、「QNAP QuTS hero 5 セットアップ」をご覧ください。

確実な時刻同期のために「/etc/localtime」をROで追加してもいいかもしれません。

 

QNAP Docker Jellyfin Server 005

以上で最低限起動する設定になっています。

「完了」でコンテナを作成しましょう。

 

Jellyfin Server のインストール

先程設定した8096番ポートにブラウザでアクセスすると初期インストール画面が表示されます。

QNAP Docker Jellyfin Server Install 001 QNAP Docker Jellyfin Server Install 002

サーバー名の設定と管理者アカウントの設定です。

ここで入力したサーバー名はアクセスしたときにタイトル等に表示されるものです。

 

QNAP Docker Jellyfin Server Install 003 QNAP Docker Jellyfin Server Install 004

メディアライブラリは現時点では追加せずにとりあえず進みます。

動画・音楽ファイルに対してメタデータの検索を行う場合に優先する言語を選んでおきます。

 

QNAP Docker Jellyfin Server Install 005 QNAP Docker Jellyfin Server Install 006

当たり前ですが、リモートアクセスを許可しないと様々な場所からアクセスして使うことが出来ません。

これで設定は完了します。

 

QNAP Docker Jellyfin Server Install 007 QNAP Docker Jellyfin Server Install 008

先程設定した管理者アカウントでログインできることを確認しておきましょう。

メディアライブラリは追加しませんでしたので何も表示されません。

右上のメニューから「管理」→「ダッシュボード」と進めることを確認してください。

 

Jellyfin の詳細設定

ユーザーについてはLDAP側で管理したいです。(著作権の問題があるので共有内容については気をつけてください)

QNAP Docker Jellyfin Server LDAP 001

LDAPの認証についてはプラグイン形式で提供されています。

管理画面のプラグインより、「LDAP-Auth」をインストールします。

インストール後はサーバーの再起動をして反映を待ちます。

 

LDAP-Auth プラグイン

プラグインの画面から設定に進めます。

例として「 QNAP Container Station LLDAP Server 構築」設定済みとします。

LLDAPを使用する場合には以下に設定例があるのでこちらも参考に。

 

QNAP Docker Jellyfin Server LDAP 002 QNAP Docker Jellyfin Server LDAP 003

以下、設定例です。

  • LDAP Server:ldap.example.com
  • LDAP Port:6360
  • Secure LDAP:チェックを入れたまま
  • StartTLS:チェックを外したまま
  • LDAP Client Cert Path:入力なし
  • LDAP Client Key Path:入力なし
  • LDAP Root CA Path:入力なし
  • Skip SSL/TLS Verification:チェックを外したまま
  • Allow Password Change:チェックを外したまま
  • Password Reset Url:入力なし
  • LDAP Bind User:uid=ldap-readonly,ou=people,dc=ldap,dc=example,dc=com
  • LDAP Bind User Password:パスワード
  • LDAP Base DN for searches:ou=people,dc=ldap,dc=example,dc=com

Usersセクション

  • LDAP Search Filter:(uid=*) または (&(uid=*)(!(uid=ldap-readonly))(!(uid=admin))) 等
  • LDAP Search Attributes:uid, mail
  • LDAP Uid Attribute:uid
  • LDAP Username Attribute:uid
  • LDAP Password Attribute:userPassword
  • Enable profile image synchronization:チェックを外したまま
  • Remove profile images not in LDAP:チェックを外したまま
  • LDAP Profile Image Attribute:jpegphoto

Administratorsセクション

  • LDAP Admin Base DN:入力なし
  • LDAP Admin Filter:そのまま
  • Enable Admin Filter 'memberUid' mode:チェックを外したまま

Testingセクション

  • Enable User Creation:チェックを入れたまま

ライブラリアクセスセクション

  • すべてのライブラリへのアクセスを有効化:任意の設定にする

以上の設定でLDAPのユーザーがログインできるようになります。

 

メディアライブラリの追加

例として音楽ライブラリを追加する場合の設定です。

QNAP Docker Jellyfin Server Library 001

コンテナの再作成の画面より詳細設定に進みます。

ストレージを開き、「ボリュームの追加」ボタン横の矢印から「マウントされたホストのパスをバインド」を選択して追加。

  • ホスト「/Music/Library」に対してコンテナ「/media/music」ROでマウントする

(Jellyfinサーバー側から書き換えを許可するのであればRWでもいいかもしれません)

これでコンテナを再作成すると、「/media/music」にホスト側のライブラリがマウントされます。

もちろん、ホスト側のパスは一例ですので、環境によって変更してください。

上記例では、Musicという共有フォルダが作成してあり、その中にLibraryフォルダがある前提となっております。

 

音楽ライブラリの作り方

ここに示してある構造の通りにデータを入れていきます。

色々試した結果、FLACにエンコードして「/Music/Library/[アーティスト名]/[アルバム名]/[曲.flac]」で入れることに落ち着きました。

mp3に入れるアルバムアートが一部アプリで読めなかったこと、FLACもビットレート他を統一しておかないと読めない環境もありました。

 

私はCDを購入後、PlextorドライブとEAC(Exact Audio Copy)を使用してオフセット0となるCUE + WAV形式で取り込みをしています。

そこからJellyfin向けに変換する作業が必要になりました。

具体的には「fre:ac」を使用してFLACにエンコード、「TagScanner」を使用してタグ編集です。

(タグ編集に使うTagScannerですが、他のソフトでは編集できないタグがあり行き着いたものです。しかし大量のファイル処理でランダムに一部タグ書き込みに失敗することがあり別なものを探しています)

なお、ハイレゾのFLAC等をそのまま使用すると読めないアプリ、端末等がありますので、必ず変換します。

44.1kHz/16bitに統一するために「fre:ac」の信号処理を設定しておきます。

一般設定中「処理」にて「選択中」に以下の順序で処理を入れる。

  • 「サンプリングレート変換」Medium/44100Hzにする
  • 「サンプリング形式変換」整数16bit/TPDFにする

これでCD音質に統一されたFLACファイルが出来上がりますので、あとはタグを整備してライブラリにファイルを配置していくと良いです。

 

動画ライブラリの作り方

動画に関しては、「映画」と「番組」でフォルダ構造が異なります。

個人的に最適だと思っているのは、音声が日本語かどうか(字幕版とそうでないもの)で分けるということです。

字幕に関してはできる限り映像に焼き込みしておくことをオススメします。

(字幕トラック埋め込みや字幕ファイルでもいいのですが、デフォルトの字幕指定がバグ気味で、再生の都度字幕設定の必要があるようです)

多いですが、現状では以下のようなライブラリ内容になっています。

  • アニメ:複数の話から構成されるシリーズもののアニメ(日本語音声)
  • アニメ映画:長編の映画扱いのアニメ・特撮他・実写でないもの(日本語音声)
  • アニメ映画(字幕):長編の映画扱いのアニメ・特撮他・実写でないもの(字幕)
  • ドラマ:複数の話から構成されるシリーズもののドラマ(日本語音声)
  • ドラマ(字幕):複数の話から構成されるシリーズもののドラマ(字幕)
  • 映画:長編の映画(日本語音声)
  • 映画(字幕):長編の映画(字幕)

私は昔から上記のCDと同様に、DVD/Blu-rayを購入したらリッピングしてNASに保存して自宅LAN内のコンピューターで見れるようにしていました。

※なお、2012年の著作権法改正で技術的保護手段(コピーガード)の回避が違法となってしまったため現在では推奨されません。注意してください。

CDに関してはそもそも保護されていないので現在でも自由に行えますが、DVD/Blu-rayのリッピングは暗号化されている関係上、その解除が違法となり、テレビ放送のTS抜きも怪しいのではないかな?とは思います。

繰り返しになりますが、この点に関してはご注意願います。

以下、2012年の著作権法改正以前に取り込みしたDVD/Blu-rayを元データとして、最適なデータを生成する方法をメモしておきます。

 

HandBrakeで動画ファイルを生成する方法

 

動画トランスコーディング対応

適当な動画で簡単に試すとNASのUI上でのダッシュボードのCPU使用率表示が普段数%から、動画再生が始まると70%前後までCPUを使います。

そのためハードウェアトランスコードの設定を入れたいです。

1番楽なのは、Intel CPUの一部で利用可能な、Intel QSV(Quick Sync Video)を使用することです。

内蔵グラフィックが付いてないので怪しいかな?確認してみましょう。

$ cat /proc/cpuinfo | grep "model name"
model name      : Intel(R) Xeon(R) E-2236 CPU @ 3.40GHz

残念ながら私が使っているQNAPでは、QSV(Quick Sync Video)は使用できないようです。

 

GPUを使用する

このNASのPCIeスロットには仮想マシンでパススルーして使用しようと思っていた NVIDIA T1000 8GB があります。

ハードウェアトランスコード用に割り当てることにしましょう。

まず最初にGPUのリソース割り当てを変更します。

「コントロールパネル」から、「システム」、「ハードウェア」、「ハードウェアリソース」と進みます。

対象のGPUの「リソースの使用」欄を変更して、「Container Station モード」にします。

私の環境ではNvKernelDriverは入っていたのですが、NVIDIA GPU Driverがインストールされていませんでした。

その場合、NVIDIA GPU Driverのインストールが要求されるので、そのままインストールボタンを押します。

インストール完了後に「Container Station モード」にします。

 

コンテナ設定を変更する

対象のJellyfinサーバーコンテナを指定し、「再作成」で設定をしなおし、コンテナを再作成します。

コンテナの設定中で「詳細設定」を開きます。

GPUリソースを割り当てると「ランタイム」設定中に「GPU」項目が現れます。

「追加」ボタンを押して、T1000を選択しました。

「適用」を押してコンテナ再作成まで進めます。

 

コンテナ側での認識確認

こちらの通りですが、GUIで設定が終わったので、コンテナ側でGPUが見えているのかを確認します。

$ docker exec -it jellyfin-server nvidia-smi
Tue Mar 10 05:48:49 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.67                 Driver Version: 550.67         CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA T1000                   Off |   00000000:01:00.0 Off |                  N/A |
| 42%   58C    P8             N/A /   50W |       1MiB /   4096MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
                                                                                
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+
$

 

Jellyfinの設定

Jellyfinにログインします。

ダッシュボードから「プレイバック」「トランスコーディング」と開きます。

「ハードウェアアクセラレーション」を「Nvidia NVENC」にし、下部の「保存」ボタンを押します。

これで設定完了です。

最初に再生テストしたのと同じ動画ファイルを再生してみます。

デフォルトのソフトウェアトランスコードでは70%前後までCPUを使用していました。

同様にNAS側のダッシュボードで状況を確認しつつ動画を再生します。

すると、CPU使用率は10%程度、GPU使用率が50~60%となり、ファン速度が高速になりました。

GPUを使ったハードウェアトランスコードが行われているようです。

NVENCはGPUの上位モデル・下位モデルで性能差がそれほどなく、主にクロックの影響を受けます。

そのため、新しい世代のNVENCを積んだほうが性能が良いでしょう。

(古い上位モデルのGPUより、新しい下位モデルのGPUが推奨)

現在、T1000を使用しているので、例えばRTX A2000に交換したとしても、世代は同じで性能は大差ないです。

それよりも、次の世代のRTX 2000 Adaや、そのまた次の世代のRTX PRO 2000 Blackwellのほうが性能が良くなっているはずです。

RTX 4000 SFF Ada、NVIDIA L4、RTX PRO 4000 SFF BlackwellであればNVENCを2個積んでいるので、並列処理には適しているかもですね。

 

Jellyfinの使い方

ブラウザでアクセスすれば各種メディアファイルがブラウザ上で再生できます。

ただし、クライアントアプリがあったほうが使いやすいと思います。

 

iOS(iPhone・iPad)環境

  • Jellyfin Mobile バックグラウンド音楽再生不可
  • Swiftfin 動画専用
  • Streamyfin バックグラウンド再生できるが表示がバグるときあり
  • Manet Music FLACで良い感じに動作、動作軽量だがアーティスト一覧列挙されない?
  • Fintunes FLACで良い感じに動作、アルバムアート一部表示されないことあり。
  • Finamp FLACで良い感じに動作、動作軽量
  • Infuse 動画専用

「Jellyfin Mobile」と「Swiftfin」は公式で提供されているものです。

しかし、音楽を聞く上では、バックグラウンド再生できないという致命的な問題があります。

その上、「Swiftfin」は動画専用のようで表示すらされないです。

音楽再生では「Finamp」がかなり良いです。

「Fintunes」も良い感じに動いています。一部MP3ファイルのアルバムアートは表示されないようです。FLACはOK。バグでしょうか。

 

Windows環境