Jellyfin как домашняя медиатека: фильмы, сериалы и транскодинг через iGPU
Долгое время вся коллекция фильмов и музыки у меня жила просто папками на сетевом диске. Открываешь SMB-шару с телевизора, листаешь имена файлов вида Movie.2014.1080p.BluRay.x264.mkv и пытаешься вспомнить, что это вообще такое. Постеров нет, прогресс просмотра не сохраняется, на телефоне вообще боль. Поставил Jellyfin — и наконец перестал стыдиться собственной медиатеки.
Jellyfin — это бесплатный медиасервер, форк старого Emby, полностью опенсорсный, без подписок и облачных аккаунтов. Он сам подтягивает метаданные, постеры, описания, раскладывает всё по библиотекам и отдаёт клиентам на любой платформе.
Compose и проброс iGPU
Главная фишка моего сервера (Intel i5-12400, встроенное видео UHD 730) — аппаратное транскодирование через QuickSync. Без него процессор при перекодировании 4K в реальном времени уходит в потолок и кулер начинает гудеть как пылесос. С QuickSync та же задача — это пара процентов CPU и тёплый радиатор.
Чтобы Jellyfin в контейнере увидел iGPU, нужно пробросить /dev/dri:
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
user: 1000:1000
network_mode: host
devices:
- /dev/dri:/dev/dri
group_add:
- "989" # gid группы render на хосте, см. getent group render
volumes:
- /app/jellyfin/config:/config
- /app/jellyfin/cache:/cache
- /mnt/media/films:/media/films:ro
- /mnt/media/series:/media/series:ro
- /mnt/media/music:/media/music:ro
restart: unless-stopped
Пара граблей, на которые я наступил, чтоб потом не гуглить то же самое:
group_addс правильным gid группыrenderобязателен, иначе контейнер видит/dev/dri, но прав на него нет. Узнать gid:getent group render.- Библиотеки монтирую
:ro— Jellyfin незачем писать в коллекцию, пусть только читает. network_mode: hostупрощает работу DLNA и обнаружение клиентов в локалке.
После старта в админке идём в Dashboard → Playback и включаем Intel QuickSync (QSV), выбираем нужные кодеки (H.264, HEVC, VP9). Проверить, что транскод реально идёт на железе, можно так:
docker exec jellyfin /usr/lib/jellyfin-ffmpeg/vainfo
Если выдаёт список профилей VAProfileH264 и прочие — всё ок, iGPU подхватился.
Организация библиотек
Тут весь секрет — правильные имена файлов и папок, тогда скрейпер не промахивается. Для фильмов:
films/
Дюна (2021)/Dune.2021.2160p.mkv
Бегущий по лезвию (1982)/Blade.Runner.1982.mkv
Для сериалов — папка сериала, внутри Season 01, файлы вида S01E03. Год в скобках критичен: без него Jellyfin путает ремейки и оригиналы. Музыку раскладываю Исполнитель/Альбом/01 - Трек.flac, теги читает из самих файлов.
Клиенты
На телевизоре (LG с webOS) поставил официальное приложение из стора — работает на удивление бодро. На телефоне — Findroid под Android, приятнее официального. На втором ТВ воткнул Android-приставку и гоняю Jellyfin Media Player. Прогресс синхронизируется между всеми устройствами: начал смотреть на телефоне в метро, дома продолжил с того же места на большом экране.
Отдельный кайф — что вся семья завела свои профили, у каждого свой список «продолжить просмотр» и родительский контроль для детского профиля настраивается в два клика.
Итог: коллекция перестала быть свалкой файлов и стала нормальным сервисом, которым реально пользуются домашние. Жалею только, что не сделал этого раньше.