[2026-09-27] eagle: personal/index.md personal/plans/tagwriter-container.md personal/tech/music-broken-toload.md personal/tech/music-tags-repair-truenas.md
This commit is contained in:
1 parent
1b4e2c8600
commit
0d9ab9d3ba
4 files changed
+149
-28
No files matched your search
@@ -34,6 +34,18 @@ related: personal/tech/yandex-music-api, personal/tech/music-tags-repair-truenas
|
||||
`moov atom not found` / `Invalid data found`. Структура контейнера затёрта.
|
||||
**Восстановлению не подлежит.**
|
||||
|
||||
**Доказательство (первые байты):**
|
||||
```
|
||||
01 Never Mind.m4a → 49 44 33 03 … («ID3….obTIT2…») ожидалось: ftyp
|
||||
NTL - ВЕРТИТЕ ЗАДОМ_old.wma → 49 44 33 03 … («ID3…TIT2») ожидалось: 30 26 B2 75 (ASF)
|
||||
```
|
||||
|
||||
**Корень:** ID3-заголовок записан **поверх структуры формата** предыдущей массовой правкой тегов.
|
||||
⚠️ **Бэкап не помогает:** `backup_raw/` идентичен диску по байтам — порча случилась раньше бэкапа.
|
||||
|
||||
🔴 **ПРАВИЛО: НИКОГДА не применять массовые ID3-правки к не-MP3 (m4a/wma/ogg/flac).**
|
||||
Теги не-MP3 писать только родными инструментами (`mutagen.MP4`, `OggVorbis`, `ASF`).
|
||||
|
||||
### Infected Mushroom — (2012) Army of Mushrooms (13 m4a, ~130 МБ)
|
||||
|
||||
Папка: `!Pop, Club, Любэ/Infected Mushroom/(2012) Army of Mushrooms/`
|
||||
|
||||
@@ -36,16 +36,25 @@ related:
|
||||
> | **APPLY 165 + READBACK** | ✅ **165/165, ошибок 0, расхождений 0** |
|
||||
> | Чистка `._*` (`del_junk.py --apply`) | ✅ **29 удалено, 0 осталось** |
|
||||
> | Образ с ffmpeg | ✅ пересобран, ffmpeg **8.1.2** + mutagen 1.47.0 |
|
||||
> | **DRY-RUN конвертации не-MP3** | ⛔ **28 ошибок — WMA с Windows Media DRM** (`License_URL … sbp=DRM`, `Decode error rate 0.99`) |
|
||||
> | Диагностика `probe_convert.py` | ⏳ классифицирует 70 файлов: `ok`/`drm`/`corrupt`/`other` |
|
||||
> | APPLY конвертации | ⛔ **НЕ ЗАПУСКАТЬ** — конвертировать только класс `ok` |
|
||||
> | **DRY-RUN конвертации не-MP3** | ⚠️ **28 ошибок** — WMA с Windows Media DRM + битые контейнеры |
|
||||
> | ✅ **Проба `probe_convert.py`** | **70 файлов: `ok` 41 (40 ogg + 1 flac) · `drm` 13 (НТЛ wma) · `corrupt` 16 (13 m4a + 3 wma)** |
|
||||
> | 🔴 **ПРИЧИНА `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 |
|
||||
> | Приёмка в Jellyfin | ⏳ ждёт Alex |
|
||||
>
|
||||
> **🔴 НОВЫЙ КЛАСС ПРОБЛЕМЫ: зашифрованный контент.** Часть `.wma` (НТЛ `wma/Track 1–13.wma`)
|
||||
> защищена **Windows Media DRM** — ffmpeg не может их декодировать (99.5 % ошибок). Это не сбой
|
||||
> скрипта и не потеря файлов (оригиналы в `backup_raw/`). Обходного пути без снятия DRM нет.
|
||||
> защищена **Windows Media DRM** — ffmpeg не может их декодировать (99.5 % ошибок). Лицензии
|
||||
> Microsoft больше не выдаются → **снять DRM невозможно**. Не сбой скрипта (оригиналы в `backup_raw/`).
|
||||
> **Правило: перед конвертацией формата — probe каждого файла, конвертировать только валидные.**
|
||||
>
|
||||
> **🔴🔴 НОВЫЙ КЛАСС ПРОБЛЕМЫ: контейнер разрушен массовой ID3-правкой.** 16 файлов (13 m4a + 3 wma)
|
||||
> начинаются с `49 44 33 03` (**`ID3`**) вместо `ftyp`/ASF → `moov atom not found`. **Правило:
|
||||
> НИКОГДА не применять массовые ID3-правки к не-MP3 (m4a/wma/ogg/flac)** — теги не-MP3 писать
|
||||
> только родными инструментами формата (`mutagen.MP4`, `OggVorbis`, `ASF`).
|
||||
>
|
||||
> **Итог по MP3: план закрыт.** 7041 (основной apply) + **165 (дельта)** = все MP3 приведены к плану.
|
||||
> Остались только не-MP3 (70 файлов), из которых часть конвертируема, часть — DRM.
|
||||
>
|
||||
@@ -228,11 +237,28 @@ related:
|
||||
> ⏭ **Осталось:** (1) ✅ полный разбор 83 MISSING + 212 MISMATCH — **сделан, вскрыл ДЕФЕКТ ПЛАНА
|
||||
> (353 строки ложного `no_change`) + факт-чек (165 реальных правок)**;
|
||||
> (2) ✅ **ответ Alex по TRCK = B** → **apply дельта-правок (165): 165/165, 0 расхождений**;
|
||||
> (3) ⛔ конвертация не-MP3 → MP3 — **заблокирована Windows Media DRM** (28 WMA); идёт `probe_convert.py`,
|
||||
> конвертировать только класс `ok`;
|
||||
> (4) приёмка в UI Jellyfin (глазами Alex); (5) после приёмки — удалить бэкапы
|
||||
> (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) после приёмки — удалить бэкапы
|
||||
> (`backup/`, `backup_raw/`, `backup_fix/`).
|
||||
>
|
||||
> ### 🔴 ПИТФОЛЛ: БЭКАП СНИМАТЬ ДО ПРАВКИ, ДОКАЗЫВАТЬ ФАКТОМ
|
||||
>
|
||||
> Alex переспросил трижды («ты снимал бэкап до правки?»). **Правильный порядок — `backup` → `apply`.**
|
||||
> Доказательство фактом, не словами: времена файлов `backup/` **09:03–09:38** vs MP3 на диске после
|
||||
> apply **11:35**; `prove_backup_before.py` — `backup_fix/` vs диск: **различаются 165, одинаковых 0**
|
||||
> (в бэкапе `Rebekka`/`Nautilus Pompilius`/`Ãðÿçíàÿ êðîâü`, на диске `Ребекка`/`Наутилус Помпилиус`/`Грязная кровь`).
|
||||
> **Три бэкапа, все сняты ДО соответствующих правок:** `backup/` (7041 MP3), `backup_raw/` (70 не-MP3),
|
||||
> `backup_fix/` (165 MP3).
|
||||
>
|
||||
> ### 🔴 ПИТФОЛЛ: битые m4a/wma не восстановить из бэкапа
|
||||
>
|
||||
> `check_backup_healthy.py` доказал: `backup_raw/` и диск для битых файлов **идентичны по байтам**
|
||||
> (`49443303…`) — порча случилась **до** снятия бэкапа, до всей сессии. Соответственно «проверь
|
||||
> в бэкапе, вдруг живые» — не сработало. **Урок: бэкап защищает только от правок ПОСЛЕ него.**
|
||||
>
|
||||
> ### 🔴 ПИТФОЛЛ: sentinel-группа собирается по КОРНЮ сборника, НЕ по ближайшей папке
|
||||
>
|
||||
> Первая версия правки группировала пустой `artist` по `parts[-2]` →
|
||||
|
||||
Reference in new issue
Block a user