- Создай docker-compose.yml с образом jellyfin/jellyfin
- Пропиши пути к медиатеке и папке с конфигом
- Запусти контейнер: docker compose up -d
- Открой браузер: http://IP:8096 — пройди мастер настройки
Всё. Дальше — детали, без которых оно либо не заработает, либо заработает не так.
Зачем Jellyfin, если есть Plex и Emby
Plex требует аккаунт. Emby в бесплатной версии срезает функции. Jellyfin — полностью открытый, без регистрации, без подписки, без телеметрии. Установил, настроил — работает. Никто не знает что у тебя на диске, и никто не отберёт функциональность если ты не платишь.
Установка Jellyfin занимает от 10 минут. На выходе получаешь медиасервер который стримит фильмы, сериалы и музыку на любое устройство в сети — и за её пределами, если настроишь внешний доступ.
Это вторая статья серии про OpenMediaVault homelab. В первой части разобрали 20 приложений для OMV. Здесь — Jellyfin от установки до продакшн-конфига с HTTPS, плагинами и нормальной структурой медиатеки.
Что будет в статье:
- Установка через Docker Compose — самый правильный способ
- Структура папок которая не сломает метаданные
- Настройка библиотек, сканирование, обложки
- HTTPS через Nginx Proxy Manager или Caddy
- Полезные плагины: Intro Skipper, Open Subtitles, Playback Reporting
- Клиенты для телевизора, телефона и браузера
- Troubleshooting — 8 типичных проблем с решениями
Потребуется: Linux-сервер или NAS с Docker, ~30 минут, папка с медиаконтентом. Железо — в таблице ниже.
Системные требования
| Параметр | Минимум | Комфортно | Для транскодинга 4K |
|---|---|---|---|
| CPU | 2 ядра, x86_64 | 4 ядра | 6+ ядер или Intel QSV/NVENC |
| RAM | 2 ГБ | 4 ГБ | 8 ГБ+ |
| Диск (система) | 20 ГБ SSD | 40 ГБ SSD | 40 ГБ SSD |
| ОС | Debian 11+, Ubuntu 22.04+ | Debian 12 | Debian 12 + GPU драйверы |
| Docker | 24.x+ | 25.x+ | 25.x+ с nvidia-container-toolkit |
| Сеть | 100 Мбит (для 1080p direct play) | Гигабит LAN | Гигабит LAN |
На момент публикации актуальна версия Jellyfin 10.10.x. Перед установкой проверь свежие релизы на github.com/jellyfin/jellyfin/releases.
Важный момент про транскодинг. Если клиент воспроизводит файл напрямую без перекодирования — это Direct Play, нагрузки почти нет. Если нужно конвертировать на лету — Transcoding, и тут без нормального железа будут тормоза. Современные смарт-телевизоры и приставки умеют H.264 и H.265 напрямую. Старые и некоторые веб-браузеры — нет.
Структура папок до установки
Сначала разберись с папками — потом всё остальное. Jellyfin определяет тип контента по структуре директорий. Если положить сериалы не туда — метаданные не подтянутся, а разбираться потом неприятно.
Правильная структура:
/opt/jellyfin/
├── config/ # конфиг Jellyfin - маппится в контейнер
├── cache/ # кеш метаданных и обложек
└── data/ # БД, журналы, временные файлы транскодинга
/mnt/media/ # или где у тебя лежат файлы
├── movies/ # фильмы
│ ├── Inception (2010)/
│ │ └── Inception (2010).mkv
│ └── The Matrix (1999)/
│ └── The Matrix (1999).mkv
├── tvshows/ # сериалы
│ ├── Breaking Bad/
│ │ ├── Season 01/
│ │ │ ├── Breaking Bad S01E01.mkv
│ │ │ └── Breaking Bad S01E02.mkv
│ │ └── Season 02/
│ └── Severance/
│ └── Season 01/
├── music/ # музыка
└── photos/ # фото
Запомни правило именования: Название (Год) для фильмов и SxxExx для серий. Jellyfin использует TMDb и TheTVDB для поиска метаданных — если имя файла не совпадает с базой, будут проблемы. Год в скобках критичен если фильм выходил несколько раз или есть ремейк.
Создай структуру:
mkdir -p /opt/jellyfin/{config,cache,data}
# Медиапапки - замени путь на свой
mkdir -p /mnt/media/{movies,tvshows,music,photos}
Установка Jellyfin через Docker Compose
Ставить через Docker Compose — правильный выбор. Конфиг в одном файле, легко обновлять, легко переносить. Нативная установка через deb-пакет тоже работает, но потом будешь вручную следить за обновлениями и зависимостями.
Создай файл конфигурации:
nano /opt/jellyfin/docker-compose.yml
Вставь содержимое:
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
network_mode: host
environment:
- JELLYFIN_PublishedServerUrl=http://192.168.1.100:8096 # замени на свой IP
volumes:
- /opt/jellyfin/config:/config
- /opt/jellyfin/cache:/cache
- /opt/jellyfin/data:/data
- /mnt/media:/media:ro
# Если есть Intel iGPU для аппаратного транскодинга:
# devices:
# - /dev/dri:/dev/dri
# group_add:
# - "109" # группа render, проверь: getent group render
Несколько пояснений по compose-файлу. Параметр network_mode: host даёт контейнеру прямой доступ к сети хоста. Это нужно для DLNA и автообнаружения в локальной сети — без этого смарт-телевизоры не найдут сервер автоматически. Медиапапка монтируется как :ro (read-only) — Jellyfin не должен ничего писать туда, только читать. restart: unless-stopped — контейнер поднимется после перезагрузки, если ты его сам не остановил.
Запусти контейнер:
cd /opt/jellyfin
docker compose up -d
Проверь что запустился:
docker compose ps
docker compose logs --tail=50
В логах должна появиться строка вида Jellyfin version: 10.x.x и Startup complete. Если видишь ошибки доступа к файлам — проверь права на папки.
Первый запуск и мастер настройки
Открой браузер и иди по адресу http://IP-сервера:8096. Пойдёт мастер начальной настройки — он запускается только один раз.
Шаги мастера:
- Язык интерфейса — выбери русский, если хочешь. Jellyfin переведён прилично.
- Создание администратора — придумай имя и пароль. Не admin/admin, серьёзно.
- Настройка медиатеки — добавляй библиотеки здесь. Тип контента выбери правильно: фильмы / сериалы / музыка / фото. Путь — /media/movies (или что ты назвал в compose).
- Метаданные — выбери язык для метаданных. Русский для русских тайтлов, английский как запасной.
- Готово — сервер начнёт сканирование библиотек.
После завершения мастера — иди в Панель управления → Библиотеки и нажми «Сканировать все библиотеки». Первое сканирование может занять несколько минут для большой коллекции.
Настройка портов Jellyfin
По умолчанию Jellyfin слушает на двух портах. Если используешь network_mode: host — они открыты сразу. Если bridge — пропиши маппинг в compose.
| Порт | Протокол | Назначение | Нужен снаружи? |
|---|---|---|---|
| 8096 | TCP | Web UI и API (HTTP) | Через reverse proxy |
| 8920 | TCP | Web UI и API (HTTPS) | Опционально |
| 1900 | UDP | DLNA autodiscovery (SSDP) | Нет (только LAN) |
| 7359 | UDP | Jellyfin autodiscovery | Нет (только LAN) |
Для внешнего доступа открывай только 443 через reverse proxy. Напрямую 8096 наружу — нежелательно: нет HTTPS, нет ограничений по IP.
Если используешь UFW:
# Только для доступа из локальной сети (замени на свою подсеть)
ufw allow from 192.168.1.0/24 to any port 8096 proto tcp
ufw allow from 192.168.1.0/24 to any port 1900 proto udp
ufw allow from 192.168.1.0/24 to any port 7359 proto udp
ufw reload
Настройка HTTPS через Nginx Proxy Manager
Без HTTPS Jellyfin доступен по HTTP — это нормально для локальной сети. Но если хочешь заходить снаружи или через мобильное приложение вне дома — нужен HTTPS. Самый простой способ для homelab — Nginx Proxy Manager.
Если NPM у тебя уже стоит — добавь проксирование для Jellyfin. Если нет — добавь в тот же docker-compose.yml или в отдельный файл:
services:
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
container_name: npm
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "81:81" # веб-интерфейс NPM
volumes:
- /opt/npm/data:/data
- /opt/npm/letsencrypt:/etc/letsencrypt
После запуска NPM зайди на http://IP:81, дефолтные креды: admin@example.com / changeme. Смени их сразу.
Создай Proxy Host в NPM:
- Domain Names: jellyfin.твойдомен.ru
- Forward Hostname/IP: IP сервера (или jellyfin если в одной docker-сети)
- Forward Port: 8096
- Websockets Support: включи
- SSL Certificate: Request a new SSL Certificate (Let’s Encrypt)
После этого зайди в Jellyfin — Панель управления → Сеть → Публичный URL сервера Jellyfin — и вбей туда https://jellyfin.твойдомен.ru.
Альтернатива: Caddy как reverse proxy
Caddy проще в конфигурации — он сам получает и обновляет сертификаты без NPM. Создай Caddyfile:
jellyfin.твойдомен.ru {
reverse_proxy localhost:8096
}
Это всё. Caddy сам сходит в Let’s Encrypt, получит сертификат и настроит HTTPS. Без дополнительных действий.
Настройка метаданных и библиотек
Метаданные — это обложки, описания, рейтинги, актёры. Без них Jellyfin выглядит как файловый менеджер. По умолчанию он тянет данные с TMDb для фильмов и TheTVDB для сериалов. Если не заработало — скорее всего проблема в именовании файлов или регионе.
Зайди в Панель управления → Библиотеки → [выбери библиотеку] → Настроить метаданные.
Что важно настроить:
- Провайдеры метаданных — TMDb на первом месте для фильмов, TheTVDB для сериалов
- Язык метаданных — ru для русских названий, en как запасной
- Загружать обложки — включи все типы: Primary, Backdrop, Banner
- Периодическое обновление метаданных — раз в 30 дней достаточно
Если метаданные не подтянулись для конкретного фильма — кликни на него, нажми три точки, выбери «Обновить метаданные». Jellyfin откроет диалог поиска — можно вручную ввести правильное название или ID из TMDb.
# Принудительное обновление метаданных через API (если нужно массово)
curl -X POST "http://localhost:8096/Library/Refresh" \
-H "X-Emby-Token: ВАШ_API_КЛЮЧ"
API-ключ найдёшь в Панель управления → API-ключи → Создать.
Jellyfin сериалы не определяются: правильное именование
Самая частая проблема с сериалами — неправильное имя файла. Jellyfin строго следует соглашению Kodi/Emby:
# Правильно:
Название сериала/Season 01/Название сериала S01E01.mkv
# Тоже работает:
Название сериала/S01E01 - Название серии.mkv
# Не работает:
Название сериала/1x01.mkv
Название сериала/01-01.mkv
Название сериала/ep01.mkv
Если файлы уже лежат с неправильными именами — не паникуй. Есть два пути: переименовать через FileBot или вручную найти нужный сериал через «Изменить метаданные» в интерфейсе Jellyfin.
Плагины Jellyfin: что ставить
Jellyfin поддерживает плагины — расширения функциональности. Каталог доступен прямо в интерфейсе: Панель управления → Плагины → Каталог.
Вот что реально полезно из коробочного каталога:
| Плагин | Что делает | Обязателен? |
|---|---|---|
| Intro Skipper | Автоматически пропускает интро и концовки в сериалах | Да, если смотришь сериалы |
| Open Subtitles | Скачивает субтитры с opensubtitles.org | Да, если нужны субтитры |
| Playback Reporting | Статистика просмотров по пользователям | Нет (для семьи или ценителей) |
| Merge Versions | Объединяет дубли одного фильма в разных качествах | Нет (если есть дубли) |
| Skin Manager | Кастомные темы интерфейса | Нет |
Для установки Intro Skipper нужно немного больше настроек. Плагин анализирует аудиодорожки и находит повторяющиеся участки (типичный интро). После установки зайди в настройки плагина и запусти анализ библиотеки — это займёт время.
Клиенты Jellyfin: на чём смотреть
Клиент — это приложение которое подключается к серверу и воспроизводит контент. Сам сервер — только хранилище и стриминг. Jellyfin работает почти на всём.
| Платформа | Клиент | Где скачать | Качество |
|---|---|---|---|
| Android TV / Google TV | Jellyfin for Android TV | Google Play | Отличное |
| Android (телефон) | Jellyfin for Android | Google Play / F-Droid | Хорошее |
| iOS / iPadOS | Jellyfin Mobile | App Store | Хорошее |
| Windows | Jellyfin Media Player | GitHub Releases | Отличное |
| macOS | Jellyfin Media Player | GitHub Releases | Хорошее |
| Веб-браузер | Встроенный веб-клиент | http://IP:8096 | Зависит от браузера |
| Roku | Jellyfin for Roku | Roku Channel Store | Базовое |
| Kodi | Jellyfin for Kodi | kodi.jellyfin.org | Отличное |
| Samsung Smart TV | Только веб-браузер | Встроенный браузер | Среднее |
Лучший клиент для десктопа — Jellyfin Media Player на базе MPV. Он играет почти всё без транскодинга, поддерживает HDR и субтитры. Веб-клиент в Chrome/Firefox нормально тянет H.264, но H.265 и AV1 зависят от поддержки браузером.
Для телевизоров LG (webOS) и Samsung (Tizen) официальных клиентов нет — только встроенный браузер. Но если у тебя Android TV приставка — всё отлично, клиент есть и работает хорошо.
Аппаратный транскодинг: Intel QSV
Если сервер на Intel (Celeron N5105, N100, i3/i5 с iGPU) — включи аппаратный транскодинг. Это уменьшит нагрузку на CPU при конвертации видео в разы. 4K поток который убивает CPU транскодингом — на Intel QuickSync проходит с нагрузкой 15-20%.
Проверь что GPU виден в системе:
ls /dev/dri
# Должно быть: card0 renderD128
Узнай GID группы render:
getent group render
# Вывод: render:x:109:
# 109 - это GID, подставь его в compose
Обнови compose-файл — раскомментируй строки с devices и group_add:
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
network_mode: host
environment:
- JELLYFIN_PublishedServerUrl=http://192.168.1.100:8096
volumes:
- /opt/jellyfin/config:/config
- /opt/jellyfin/cache:/cache
- /opt/jellyfin/data:/data
- /mnt/media:/media:ro
devices:
- /dev/dri:/dev/dri
group_add:
- "109"
Перезапусти контейнер:
cd /opt/jellyfin
docker compose down && docker compose up -d
Теперь в Jellyfin — Панель управления → Воспроизведение → Транскодирование. В поле «Аппаратное ускорение» выбери «Intel QuickSync (QSV)». Включи все кодеки которые поддерживает твой процессор.
Автоматическое обновление Jellyfin
Ручное обновление — одна команда. Но лучше автоматизировать через Watchtower или cron.
Ручное обновление:
cd /opt/jellyfin
docker compose pull
docker compose up -d
# Проверь что новая версия запустилась
docker compose logs --tail=20
Через Watchtower — автообновление всех контейнеров ночью:
services:
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_SCHEDULE=0 0 3 * * * # 3:00 ночи
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_NOTIFICATIONS=email # опционально
Но учти: Watchtower обновит все контейнеры без предупреждения. Если это не то что хочешь — используй его только для Jellyfin, указав конкретный контейнер через label.
Резервное копирование
Что бэкапить и зачем:
| Что | Путь | Почему важно | Как часто |
|---|---|---|---|
| Конфиг сервера | /opt/jellyfin/config/ | Настройки, пользователи, API-ключи | Ежедневно |
| БД (jellyfin.db) | /opt/jellyfin/data/data/ | Вся медиатека, история просмотров | Ежедневно |
| Кеш метаданных | /opt/jellyfin/cache/ | Обложки, описания (можно скачать заново) | Раз в неделю |
| docker-compose.yml | /opt/jellyfin/ | Конфиг контейнера | При изменениях |
Скрипт бэкапа конфига (добавь в cron):
#!/bin/bash
BACKUP_DIR="/backup/jellyfin"
DATE=$(date +%Y%m%d)
mkdir -p "$BACKUP_DIR"
# Останови контейнер перед бэкапом БД
docker stop jellyfin
# Бэкап конфига и данных
tar -czf "$BACKUP_DIR/jellyfin-config-$DATE.tar.gz" /opt/jellyfin/config /opt/jellyfin/data
# Запусти обратно
docker start jellyfin
# Удали бэкапы старше 7 дней
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete
echo "Backup complete: jellyfin-config-$DATE.tar.gz"
Добавь в cron:
crontab -e
# Добавь строку:
0 2 * * * /opt/scripts/jellyfin-backup.sh >> /var/log/jellyfin-backup.log 2>&1
Troubleshooting: 8 проблем и их решения
1. Jellyfin не запускается после docker compose up
Смотри логи:
docker compose logs jellyfin --tail=100
Типичные причины: нет прав на папки конфига, занят порт 8096, неправильный путь в volumes.
# Проверь что порт свободен
ss -tlnp | grep 8096
# Проверь права
ls -la /opt/jellyfin/
# Исправь права если нужно
chown -R 1000:1000 /opt/jellyfin/config /opt/jellyfin/cache /opt/jellyfin/data
2. Медиатека пустая, файлы не появляются
Проверь что путь в compose совпадает с реальным путём. Контейнер видит файлы через маппинг — если написал /mnt/data:/media, то в интерфейсе при добавлении библиотеки путь должен быть /media, а не /mnt/data.
# Зайди в контейнер и проверь что файлы видны
docker exec -it jellyfin ls /media/movies/
3. Метаданные не загружаются
Чаще всего — DNS в контейнере не работает или TMDb недоступен. Проверь:
# Проверь доступ к TMDb изнутри контейнера
docker exec -it jellyfin curl -I https://api.themoviedb.org
Если нет ответа — проблема с DNS или файрволом. При network_mode: host используется DNS хоста. Проверь /etc/resolv.conf на сервере.
4. Видео тормозит или не воспроизводится
Определи: это Direct Play или Transcoding. Зайди в веб-интерфейс, начни воспроизведение, нажми на иконку «i» (информация о воспроизведении). Там покажет метод.
- Direct Play тормозит — проблема с сетью или диском. Проверь скорость чтения с диска:
dd if=/mnt/media/test.mkv of=/dev/null bs=1M - Transcoding тормозит — нагрузка на CPU. Включи аппаратное ускорение или снизь качество транскодинга
- Браузер не играет H.265 — нормально, большинство браузеров не поддерживают. Используй настольный клиент Jellyfin Media Player
5. Jellyfin не виден в локальной сети
Если используешь network_mode: bridge вместо host — DLNA не работает. Либо переключись на host, либо смирись с тем что телевизоры не найдут сервер автоматически и добавляй вручную по IP.
# Проверь что Jellyfin слушает на нужном интерфейсе
ss -tlnp | grep 8096
6. Ошибка «Invalid username or password» после обновления
После некоторых обновлений случается сброс сессий. Просто войди заново. Если не помогает — пароль можно сбросить через конфиг:
# Останови сервер
docker stop jellyfin
# Отредактируй файл пользователя
# Пользователи хранятся в /opt/jellyfin/config/data/users/
ls /opt/jellyfin/config/data/users/
Проще — создай нового администратора через jellyfin --nowebclient если доступ к серверу есть по SSH.
7. Субтитры не отображаются
Встроенные субтитры (.srt рядом с файлом) работают сразу. ASS/SSA требуют конвертации — это нагрузка на транскодинг. PGS субтитры из Blu-ray тоже требуют транскодинга.
# Субтитры должны лежать рядом с файлом с тем же именем
Inception (2010)/
├── Inception (2010).mkv
├── Inception (2010).ru.srt # русские
└── Inception (2010).en.srt # английские
8. После обновления пропали плагины
Плагины для Jellyfin привязаны к конкретной версии API. После мажорного обновления плагины могут стать несовместимы — это нормально. Зайди в каталог плагинов и переустанови их. Если плагин не появился в каталоге — ищи обновлённую версию на GitHub.
Мониторинг и профилактика
Jellyfin пишет логи в /opt/jellyfin/config/log/. Периодически чисти старые:
# Логи старше 30 дней
find /opt/jellyfin/config/log/ -name "*.log" -mtime +30 -delete
Кеш метаданных растёт со временем. Если диск с конфигом заполнился — первый подозреваемый именно он:
du -sh /opt/jellyfin/cache/
# Если несколько гигабайт - можно почистить
# Jellyfin скачает всё заново при следующем сканировании
docker stop jellyfin
rm -rf /opt/jellyfin/cache/*
docker start jellyfin
Uptime Kuma для мониторинга доступности — добавь HTTP-монитор на http://IP:8096/health. Этот endpoint возвращает 200 если Jellyfin жив.
Альтернативы Jellyfin
| Решение | Лицензия | Аккаунт нужен? | Когда выбирать |
|---|---|---|---|
| Jellyfin | GPL-2.0, бесплатно | Нет | Приватность, полный контроль |
| Plex | Freemium | Да, обязательно | Лучшие клиенты, простота |
| Emby | Freemium | Нет (но Premier платный) | Промежуточный вариант |
| Kodi (локально) | GPL, бесплатно | Нет | Только локальное воспроизведение без сервера |
Plex выигрывает по клиентам — его приложения на TV полированнее. Но требует аккаунт, и если серверы Plex лягут — твой медиасервер тоже перестанет работать снаружи. Jellyfin полностью автономен.
FAQ
Почему Jellyfin не работает после настройки?
Проверь три вещи по порядку. Первое — запущен ли контейнер: docker compose ps. Второе — порт 8096 слушается: ss -tlnp | grep 8096. Третье — файрвол разрешает подключение: ufw status. В 90% случаев проблема в одном из этих трёх мест.
Как проверить что Jellyfin работает правильно?
Открой http://IP:8096/health — должен вернуть статус 200 и слово «Healthy». Затем зайди в веб-интерфейс, открой любой файл и проверь в информации о воспроизведении — там покажет Direct Play или Transcoding. Если Direct Play — сервер работает корректно.
Что делать если Jellyfin не находит сериалы?
Переименуй файлы по шаблону Название S01E01.mkv. Папки: Название сериала/Season 01/. После переименования принудительно запусти сканирование: Панель управления → Библиотеки → Сканировать все библиотеки. Если не помогло — кликни на сериал и выбери «Обновить метаданные» вручную.
Чем Jellyfin отличается от Plex?
Jellyfin полностью бесплатный и открытый, не требует аккаунта и работает без интернета. Plex требует аккаунт и часть функций платная. Клиенты Plex на TV лучше отполированы, зато Jellyfin не передаёт данные о просмотрах на внешние серверы.
Как открыть Jellyfin снаружи безопасно?
Поставь Nginx Proxy Manager или Caddy, получи SSL-сертификат для своего домена, проксируй трафик на порт 8096. Не открывай 8096 напрямую в интернет. Дополнительно ограничь число попыток входа в настройках Jellyfin — Панель управления → Сеть → Ограничение входа.
Итог
Jellyfin сервер поднят, метаданные тянутся, клиенты подключаются. Структура папок правильная — сериалы определяются, обложки загружаются. HTTPS через NPM или Caddy — снаружи всё работает через твой домен.
Следующий шаг для homelab — Sonarr и Radarr. Они автоматически скачивают новые серии и фильмы и кладут в нужные папки с правильными именами. Jellyfin подхватит всё автоматически. Про эту связку напишу отдельно.
Оставайтесь на связи
Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.
Подписаться на IT-Аптеку →


Поставил Jellyfin по статье. Всё работает отлично но субтитры из интернета не подтягиваются автоматически. Как настроить?
Для автоматических субтитров нужно установить плагин OpenSubtitles: Панель управления → Плагины → Каталог → OpenSubtitles. После установки введи данные аккаунта с opensubtitles.org (регистрация бесплатная). Потом в настройках библиотеки включи автоматическую загрузку субтитров и выбери предпочтительные языки. Jellyfin будет скачивать субтитры автоматически при добавлении нового контента.
Как включить аппаратное транскодирование в Jellyfin? У меня Intel iGPU.
Для Intel iGPU: Панель управления → Воспроизведение → Транскодирование → выбери Intel QuickSync Video. Убедись что на хосте установлены драйверы Intel и пакет intel-media-va-driver (для Linux: apt install intel-media-va-driver vainfo). Проверь командой vainfo — должны появиться поддерживаемые кодеки. После включения транскодирование 1080p будет практически без нагрузки на CPU.
Какое приложение Jellyfin лучше для iPhone? В App Store вижу несколько вариантов.
Официальное приложение Jellyfin есть в App Store — называется просто Jellyfin. Оно бесплатное и покрывает основные задачи. Ещё популярен Infuse — платный ($9.99/год) но очень качественный плеер с отличной поддержкой форматов и субтитров. Если смотришь много контента на iPhone — Infuse стоит своих денег за качество воспроизведения.