6.0 KiB
title, type, namespace, tags, created, updated
| title | type | namespace | tags | created | updated | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| Jellyfin Транскод на RPi5 — PGS/Subtitle Pitfalls | reference | work |
|
2026-05-18 | 2026-09-04 |
Jellyfin Транскод на RPi5 — PGS/Subtitle Pitfalls
Контекст
Клиент: Konka TV с WebOS. Сервер: Raspberry Pi 5 (Крaken, ARM64).
Direct Play условия
Direct Play работает при выполнении всех условий:
- Аудио: AAC
- Субтитры: отсутствуют (или внешние SRT, без burn-in)
Проблема PGS/ASS субтитров
PGS и ASS (SSA) субтитры вызывают burn-in — Jellyfin рендерит субтитры прямо в видеопоток.
Результат: полный транскод на CPU → 275% CPU load на RPi5 → лаги, перегрев.
Экспериментальный PGS rendering в настройках Jellyfin — не помогает на RPi5.
Решение: конвертация PGS → SRT
Установка через uv (arm64/aarch64 совместимо):
~/.local/bin/uv tool install pgsrip
sudo apt-get install -y libgl1 libglib2.0-0 tesseract-ocr tesseract-ocr-rus tesseract-ocr-eng
Скрипт конвертации:
/srv/dev-disk-by-uuid.../docker/media-pipeline/pgs-to-srt.sh
# один файл
pgs-to-srt.sh /media/movies/Film.mkv
# вся директория
pgs-to-srt.sh /media
Логи: /srv/.../docker/media-pipeline/pgs-to-srt.log
Скрипт:
- Скипает файлы без PGS-дорожек (S_HDMV)
- Скипает если .srt уже есть рядом
- Пишет лог с timestamp
После конвертации Jellyfin читает внешние .srt без транскода.
Transmission completion hook
Хук /config/on-download-complete.sh (монтируется в контейнер :ro) после завершения загрузки:
- Запускает media-pipeline sync
- Запускает pgs-to-srt.sh для скачанного файла/директории
Лог: /srv/.../docker/media-pipeline/download-complete.log
Итог по субтитрам
| Тип | Direct Play | Транскод |
|---|---|---|
| Нет субтитров | ✅ | — |
| Внешний SRT | ✅ | — |
| ASS/SSA | ❌ | burn-in, 275% CPU |
| PGS (MKS/MKV) | ❌ | burn-in, 275% CPU |
NFD/NFC filename encoding pitfall
Проблема: HTPC сохраняет имена файлов в NFD, Kraken — в NFC.
→ Jellyfin видит две папки: одна с .avi файлом (NFD), другая с .nfo (NFC).
→ NFO не применяется — Jellyfin берёт NFD-папку (с видео) и игнорирует NFC-папку (с NFO).
→ Метаданные пустые.
Фикс A (быстрый): скопировать movie.nfo + poster.jpg в NFD-папку:
# python3 — использовать bytes для путей
import os, shutil
nfc_path = "…/Movie.NFC/movie.nfo"
nfd_path = "…/Movie.NFD/movie.nfo"
shutil.copy(nfc_path.encode(), nfd_path.encode())
Фикс B (радикальный): переименовать всё в NFC (нормализовать).
Диагностика:
ls -la | cat -v # покажет NFD-escape символы как ^ escape sequences
python3 -c "import os; [print(repr(f)) for f in os.listdir('.')]"
2026-09-04: 4K при чистых Direct Play подтормаживал по Wi-Fi — РЕШЕНО переводом ТВ на провод
Наблюдение (важно для диагностики стриминговых тормозов): сервер/диск могут быть «невиноваты», даже если клиент (Jellyfin for WebOS) дёргает картинку. Нужно проверить не только MAC-счётчики Wi-Fi (они могут быть «чистыми»), но и попробовать провод.
Симптомы на Kraken + LG webOS TV:
- И тяжёлый
Неистовый (2020)Remux-2160p (~89 Мбит/с), и лёгкийProject Hail Mary (2026)WEB-DL 4K (~25 Мбит/с, HEVC Main10 HDR10+) подтормаживали при чистых Direct Play по Wi-Fi. - При воспроизведении:
0 ffmpeg-процессов, транскода нет, CPU Krakenload 0.1, сервер отдавал лишь~21 Мбит/с, Wi-Fi ТВ был «чист» по MAC-счётчикам (0 CRC,0 retries,-53 dBm) — т.е. локально сервер И клиентские линки выглядели здоровыми. - ⚠️ Ловушка: чистые MAC-счётчики не исключают джиттер/переупорядочивание пакетов на Wi-Fi в зашумлённом эфире — это и был реальный источник микрозазоров.
Разрешение (2026-09-04): (1) eth0 Kraken возвращён на 1G (замена патч-корда) + (2) ТВ переведён на проводной Ethernet (на тот момент линк 100M downshift). После этого и remux-4K (~89 Мбит/с), и лёгкий WEB-4K идут без тормозов. → Причина — нестабильный Wi-Fi последней мили ТВ, не пропускная способность и не декодер клиента.
Стратегия качества (профиль WEB-4K (no remux) в Radarr/Sonarr, benchmark размеров): см. [[how-to/arr-stack-kraken]] → «Качество загрузки».
Связанные страницы
- concepts/kraken-media-stack — полный медиастек: *arr + Jellyfin + media-pipeline
- tech/kraken-network — инфра Кракена, HDD error recovery