I do things a bit more custom on my server than most folks.
I was getting this error when running sudo systemctl status jellyfin.service
MediaBrowser.Common.FfmpegException: Failed to find valid ffmpeg
The status also showed it was trying to start with its own ffmpeg install.
/usr/bin/jellyfin --webdir=/usr/share/jellyfin/web --ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg
Attempting to run this ffmpeg directly /usr/lib/jellyfin-ffmpeg/ffmpeg would throw this error.
/usr/lib/jellyfin-ffmpeg/ffmpeg: symbol lookup error: /lib/x86_64-linux-gnu/libopenmpt.so.0: undefined symbol: mpg123_param2
Searching that error as "jellyfin" symbol lookup error: /lib/x86_64-linux-gnu/libopenmpt.so.0: undefined symbol: mpg123_param2 returns one item with no useful solution.
If you've already installed and can't start, purge it.
sudo apt purge jellyfin* -y
Currently Jellyfin 11.x has some bug where it takes forever to load large libraries, probably due to caching.
This installs server and web and sets them to hold instead of upgrading to 11.x.
sudo apt install jellyfin-server=10.10.7+ubu2204 jellyfin-web=10.10.7+ubu2204
sudo apt-mark hold jellyfin-server jellyfin-web
You can install ffmpeg with apt or you can build your own from source, I always build my own for reasons. Building it is outside of the scope of this gist.
sudo apt install ffmpeg
Find your ffmpeg install.
locate ffmpeg
which ffmpeg
After updating, Jellyfin overwrote the service deleting my changes, because of course it did.
The error log started complaining that it couldn't find /usr/lib/jellyfin-ffmpeg/ffmpeg and /usr/lib/jellyfin-ffmpeg/ffprobe.
I build my own ffmpg and put it in /opt/video/bin you will have to update this to where your ffmpeg is.
The simple solution was to make this directory and symlink those files.
sudo mkdir /usr/lib/jellyfin-ffmpeg/
sudo ln -s /opt/video/bin/ffmpeg /usr/lib/jellyfin-ffmpeg/ffmpeg
sudo ln -s /opt/video/bin/ffprobe /usr/lib/jellyfin-ffmpeg/ffprobe
sudo systemctl restart jellyfin.service
sudo systemctl status jellyfin.service
I have a large ZFS datastore in a /dvr path, so I don't want jellyfin's cache or anything in my root path.
sudo systemctl stop jellyfin.service
cd /var/lib
sudo mv jellyfin /dvr/
sudo ln -s /dvr/jellyfin jellyfin
cd /var/cache
sudo mv jellyfin/ /dvr/jellyfin/cache/
sudo ln -s /dvr/jellyfin/cache/ jellyfin
sudo chown -R jellyfin:jellyfin /dvr/jellyfin/
sudo chmod g+s /dvr/jellyfin
sudo systemctl restart jellyfin.service
sudo systemctl status jellyfin.service
This should return something like this.
● jellyfin.service - Jellyfin Media Server
Loaded: loaded (/lib/systemd/system/jellyfin.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/jellyfin.service.d
└─jellyfin.service.conf
Active: active (running) since Fri 2025-05-02 00:07:03 EDT; 6s ago
Main PID: 4124592 (jellyfin)
Tasks: 18 (limit: 309281)
Memory: 424.0M
CPU: 4.293s
CGroup: /system.slice/jellyfin.service
└─4124592 /usr/bin/jellyfin --webdir=/usr/share/jellyfin/web --ffmpeg=/opt/video/bin/ffmpeg
Navigate to: http://localhost:8096
Enjoy!