Jellyfin 是開源、免費的影音串流伺服器,可以想成自己架的 Netflix:影片放在家裡的主機,用 Android TV、手機 App 或瀏覽器看,會自動抓海報和簡介。
這篇記錄我在舊電腦上用 Docker 架 Jellyfin,並讓主機裡的 GTX 1650 負責轉檔。
整個過程都是遠端做的,版本以 2026 年 10 月為準。前情見〈不買 NAS、不重灌:人不在家,把舊電腦升級成家庭影音中心〉。
為什麼需要硬體轉檔
網路慢,或設備不支援某種影片格式時,Jellyfin 要即時把影片轉成較小、較通用的格式,這叫轉檔(轉碼)。
交給 CPU 做會很吃力,交給顯卡裡的硬體編碼器就輕鬆很多。
我的 i5-9400F 沒有內建顯示,用不了 Intel 的 Quick Sync。好在主機裡本來就有一張 GTX 1650,它的硬體編碼器(NVENC)可以:
- 硬體解碼 H.264、HEVC(含 10-bit)、VP9
- 即時編碼成 H.264、HEVC
- 不支援 AV1
這張卡的編碼器是比較舊的一代,畫質比新卡略差,但串流完全夠用。
第一步:安裝 NVIDIA 驅動
先確認 Secure Boot 有沒有開。開著的話,裝完驅動重開機時要在主機螢幕前確認一次,遠端就做不完。我的結果是關閉,所以全程遠端:
mokutil --sb-state
如果先跑 nvidia-smi,系統會說找不到指令、建議你裝 nvidia-utils-xxx。這是陷阱:那只是查詢工具,不是驅動,單裝它沒用。要先查可用的驅動版本,這行也會顯示你的顯卡型號:
ubuntu-drivers devices
清單裡有十幾個版本,我選的是 nvidia-driver-595-server-open:
- 595:和系統推薦的同一代,在這版 Ubuntu 上測試得最完整
- server:伺服器長期維護版,更新比較保守,適合要穩定跑的機器
- open:NVIDIA 開源版核心模組,這一代顯卡起官方建議用它
sudo apt install nvidia-driver-595-server-open
sudo reboot
# 重開後確認
nvidia-smi
重開機後,n8n 也因為 Docker 的自動重啟設定自己恢復。裝好驅動後顯卡閒置會進入 P8 省電狀態,只有約 7W。

第二步:讓 Docker 用得到顯卡
Docker 容器預設看不到顯卡,要另外裝 NVIDIA Container Toolkit。照 NVIDIA 官方安裝說明加入官方 apt 套件庫並安裝,再設定 Docker:
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
# 開一個測試容器,裡面應該看得到顯卡
sudo docker run --rm --gpus all ubuntu nvidia-smi
sudo docker image rm ubuntu
第三步:用 Docker 架 Jellyfin
我把 Jellyfin 放在 /opt/jellyfin,不放個人家目錄。Ubuntu 預設每個人的家目錄只有本人能進,放 /opt 才能讓兩個帳號都用 sudo 管理。compose.yaml 的重點是:
network_mode: host:不用 Docker 的 port 對應,讓 Ubuntu 的防火牆管得到,8096 port 只開給家裡和 Tailscaleruntime: nvidia,加上deploy.resources.reservations.devices把顯卡交給容器- 環境變數
NVIDIA_DRIVER_CAPABILITIES=all - 影片資料夾掛到容器裡的
/media
cd /opt/jellyfin
sudo docker compose up -d
第四步:開啟硬體轉碼
用瀏覽器打開 Jellyfin,跟著設定精靈建立管理員帳號。接著到「控制台 → 播放 → 轉碼」:
- 硬體加速:NVIDIA NVENC
- 硬體解碼勾選:H264、HEVC、MPEG2、VC1、VP8、VP9、HEVC 10bit、VP9 10bit。AV1 不要勾,GTX 1650 不支援
- 啟用硬體編碼、允許 HEVC 編碼、啟用色調映射
我在手機上找不到這個頁面。手機版的控制台有兩層選單,要在控制台裡再按一次 ☰ 才會展開。最快的方法是直接在網址後面加 /web/#/dashboard/playback/transcoding。

第五步:建立媒體庫
影片資料夾和檔名用「片名 (年份)」的格式,例如 Movie (2020)/Movie (2020).mkv,Jellyfin 才抓得到海報和簡介。
我建了「電影」和「節目」兩個媒體庫。放進去的影片要是自己合法取得的。
我放了測試影片之後,Jellyfin 卻是空的,原因是媒體庫還沒建立。排查時一段一段縮小範圍:檔案在不在、容器看不看得到,都確認沒問題,問題就在 Jellyfin 的設定。
影片跟 n8n 的備份放在同一顆硬碟,不要把硬碟塞滿,否則每天的備份會失敗。
沒有影片?自己產生一段測試片
本來想下載開源動畫 Big Buck Bunny 當測試片,結果官方網址改版出現 404,還留下一個 0 位元組的空檔(下載失敗時也會產生,記得刪掉)。
後來改用 Jellyfin 內建的 ffmpeg 自己產生:2 分鐘的 1080p 彩色測試畫面加嗶聲,116MB,不用網路、不怕來源失效:
sudo -u 你的使用者名稱 mkdir -p "/mnt/backup/media/movies/Test Pattern (2026)"
sudo docker exec -u 1000 jellyfin /usr/lib/jellyfin-ffmpeg/ffmpeg \
-f lavfi -i testsrc2=size=1920x1080:rate=30 -f lavfi -i sine=frequency=440 \
-t 120 -c:v libx264 -preset veryfast -b:v 8M -c:a aac -shortest \
"/media/movies/Test Pattern (2026)/Test Pattern (2026).mp4"
怎麼證明真的是顯卡在轉檔
在手機上把測試片設成低畫質播放(例如 720p),強迫 Jellyfin 轉檔。
我一開始在播放時跑 nvidia-smi,完全看不到任何程序,以為顯卡沒在工作。其實是 2 分鐘的短片顯卡幾秒就轉完,程序早就結束了。
改看 Jellyfin 的轉檔紀錄。又踩一個坑:紀錄裡出現 libx264(CPU 轉檔),但那只是 ffmpeg 開頭印出的功能清單。精準的查法是只抓實際使用的編碼器那一行:
sudo grep -ohE -- '-codec:v:0 [a-z0-9_]+' /opt/jellyfin/config/log/FFmpeg.Transcode-*.log
出現 hevc_nvenc 或 h264_nvenc 是顯卡,libx264 是 CPU。我三次測試都是 hevc_nvenc。

在 Android TV 上看
電視從 Google Play 安裝 Jellyfin App,伺服器位址輸入 http://主機IP:8096。我家是雙層 NAT,電視的「自動搜尋伺服器」找不到主機,手動輸入 IP 就好。
這是舊電腦家用伺服器系列的第 7 篇。
上一篇:〈Tailscale 教學:出門也能安全連回家,和 Cloudflare 怎麼分工〉;
下一篇〈File Browser+Samba:手機和電腦都能用的私人雲端硬碟〉已經上架,寫的是用 File Browser 和 Samba 讓手機和電腦都能存取主機上的檔案。






