Files
obsidian-vault/family/how-to/jellyfin-transcode-rpi5.md
T

122 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Jellyfin Транскод на RPi5 — PGS/Subtitle Pitfalls
type: reference
namespace: work
tags:
- jellyfin
- kraken
- transcode
- subtitles
- pitfalls
created: '2026-05-18'
updated: '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 совместимо):
```bash
~/.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
```
```bash
# один файл
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`) после завершения загрузки:
1. Запускает media-pipeline sync
2. Запускает 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-папку:
```bash
# 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 (нормализовать).
**Диагностика:**
```bash
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 Kraken `load 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