[2026-09-27] eagle: personal/plans/tagwriter-container.md personal/tech/music-broken-toload.md personal/tech/music-tags-repair-truenas.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-27 01:40:36 +06:00
1 parent 9493ae5514
commit 607fc8ba2a
3 files changed
+200 -16

No files matched your search

+10
View File
@@ -26,6 +26,15 @@ related: personal/tech/yandex-music-api, personal/tech/music-tags-repair-truenas
**Бэкап:** все 29 в `/mnt/RED_2TB/storage/Music/backup_raw/`.
⚠️ **Бэкап не помогает** — файлы там идентичны диску (побиты до сессии).
⚠️ **Статус удаления (2026-09-26): НЕ УДАЛЕНЫ.** Alex сказал удалять, но команда на удаление
ещё не отдавалась — все 29 (16 битых + 13 DRM) **по-прежнему лежат на диске**.
Ждут команды после завершения работ по конвертации.
📌 **Все 29 — из числа 70 не-MP3.** Остальные 41 (40 ogg + 1 flac) **уже сконвертированы в MP3**
(`convert41.py`, 41/41, 0 ошибок) — они в этот список **не входят** и удалению не подлежат.
⚠️ У 40 из них потерялись теги при конвертации (см. [[personal/plans/tagwriter-container]]) —
это отдельная задача восстановления, **не** повод добавлять их сюда.
---
## 1. Битые (контейнер разрушен) — 16 файлов
@@ -108,6 +117,7 @@ Windows Media DRM. Microsoft закрыл инфраструктуру выда
- [[personal/tech/yandex-music-api]] — выгрузка библиотеки Яндекс Музыки
- [[personal/tech/music-tags-repair-truenas]] — ремонт тегов на TrueNAS
- [[personal/plans/tagwriter-container]] — контейнер применения тегов + конвертация 41
- [[personal/tech/music-tags-final-review]] — финальное ревью
---
+16 -5
View File
@@ -41,10 +41,19 @@ related:
> | 🔴 **ПРИЧИНА `corrupt`** | **ID3-заголовок (`49443303`) записан поверх структуры контейнера** → `moov atom not found`. Файлы битые **до сессии** (в `backup_raw/` те же байты) — восстановление невозможно |
> | ✅ Список на перезагрузку | [[personal/tech/music-broken-toload]] — **29 файлов** (16 битых + 13 DRM) |
> | ✅ Решение Alex | битые/DRM **удалять** («какая разница, они все равно не играют») |
> | ⏳ Конвертация 41 | `convert41.py` готов, DRY-RUN ждёт апрува |
> | ⏳ Удаление 29 битых/DRM | после конвертации 41 |
> | **Конвертация 41 (`convert41.py --apply`)** | ✅ **выполнено: 41/41, 0 ошибок** — оригиналы ogg/flac удалены скриптом |
> | 🔴 **Теги новых MP3** | 🔴 **40 из 41 ПУСТЫЕ** (`check_conv_tags.py`) — ffmpeg **не переносит Vorbis comments → ID3** |
> | ⏳ Восстановление тегов 40 | `fix40_source.json` собран (матч 40/40 по basename), `fix40.py` не написан — ждёт решения Alex по заголовкам Кирпичей |
> | ⏳ Удаление 29 битых/DRM | **не выполнено** — команды не было (список уже сохранён) |
> | Приёмка в Jellyfin | ⏳ ждёт Alex |
>
> **🔴 НОВЫЙ КЛАСС ПРОБЛЕМЫ: конвертация теряет теги между системами метаданных.**
> `ogg` хранит теги в **Vorbis comments** (`ARTIST=`/`TITLE=`), `mp3` — в **ID3v2** (`TPE1`/`TIT2`).
> `-map_metadata 0` этот маппинг **не делает** → 40/41 новых MP3 вышли с пустыми тегами
> (единственный выживший — `.flac`-источник). ⚠️ **«0 ошибок ffmpeg» ≠ корректный результат** —
> ошибок не было, а теги потеряны. **Правило: после конвертации формата ОБЯЗАТЕЛЬНО проверять
> теги у выхода и предпочитать запись тегов из плана.** Подробно — [[personal/plans/tagwriter-container]].
>
> **🔴 НОВЫЙ КЛАСС ПРОБЛЕМЫ: зашифрованный контент.** Часть `.wma` (НТЛ `wma/Track 1–13.wma`)
> защищена **Windows Media DRM** — ffmpeg не может их декодировать (99.5 % ошибок). Лицензии
> Microsoft больше не выдаются → **снять DRM невозможно**. Не сбой скрипта (оригиналы в `backup_raw/`).
@@ -239,9 +248,11 @@ related:
> (2) ✅ **ответ Alex по TRCK = B** → **apply дельта-правок (165): 165/165, 0 расхождений**;
> (3) ✅ **проба 70 не-MP3**: `ok` 41 · `drm` 13 · `corrupt` 16; битые/DRM → список
> [[personal/tech/music-broken-toload]], Alex: **удалять**;
> (4) ⏳ конвертация 41 `ok` (`convert41.py`, DRY-RUN ждёт апрува);
> (5) ⏳ удаление 29 битых/DRM;
> (6) ⏳ приёмка в UI Jellyfin (глазами Alex); (7) после приёмки — удалить бэкапы
> (4) ✅ **конвертация 41 `ok`** — выполнено 41/41, 0 ошибок, оригиналы ogg/flac удалены;
> (5) 🔴 **новый дефект: 40 из 41 новых MP3 без тегов** — восстановление из плана
> (`fix40_source.json` собран), `fix40.py` ждёт решения Alex по заголовкам Кирпичей;
> (6) ⏳ удаление 29 битых/DRM (список сохранён, команды не было);
> (7) ⏳ приёмка в UI Jellyfin (глазами Alex); (8) после приёмки — удалить бэкапы
> (`backup/`, `backup_raw/`, `backup_fix/`).
>
> ### 🔴 ПИТФОЛЛ: БЭКАП СНИМАТЬ ДО ПРАВКИ, ДОКАЗЫВАТЬ ФАКТОМ