Jellyfinで作るメディアサーバ

Jellyfinで作るメディアサーバ

がとらぼでは過去にFreeBSDでPlex Media ServerVolumioのライブラリ管理をメディアサーバに任せるの記事でPlex Media Serverを紹介しました。Plex Media Serverは導入が簡単で多くのプラットフォームに対応し、当時としては先進的かつ洗練されたUIを備えた高機能なメディアサーバでした。多くの機能を無料で利用できたことも魅力です。 しかし、Plexがネットアカウントによる集中管理を強化し、有料機能を強く推すようになったことで、次第に不満を感じるユーザーも増えています。 クローズドなネットワーク環境でも利用できるオープンソースのメディアサーバを求める人々の間で注目を集めているのが、今回紹介する Jellyfin です。 Jellyfinは動画に強い構成を持っていますが、音楽専用サーバを探している場合は、LMS(Lyrion Music Server / 旧Logitech Media Server)を選ぶのも良いでしょう。 ただし、「がとらぼ」の中の人は、メディアサーバのWeb UIではなくネットワークメディアプレーヤーで利用する方針のため、LMSの強みである音楽ライブラリとの親和性を重視せず、今回はJellyfinを導入することにしました。

インストールの事前準備

Jellyfinの導入は非常に簡単です。特にLinux系OSでは、コマンド1行で完了します。
今回はシングルボードコンピュータ「Orange Pi Zero 3」に、Armbian(Debianベース)のイメージを焼いたmicroSDカードを使用しました。rootアカウント(初期パスワード1234)でSSHログインし、まずはネットワーク設定だけを行います。ネットワーク設定のデフォルトはDHCPですが、メディアサーバはIPアドレスを固定しておくのが望ましいためです。
最近のDebian系ではネットワークをnetplanで設定しますが、Armbianではarmbian-configを使えば簡単にネットワーク設定を行うことも可能です。armbian-configを使っても実際のネットワーク設定はnetplanでなので/etc/netplan下に設定が作られます。ただし、armbian-configではIPv6設定ができない場合があり、設定項目にIPv6がない場合はnetplan用の設定ファイルを直接修正・作成する必要があります。IPv4の設定だけarmbian-configで行い、作成された/etc/netplan下の設定ファイルにIPv6の設定を追加するのが簡単です。

事前準備として、動画や音楽ファイルを保存するストレージを用意しておく必要があります。シングルボードコンピュータの場合はUSBメモリやUSB接続のSSD/HDDが一般的です。PCであれば既存の内蔵ストレージを利用し、メディア用のディレクトリを決めておけば十分でしょう。
今回は、USBメモリをシングルボードコンピュータに接続し、メディアファイルの保存先として使用することにしました。

USBメモリを自動的にマウントする方法はいくつかありますが、今回はUSBメモリのデバイスUUIDを指定してマウントする方法を採用します。

まず、USBメモリのUUIDを確認します。ここでは、USBメモリが /dev/sda として認識されているものとします。もし認識デバイスが不明な場合は、USBメモリを接続した後に dmesg コマンドを実行し、最後の数行を確認します。そこで /dev/sda や /dev/sdb、/dev/sdc といったデバイス名が表示されていれば、それ(sdb, sdc)が対象のデバイスです。

# ls -al /dev/disk/by-uuid/ | grep sda
lrwxrwxrwx 1 root root  10 Oct  9 20:59 35ef9e60-7c0d-4f71-8c6b-31ac8f471f5a -> ../../sda1

この例では、35ef9e60-7c0d-4f71-8c6b-31ac8f471f5a が目的のディスクUUIDです。
※この文字列はデバイスごとに異なります。この記事に記載された値をコピーして使用しないでください。

次に、USBメモリのマウント先ディレクトリを作成します。パスは任意ですが、ここでは /mnt/media とします。

# mkdir /mnt/media
エディタで/etc/fstabを編集
# vim /etc/fstab

(次の1行を追加)
UUID=35ef9e60-7c0d-4f71-8c6b-31ac8f471f5a /mnt/media ext4 defaults 0 0

設定が完了しても、/etc/fstabへの変更は即時反映されません。通常はシステム再起動後に有効になります。
システムを再起動せずに、すぐにマウントを反映させたい場合は、以下のコマンドを実行します。

# systemctl daemon-reload
# sudo mount -a

これでUSBメモリがマウントされました。/etc/fstabに設定したため、次回以降の再起動時も自動的にマウントされます。

Jellyfinのインストール

Jellyfinの公式インストールドキュメントに従って手順を進めれば、問題なく導入できます。スクリプト実行時に多くのファイルをインターネットからダウンロードするため、ネット接続は必須です。

インストールスクリプトはシステムのOSやCPUアーキテクチャを自動判別し、最適なファイルやパッケージを導入します。
ただし、2025年10月現在、Debian 13(Trixie)ではCPUアーキテクチャに関係なくJellyfinが正常に起動しない不具合が報告されています。
Orange Pi Zero 3(arm64環境)でもTrixie上では起動できず、Debian 12(Bookworm)を使用したところ正常に動作しました。

以下は、Bookworm環境での実行例です。
なお、rootユーザーで実行していますが、コマンドにsudoが含まれているため、rootでなくても問題ありません。

    _             _    _                             __  __ _    _      _
   /_\  _ _ _ __ | |__(_)__ _ _ _ ___ _  _ _ _  ___ / _|/ _(_)__(_)__ _| |
  / _ \| '_| '  \| '_ \ / _` | ' \___| || | ' \/ _ \  _|  _| / _| / _` | |
 /_/ \_\_| |_|_|_|_.__/_\__,_|_||_|   \_,_|_||_\___/_| |_| |_\__|_\__,_|_|

 v25.11 rolling for Orange Pi Zero3 running Armbian Linux 6.12.47-current-sunxi64

 Packages:     Debian stable (bookworm), possible distro upgrade (trixie)
 Updates:      Kernel upgrade enabled and 3 packages available for upgrade
 Support:      DIY (custom image)
 IPv4:         (LAN) 192.168.11.64 (WAN) 255.255.255.256
 IPv6:         20zz:zzz:zzz:zzz:yyyy:yyyy:yyyy:yyyy

 Performance:

 Load:         14%               Uptime:       4 min
 Memory usage: 16% of 971M
 CPU temp:     44°C              Usage of /:   7% of 29G
 RX today:     17 KiB
 Commands:

 Configuration : armbian-config
 Upgrade       : armbian-upgrade
 Monitoring    : htop


root@orangepizero3:~# curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0> Determining optimal repository settings.
100 10841  100 10841    0     0  10602      0  0:00:01  0:00:01 --:--:-- 10618

Found the following details from '/etc/os-release':
  Real OS:            debian
  Repository OS:      debian
  Repository Release: bookworm
  CPU Architecture:   arm64
If this looks correct, press <Enter> now to continue installing Jellyfin.

> Fetching repository signing key.

> Installing Jellyfin repository into APT.
Types: deb
URIs: https://repo.jellyfin.org/debian
Suites: bookworm
Components: main
Architectures: arm64
Signed-By: /etc/apt/keyrings/jellyfin.gpg

> Updating APT repositories.
Hit:1 http://security.debian.org bookworm-security InRelease
Hit:2 http://deb.debian.org/debian bookworm InRelease
Hit:3 http://deb.debian.org/debian bookworm-updates InRelease
Hit:4 http://deb.debian.org/debian bookworm-backports InRelease
Hit:5 https://github.armbian.com/configng stable InRelease
Get:7 https://repo.jellyfin.org/debian bookworm InRelease [10.6 kB]
Get:8 https://repo.jellyfin.org/debian bookworm/main arm64 Packages [5,056 B]
Hit:6 http://mirrors.bfsu.edu.cn/armbian bookworm InRelease
Fetched 15.7 kB in 3s (4,567 B/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.

> Installing Jellyfin.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  jellyfin-ffmpeg7 jellyfin-server jellyfin-web libbluray2 libicu72 libmp3lame0 libmpg123-0 libnuma1 libogg0
  libopenmpt0 libopus0 libtheora0 libudfread0 libvorbis0a libvorbisenc2 libvorbisfile3 libvpx7 libwebp7
  libwebpmux3 libx264-164 libx265-199 libxml2 libzvbi-common libzvbi0 ocl-icd-libopencl1
Suggested packages:
  libbluray-bdj opus-tools opencl-icd
Recommended packages:
  libaacs0
The following NEW packages will be installed:
  jellyfin jellyfin-ffmpeg7 jellyfin-server jellyfin-web libbluray2 libicu72 libmp3lame0 libmpg123-0 libnuma1
  libogg0 libopenmpt0 libopus0 libtheora0 libudfread0 libvorbis0a libvorbisenc2 libvorbisfile3 libvpx7
  libwebp7 libwebpmux3 libx264-164 libx265-199 libxml2 libzvbi-common libzvbi0 ocl-icd-libopencl1
0 upgraded, 26 newly installed, 0 to remove and 0 not upgraded.
Need to get 106 MB of archives.
After this operation, 324 MB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bookworm/main arm64 libudfread0 arm64 1.1.2-1 [15.7 kB]
Get:2 http://deb.debian.org/debian bookworm/main arm64 libicu72 arm64 72.1-3+deb12u1 [9,202 kB]
Get:3 http://deb.debian.org/debian bookworm/main arm64 libxml2 arm64 2.9.14+dfsg-1.3~deb12u4 [620 kB]
Get:4 http://deb.debian.org/debian bookworm/main arm64 libbluray2 arm64 1:1.3.4-1 [124 kB]
Get:5 http://deb.debian.org/debian bookworm/main arm64 libmp3lame0 arm64 3.100-6 [357 kB]
Get:6 http://deb.debian.org/debian bookworm/main arm64 libmpg123-0 arm64 1.31.2-1+deb12u1 [141 kB]
Get:7 http://deb.debian.org/debian bookworm/main arm64 libogg0 arm64 1.3.5-3 [23.0 kB]
Get:8 http://deb.debian.org/debian bookworm/main arm64 libvorbis0a arm64 1.3.7-1 [86.2 kB]
Get:9 http://deb.debian.org/debian bookworm/main arm64 libvorbisfile3 arm64 1.3.7-1 [25.4 kB]
Get:10 http://deb.debian.org/debian bookworm/main arm64 libopenmpt0 arm64 0.6.9-1 [622 kB]
Get:11 http://deb.debian.org/debian bookworm/main arm64 libopus0 arm64 1.3.1-3 [176 kB]
Get:12 http://deb.debian.org/debian bookworm/main arm64 libtheora0 arm64 1.1.1+dfsg.1-16.1+deb12u1 [144 kB]
Get:13 http://deb.debian.org/debian bookworm/main arm64 libvorbisenc2 arm64 1.3.7-1 [80.4 kB]
Get:14 http://deb.debian.org/debian bookworm/main arm64 libvpx7 arm64 1.12.0-1+deb12u4 [892 kB]
Get:15 http://deb.debian.org/debian bookworm/main arm64 libwebp7 arm64 1.2.4-0.2+deb12u1 [260 kB]
Get:16 http://deb.debian.org/debian bookworm/main arm64 libwebpmux3 arm64 1.2.4-0.2+deb12u1 [109 kB]
Get:17 http://deb.debian.org/debian bookworm/main arm64 libx264-164 arm64 2:0.164.3095+gitbaee400-3 [443 kB]
Get:18 http://deb.debian.org/debian bookworm/main arm64 libnuma1 arm64 2.0.16-1 [20.3 kB]
Get:19 http://deb.debian.org/debian bookworm/main arm64 libx265-199 arm64 3.5-2+b1 [603 kB]
Get:20 http://deb.debian.org/debian bookworm/main arm64 libzvbi-common all 0.2.41-1 [69.7 kB]
Get:21 http://deb.debian.org/debian bookworm/main arm64 libzvbi0 arm64 0.2.41-1 [258 kB]
Get:22 http://deb.debian.org/debian bookworm/main arm64 ocl-icd-libopencl1 arm64 2.3.1-1 [42.1 kB]
Get:23 https://repo.jellyfin.org/debian bookworm/main arm64 jellyfin-server arm64 10.10.7+deb12 [43.3 MB]
Get:24 https://repo.jellyfin.org/debian bookworm/main arm64 jellyfin-web all 10.10.7+deb12 [32.8 MB]
Get:25 https://sgp1.mirror.jellyfin.org/files/debian bookworm/main arm64 jellyfin-ffmpeg7 arm64 7.1.2-2-bookworm [15.4 MB]
Get:26 https://repo.jellyfin.org/debian bookworm/main arm64 jellyfin all 10.10.7+deb12 [2,434 B]
Fetched 106 MB in 32s (3,327 kB/s)
Selecting previously unselected package jellyfin-server.
(Reading database ... 39006 files and directories currently installed.)
Preparing to unpack .../00-jellyfin-server_10.10.7+deb12_arm64.deb ...
Unpacking jellyfin-server (10.10.7+deb12) ...
Selecting previously unselected package jellyfin-web.
Preparing to unpack .../01-jellyfin-web_10.10.7+deb12_all.deb ...
Unpacking jellyfin-web (10.10.7+deb12) ...
Selecting previously unselected package libudfread0:arm64.
Preparing to unpack .../02-libudfread0_1.1.2-1_arm64.deb ...
Unpacking libudfread0:arm64 (1.1.2-1) ...
Selecting previously unselected package libicu72:arm64.
Preparing to unpack .../03-libicu72_72.1-3+deb12u1_arm64.deb ...
Unpacking libicu72:arm64 (72.1-3+deb12u1) ...
Selecting previously unselected package libxml2:arm64.
Preparing to unpack .../04-libxml2_2.9.14+dfsg-1.3~deb12u4_arm64.deb ...
Unpacking libxml2:arm64 (2.9.14+dfsg-1.3~deb12u4) ...
Selecting previously unselected package libbluray2:arm64.
Preparing to unpack .../05-libbluray2_1%3a1.3.4-1_arm64.deb ...
Unpacking libbluray2:arm64 (1:1.3.4-1) ...
Selecting previously unselected package libmp3lame0:arm64.
Preparing to unpack .../06-libmp3lame0_3.100-6_arm64.deb ...
Unpacking libmp3lame0:arm64 (3.100-6) ...
Selecting previously unselected package libmpg123-0:arm64.
Preparing to unpack .../07-libmpg123-0_1.31.2-1+deb12u1_arm64.deb ...
Unpacking libmpg123-0:arm64 (1.31.2-1+deb12u1) ...
Selecting previously unselected package libogg0:arm64.
Preparing to unpack .../08-libogg0_1.3.5-3_arm64.deb ...
Unpacking libogg0:arm64 (1.3.5-3) ...
Selecting previously unselected package libvorbis0a:arm64.
Preparing to unpack .../09-libvorbis0a_1.3.7-1_arm64.deb ...
Unpacking libvorbis0a:arm64 (1.3.7-1) ...
Selecting previously unselected package libvorbisfile3:arm64.
Preparing to unpack .../10-libvorbisfile3_1.3.7-1_arm64.deb ...
Unpacking libvorbisfile3:arm64 (1.3.7-1) ...
Selecting previously unselected package libopenmpt0:arm64.
Preparing to unpack .../11-libopenmpt0_0.6.9-1_arm64.deb ...
Unpacking libopenmpt0:arm64 (0.6.9-1) ...
Selecting previously unselected package libopus0:arm64.
Preparing to unpack .../12-libopus0_1.3.1-3_arm64.deb ...
Unpacking libopus0:arm64 (1.3.1-3) ...
Selecting previously unselected package libtheora0:arm64.
Preparing to unpack .../13-libtheora0_1.1.1+dfsg.1-16.1+deb12u1_arm64.deb ...
Unpacking libtheora0:arm64 (1.1.1+dfsg.1-16.1+deb12u1) ...
Selecting previously unselected package libvorbisenc2:arm64.
Preparing to unpack .../14-libvorbisenc2_1.3.7-1_arm64.deb ...
Unpacking libvorbisenc2:arm64 (1.3.7-1) ...
Selecting previously unselected package libvpx7:arm64.
Preparing to unpack .../15-libvpx7_1.12.0-1+deb12u4_arm64.deb ...
Unpacking libvpx7:arm64 (1.12.0-1+deb12u4) ...
Selecting previously unselected package libwebp7:arm64.
Preparing to unpack .../16-libwebp7_1.2.4-0.2+deb12u1_arm64.deb ...
Unpacking libwebp7:arm64 (1.2.4-0.2+deb12u1) ...
Selecting previously unselected package libwebpmux3:arm64.
Preparing to unpack .../17-libwebpmux3_1.2.4-0.2+deb12u1_arm64.deb ...
Unpacking libwebpmux3:arm64 (1.2.4-0.2+deb12u1) ...
Selecting previously unselected package libx264-164:arm64.
Preparing to unpack .../18-libx264-164_2%3a0.164.3095+gitbaee400-3_arm64.deb ...
Unpacking libx264-164:arm64 (2:0.164.3095+gitbaee400-3) ...
Selecting previously unselected package libnuma1:arm64.
Preparing to unpack .../19-libnuma1_2.0.16-1_arm64.deb ...
Unpacking libnuma1:arm64 (2.0.16-1) ...
Selecting previously unselected package libx265-199:arm64.
Preparing to unpack .../20-libx265-199_3.5-2+b1_arm64.deb ...
Unpacking libx265-199:arm64 (3.5-2+b1) ...
Selecting previously unselected package libzvbi-common.
Preparing to unpack .../21-libzvbi-common_0.2.41-1_all.deb ...
Unpacking libzvbi-common (0.2.41-1) ...
Selecting previously unselected package libzvbi0:arm64.
Preparing to unpack .../22-libzvbi0_0.2.41-1_arm64.deb ...
Unpacking libzvbi0:arm64 (0.2.41-1) ...
Selecting previously unselected package ocl-icd-libopencl1:arm64.
Preparing to unpack .../23-ocl-icd-libopencl1_2.3.1-1_arm64.deb ...
Unpacking ocl-icd-libopencl1:arm64 (2.3.1-1) ...
Selecting previously unselected package jellyfin-ffmpeg7.
Preparing to unpack .../24-jellyfin-ffmpeg7_7.1.2-2-bookworm_arm64.deb ...
Unpacking jellyfin-ffmpeg7 (7.1.2-2-bookworm) ...
Selecting previously unselected package jellyfin.
Preparing to unpack .../25-jellyfin_10.10.7+deb12_all.deb ...
Unpacking jellyfin (10.10.7+deb12) ...
Setting up libudfread0:arm64 (1.1.2-1) ...
Setting up jellyfin-web (10.10.7+deb12) ...
Setting up libicu72:arm64 (72.1-3+deb12u1) ...
Setting up libmpg123-0:arm64 (1.31.2-1+deb12u1) ...
Setting up libogg0:arm64 (1.3.5-3) ...
Setting up libx264-164:arm64 (2:0.164.3095+gitbaee400-3) ...
Setting up jellyfin-server (10.10.7+deb12) ...
Created symlink /etc/systemd/system/multi-user.target.wants/jellyfin.service → /lib/systemd/system/jellyfin.service.
Setting up libopus0:arm64 (1.3.1-3) ...
Setting up libvorbis0a:arm64 (1.3.7-1) ...
Setting up libwebp7:arm64 (1.2.4-0.2+deb12u1) ...
Setting up libnuma1:arm64 (2.0.16-1) ...
Setting up ocl-icd-libopencl1:arm64 (2.3.1-1) ...
Setting up libtheora0:arm64 (1.1.1+dfsg.1-16.1+deb12u1) ...
Setting up libvpx7:arm64 (1.12.0-1+deb12u4) ...
Setting up libwebpmux3:arm64 (1.2.4-0.2+deb12u1) ...
Setting up libxml2:arm64 (2.9.14+dfsg-1.3~deb12u4) ...
Setting up libzvbi-common (0.2.41-1) ...
Setting up libmp3lame0:arm64 (3.100-6) ...
Setting up libvorbisenc2:arm64 (1.3.7-1) ...
Setting up libzvbi0:arm64 (0.2.41-1) ...
Setting up libvorbisfile3:arm64 (1.3.7-1) ...
Setting up libx265-199:arm64 (3.5-2+b1) ...
Setting up libbluray2:arm64 (1:1.3.4-1) ...
Setting up libopenmpt0:arm64 (0.6.9-1) ...
Setting up jellyfin-ffmpeg7 (7.1.2-2-bookworm) ...
Setting up jellyfin (10.10.7+deb12) ...
Processing triggers for man-db (2.11.2-2) ...
Processing triggers for libc-bin (2.36-9+deb12u13) ...

> Waiting 15 seconds for Jellyfin to fully start up.

-------------------------------------------------------------------------------
● jellyfin.service - Jellyfin Media Server
     Loaded: loaded (/lib/systemd/system/jellyfin.service; enabled; preset: enabled)
    Drop-In: /etc/systemd/system/jellyfin.service.d
             └─jellyfin.service.conf
     Active: active (running) since Thu 2025-10-09 21:35:13 JST; 26s ago
   Main PID: 3951 (jellyfin)
      Tasks: 35 (limit: 982)
     Memory: 134.9M
        CPU: 34.836s
     CGroup: /system.slice/jellyfin.service
             ├─3951 /usr/bin/jellyfin --webdir=/usr/share/jellyfin/web --ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg
             └─4043 /usr/lib/jellyfin-ffmpeg/ffmpeg -hide_banner -f lavfi -i nullsrc=s=1x1:d=10000 -f null -

Oct 09 21:35:36 orangepizero3 jellyfin[3951]: [21:35:36] [WRN] Filter: overlay_vaapi with option Action t…ilable
Oct 09 21:35:36 orangepizero3 mpp[4039]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:36 orangepizero3 jellyfin[3951]: [21:35:36] [WRN] Filter: overlay_vulkan with option Action …ilable
Oct 09 21:35:36 orangepizero3 mpp[4040]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:36 orangepizero3 mpp[4041]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:36 orangepizero3 jellyfin[3951]: [21:35:36] [INF] Available hwaccel types: ["cuda", "drm", "…kmpp"]
Oct 09 21:35:36 orangepizero3 mpp[4042]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:37 orangepizero3 mpp[4043]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:38 orangepizero3 jellyfin[3951]: [21:35:38] [INF] Clean Transcode Directory Completed after …econds
Oct 09 21:35:38 orangepizero3 jellyfin[3951]: [21:35:38] [INF] Clean up collections and playlists Complet…econds
Hint: Some lines were ellipsized, use -l to show in full.
-------------------------------------------------------------------------------

You should see the service as 'active (running)' above. If not, use https://jellyfin.org/contact to find us for troubleshooting.

You can access your new instance now at http://192.168.11.64:8096 in your web browser to finish setting up Jellyfin.

Thank you for installing Jellyfin, and happy watching!

インストールには少し時間がかかりますが、必要なパッケージの導入からサービス登録・起動まで自動で行われます。本当にコマンド1行の実行で完了しました。
表示される内容の内、必ず確認しておくべきものは黄色にしています。 実行結果の最後にブラウザでアクセスするためのURLが表示されるのでそれをコピペでブラウザを開きます。192.168.11.64:8096は「がとらぼ」のLAN環境での例なのでこのままコピーしないでください。

Jellyfinの設定

Jellyfinの設定はWebブラウザから行います。
ブラウザで http://JellyfinのホストIPアドレス:8096 を開きます。初期設定時だけでなく、今後アクセスする際も常にポート「8096」を指定する必要がある点に注意してください。

Jellyfinで作るメディアサーバ 1
初回アクセス時には初期設定ウィザードが表示されます。このウィザードで行う設定は、後からいつでも変更可能です。 最初に表示されるのは言語選択画面ですが、ブラウザの言語設定により自動的に日本語表示になっているため、ここでは確認程度の選択なのかもしれません。選択欄の初期値は英語なので「日本語」を選択し、「次へ」をクリックします。

Jellyfinで作るメディアサーバ 2
続いて、最初のユーザー登録を行います。このユーザーが管理者となります。初期値は「jellyfin」ですが、任意のユーザー名に変更可能です。パスワードを2回入力し、「次へ」をクリックします。

Jellyfinで作るメディアサーバ 3
メディアライブラリ(動画や音楽ファイルの保存場所)を1つ以上登録します。SSHなどでホストにアクセスし、USBメモリ上のディレクトリを作成してから、そのディレクトリを選択します。

Jellyfinで作るメディアサーバ 4
メディアライブラリの追加・設定画面です。Jellyfinではコンテンツタイプの指定が非常に重要です。 「音楽」を選ぶ場合は、公式のディレクトリ構成と命名規則に従う必要があります。これまで利用していたメディアサーバでは求められなかったルールなので、最初は少し戸惑います。
なお、コンテンツタイプには「映画」「(TV)番組」「ブック」(電子書籍・オーディオブック)などもあり、それぞれ独自の命名規則があります。
「がとらぼ」の中の人はこの規則が少々面倒に感じたため、命名規則が不要な「ミュージックビデオ」にするか、あるいはメタデータ取得を気にせず「音楽」として設定する予定です。

Jellyfinで作るメディアサーバ 5
Jellyfinでは複数のライブラリを作成できます。異なるコンテンツタイプごとに分けたり、同じタイプでも複数に分割することも可能です。ライブラリが大きくなりすぎるとスキャンや更新に時間がかかるため、分割管理できるのは利点です。

Jellyfinで作るメディアサーバ 6
ライブラリごとにメタデータの言語を設定できます。日本語文字コード(S-JIS, EUC, UTF-8)の扱いが完全に自動かどうかは不明ですが、日本語メタデータの扱いにも一定の対応があるようです。

Jellyfinで作るメディアサーバ 7
リモートアクセスの設定は特に変更せず、「次へ」をクリックします。

Jellyfinで作るメディアサーバ 8
これで初期設定は完了です。「完了」をクリックします。

Jellyfinで作るメディアサーバ 9
ログイン画面が表示されます。
先ほど登録したアカウント情報でサインインします。家庭内LANのみで使用する場合は「ログイン状態を保存する」にチェックを入れておくと便利です。 ただし、ネットワークメディアプレーヤー経由で利用する場合は、頻繁にログインする機会はないため、どちらでも問題ありません。

Jellyfinで作るメディアサーバ 10
ダッシュボードのメイン画面です。「マイメディア」に登録済みのライブラリが表示され、「・・に最近追加された」には新しく登録されたフォルダが並びます。ただし、この欄の表示期間や件数の仕様は不明です。この時点で20フォルダ以上登録(ライブラリのスキャンも)していても、3つしか表示されませんでした。(後に15以上表示されました)
画面左上のハンバーガーメニュー「」をクリックするとメニューが開きます。

Jellyfinで作るメディアサーバ 11
メニュー表示時の画面です。主に利用するのは「ダッシュボード」と「設定」です。初期設定で思い通りにいかなかった項目の修正・追加・削除はこの2つで行います。特に「ダッシュボード」はメディアサーバの管理操作で使用する重要な項目です。(次)

Jellyfinで作るメディアサーバ 12
ダッシュボードでは、ライブラリの追加・削除後にスキャンを実行する際によく利用します。
個別ライブラリの更新は、「ダッシュボード」内の「ライブラリ」メニューから対象を選択して行います。
また意外なことに、「プラグイン」は「設定」ではなくこの「ダッシュボード」にあります。導入済みプラグインの管理は「プラグイン」から、新規追加は「カタログ」から行います。機能拡張系のプラグインがもう少し増えるとより魅力的になるでしょう。

Jellyfinで作るメディアサーバ 13
ここからは設定画面ではなく、再生用のライブラリ表示画面です。つまり、WebブラウザでJellyfinをメディアプレーヤーとして利用する際の画面です。動作確認目的として使う場面が多いでしょう。
以下は、コンテンツタイプ「ミュージックビデオ」のライブラリを表示した例です。フォルダ内の動画から自動生成されたサムネイルが表示され、それぞれをクリックすると中身が表示されます。(次)

Jellyfinで作るメディアサーバ 14
選択したフォルダ内にある楽曲やビデオファイルの一覧が表示されます。

Jellyfinで作るメディアサーバ 15
「ミュージックビデオ」の場合、ファイルを選択すると再生画面に切り替わります。(次)
「音楽」の場合は、フォルダを開いた時点でこの画面に似た楽曲リストが表示されます。

Jellyfinで作るメディアサーバ 16
個別のビデオ・楽曲の再生画面です。あくまでJellyfinのWeb UI上での再生であり、音声や映像が出力されるのはブラウザを操作しているPCやモバイルデバイス側です。
ネットワークメディアプレーヤーで再生する場合、このWeb画面の操作とネットワーク・メディアプレーヤーの動作は連動しないので注意が必要です。

Plex Media Serverに比べてやや癖はありますが、クローズド環境で使える高機能なメディアサーバがきわめて簡単に導入できました。Web UIの見た目は地味ですが、これはあくまで管理操作用なので大きな問題ではありません。
次回以降は、このメディアサーバと組み合わせて使用する新しいネットワークメディアプレーヤーを紹介する予定です。
実際には、先にネットワークメディアプレーヤーをVolumioから別のものに変更したことがきっかけで新しいメディアサーバ(今回のJellyfin)を導入したため、順序としては逆になります。 また、Jellyfin導入前にNAS+DLNAサーバの「openmediavault」も試したので、機会があればそちらの紹介も行いたいと思います。(ただしomvの記事は掲載しないかもしれません)

2025年11月16日追記:
Jellyfin 10.11.*からサービス起動時に特定のディレクトリの容量チェックが入るようになり、容量が想定に満たない場合はサービスが起動しなくなっています。/tmp (シングルボードコンピュータ用Debianはメモリディスクであることが多いです)と、 /var/log/jellyfin (シングルボードコンピュータ用Debianでは /var/log がzramのようなメモリディスク等で低容量であることが多いです)と /var/lib/jellyfin (これはあまり問題にならないかと思われます)
/tmp はtmpfsで割り当てられているでしょうから容量を4GB以上に変更します。 /var/log は容量が少なくても、 /var/log/jellyfin は容量の多いファイルシステムのディレクトリにシンボリックリンクで対応可能です。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振

今年の夏、ラゲッジルームの床板の下に遮音シートを敷きました。作業自体は非常に簡単でしたが、その効果は想像以上で、車内が驚くほど静かになりました。さらに後日、スペアタイヤを格納するエリアの薄い鉄板部分に制振材を貼り付け、鉄板の振動によるノイズを防ぐようにしました。ただし、遮音シートとの重複部分であるためか効果を体感できるほどではありませんでした。2つの施工によりラゲッジエリアの床下からのノイズは減少したものの、周囲からの音は依然として気になるレベルでした。特に、走行中に発生するロードノイズや原因不明のバタつき音は、リアのタイヤハウス、リアクォーターパネル、そしてリアハッチから発生しているように思われます。(今回はリア部分の施工について述べます)

今回も前回と同じ制振材を使用しました。ブチルゴム層とアルミシート層で構成された製品で、サイズは46cm×5mのロール状、厚さ2.3mm、重量は10kgあります。アルミシート面には塗装と凹凸模様が施されており、圧着具合を視覚的に確認しやすい仕様です。制振効果を最大化するには、鉄板にしっかりと密着させる必要があり、模様が潰れる程度に強く圧着します。ただし、模様が潰れることで施工後の見た目は悪くなるため、美観を重視する場合は平滑な表面の製品を選ぶのも良いでしょう。ブチルゴム面は粘着面でもあり、剥離紙を剥がして鉄板に直接貼り付けます。剥離紙は破れやすく、手がゴム成分で汚れることがあるため注意が必要です。また、アルミ層は薄く硬いため、シートを切り出す際は軍手などを着用して手を保護しましょう。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 1
この写真はラゲッジエリアの車内側からリアハッチを撮影したものです。リアハッチの内張りはすでに外してあります。この内張りは、リアハッチを開けることなく、下部に指をかけて車内前方に引っ張るだけで簡単に外すことができます。この車の場合、リアハッチ内側には制振材も吸音材も一切使用されておらず、軽量化のためかインナーパネルに大きな開口部が設けられています。そのため、外部との間は薄いアウターパネルと樹脂の内張りのみで仕切られています。当然ながら、外部の音が車内に伝わりやすく、走行中は薄い外板がシンバルのように震えてノイズを発生させます。この構造が、同クラスの低価格車よりも騒音が大きい原因の一つと言えるでしょう。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 2
リアハッチは上方向に跳ね上げるタイプのため、サイドドアのように重い制振材を多量に貼ることはできません。制振材を貼りすぎると、ダンパーで支えきれずにハッチが下がってしまうからです。そのため、凹凸の多い部分や、叩いても音が響かない場所には制振材を貼らず、主にアウターパネルの響きやすい部分だけに施工しました。インナーパネルには、叩いて反響した中央下部の2箇所のみに制振材を貼っています。
写真には写していませんが、アウターパネルとインナーパネルの間には1cm厚の吸音材の「シンサレート」をロール状にして挟み込みました。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 3
リアハッチの内張り裏側には、重量増加を防ぐため、最低限の制振材のみを間隔を空けて貼りました。軽く叩いてみて、わずかに響かない程度のバランスで施工しています。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 15
リアハッチの内部にシンサレートを使ったら残りが無くなってしまったので内張りの裏側には同じく1cm厚のニードルフェルトを貼りました。内張りには3箇所の突起があり、これがリアハッチのフレームと接触するようになっていました。接触部分には布のようなクッション材が貼ってあり、これにより走行中に振動してカタカタ鳴るのを防ぐようになっていました。そこで、その突起部分はニードルフェルトに穴を開けて通しました。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 16
リアハッチの内張りを固定する白いクリップは主に上段・中段に取り付けられていたものが劣化して爪が砕けていました。土台面の皿も砕けて欠けているものがありました。そこで、以前にAliExpressで購入して放置していたトヨタ用クリップセットに入っていた同型クリップと交換しました。15年落ちほどの車になると光が当たらない部分のクリップであっても樹脂が黄色っぽく変色して脆く砕けるようです。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 4
内張りをリアハッチに再装着しました。位置を合わせて軽く叩くと、クリップがパチンと嵌まり固定されます。リアハッチを開ける必要はありません。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 5
リアのタイヤハウス部分の内張りを外すには、まずラゲッジルームの床板を外します。床板は置いてあるだけなので、持ち上げるだけで簡単に外せます。黒いフックが10mmの六角ナットで床に固定されているため、左右に2つずつ外します。このフックの片側はリア座面下のカバーを留めているため、それも同時に外します。写真で白く見える汚れは、結露した水が乾いて残ったカルシウム分などと思われます。濡れた雑巾で拭けば簡単に除去できます。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 6
タイヤハウスの内張りを外す際は、リアシートベルトの固定ネジが邪魔になるため、これを外します。固定には14mmの六角ネジとクリップが使われています。写真右下に見えるリアシート座面の固定金具は外す必要はありません。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 7
タイヤハウスの内張りは、下部を内側に引っ張ることで剥がすことができます。この内張りパネルは上部に爪があり別の内張りパネルに引っ掛けてあるため、上部から引っ張ってはいけません。また、この作業の前に、リアハッチ開口部下側中央の樹脂製カバー(敷居部分)を外しておく必要があります。このカバーはリアハッチを開けなければ取り外せません。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 8
内張りを裏返すと、フェルト製の吸音材が貼られていました。この吸音材の効果は限定的ですが、このように静音対策がほとんど施されていない車種でもメーカーが吸音材を配置しているということは、それだけノイズの発生が多い部分であることを意味します。つまり、タイヤハウスの車内側に制振材を貼ることで、高いノイズ抑制効果が期待できます。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 9
前回、制振材が不足して中途半端に終わっていたスペアタイヤ収納部の横からタイヤハウス(車内側)にかけて、広く制振材を貼りました。フックのネジ穴などの機能部分は避けています。これで鉄板を叩いても響く箇所はなくなりました。写真には写っていませんが、タイヤハウス後部の開口部からリアクォーターパネル(アウターパネル)の内側にも、手の届く範囲で制振材を貼り付けました。写真は左側タイヤハウス部分で、この車ではガソリン給油口があるため、施工範囲は狭くなっています。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 10
右側タイヤハウス車内側にも制振材を貼りました。左右で施工方法は少し異なります。写真の赤い矢印部分、タイヤハウス後部側にはリアクォーターパネルへ続く開口があり、右側には給油口がないため、奥まで広く制振材を貼ることができました。これによりリアクォーターパネルの振動も抑制できると考えられます。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 11
ラゲッジエリアの床部分を撮影しています。ここは通常、リアシート座面の下に位置する場所です。この車ではリアシートを前方に押し出し、後席足元のスペースに倒し込むことでラゲッジエリアを拡大できます。先ほど外したフックと、フックのない10mm六角ナットを左右2つずつ外すことで、床カバーを取り外すことができます。カバーを外すと燃料ポンプのフタが見えます。このフタの周囲の鉄板は叩くと硬く響くため、制振材は無しで遮音シートだけを敷くことにしました。(次へ)

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 12
この部分にはリアシート固定用のループ金具が2箇所出ているため、その部分だけ穴を開けて遮音シートを敷きます。遮音シートは、スペアタイヤ側(後側)とフロント側の両方で数センチの余裕を持たせてカットしました。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 13
遮音シートを敷いた上に床カバーを取り付けました。遮音シートがはみ出していますが、これは想定通りです。はみ出た部分が隣の遮音シートと重なることで、気密性と遮音性を高める役割を果たします。スペアタイヤ側は、床板(スペアタイヤと工具入れのフタ)を開けることがあるため、ガムテープなどで遮音シートを張り合わせてつなぐことはできません。

古い車の近代化改修 リアハッチとタイヤハウス車内側の制振 14
写真の中央部分が燃料ポンプの位置です。後席右側はすでに通常の状態に戻しています。左側(写真下半分)はリアシートを倒してラゲッジスペースを拡大した状態です。スペアタイヤ上の床板を戻したため、遮音シートのはみ出しは隠れています。前方に延びた遮音シートの一部は写真に写っていますが、左リアシートを戻すと座面下に隠れます。今後、前後シートを取り外してフロアカーペットを剥がす際には、この部分にさらに遮音シートを重ねて接着する予定です。

今回は左右のリアのドアにも制振材を施工しました。ただし、フロントドアのように全面施工はせず、アウターパネルを重点的に、インナーパネルと内張り(ドアトリム)には必要最小限のみ貼っています。今回は制振材でインナーパネルのサービスホールも塞ぐこともしていません。サービスホールは透明ビニールシートで塞ぎ、その上から吸音材のシンサレートを重ねました。なお、リアのドアには左右ともフェルト吸音材は一切貼られていませんでした。
リアハッチ、左右のタイヤハウス、リアドアに制振材を施工しましたが、今回は節約施工だったため5mロールのうち数十cmが余りました。残りの制振材でバルクヘッド部分の施工も可能かもしれません。

今回の施工効果として、走行中に車後部から聞こえていたバタつく音や、やや高めの「コーー」という音がほぼ消えました。ただし、「ゴー」という低音のロードノイズは依然として残っています。この車にはリアタイヤハウスカバーがなく、タイヤハウスのタイヤ側の車体に直接ザラザラとしたコーティングが施されているため、「ノックスドール オートプラストーン」のような厚いゴム層を追加施工すれば軽減できる可能性があります。ただし、車軸から伝わるノイズであれば効果は限定的でしょう。
今回の静音効果はかなり大きく、エンジン始動直後のアイドリングから明確に違いが感じられ、感動するほどでした。しかし、走行を始めて5分もするとその静けさに慣れてしまい、感動は薄れます。それでも、音楽が聞き取りやすくなるなど、ふとした折に改めて効果を実感することがあります。
リアドア、リアハッチ、タイヤハウス、燃料タンク上(床下)を同時に施工したため、どの箇所の効果が最も大きいかは判断できません。リア側からのノイズは確実に減少しましたが、その分、前方のエンジン音がより目立つようになりました。さらに、前輪側のロードノイズも大きいため、今後は前タイヤハウスとフロントフェンダー内側(フェンダーライナー)にも静音処理を行う予定です。また、バルクヘッドやボンネット裏にも何らかの対策を施したいと考えています。
元々この車は静音処理がほとんど施されていないため、効果を実感しやすく、やればやるほど静かになります。そのため、静音施工が楽しくなって止まらない――まさに“静音沼”にハマってしまいました。

関連記事:
Up