[2026-09-27] eagle: personal/plans/tagwriter-container.md personal/tech/music-tags-repair-truenas.md
This commit is contained in:
1 parent
607fc8ba2a
commit
74193b4d08
2 files changed
+17
-2
No files matched your search
@@ -4,7 +4,7 @@ namespace: personal
|
||||
related:
|
||||
- '[[personal/plans/music-tags-wave38-fixes]]'
|
||||
- '[[personal/tech/music-tags-repair-truenas]]'
|
||||
status: converted-tags-lost-pending-restore
|
||||
status: 40mp3-destroyed-rollback-ready
|
||||
tags:
|
||||
- music
|
||||
- truenas
|
||||
|
||||
@@ -43,10 +43,25 @@ related:
|
||||
> | ✅ Решение Alex | битые/DRM **удалять** («какая разница, они все равно не играют») |
|
||||
> | **Конвертация 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 по заголовкам Кирпичей |
|
||||
> | ✅ Решение Alex по Кирпичам | «Нормально делать» → ведущий `<N> - ` в `new_title` **срезать** (номер остаётся в `TRCK`) |
|
||||
> | ✅ `fix40.py` DRY-RUN | **40/40 готовы, 0 ошибок** |
|
||||
> | 🔴🔴 `fix40.py --apply` | отчёт «40/40 записано, 0 ошибок» — **ЛОЖНАЯ ПРИЁМКА: аудио уничтожено** |
|
||||
> | 🔴 Причина | `ID3(p).save(tmp)` пишет **только тег-блок**, MPEG-поток не копируется → 40 MP3 стали ~1.1 КБ |
|
||||
> | ✅ Ущерб локализован | `backup_conv40/` **40/40 целых** (2–10 МБ) + `backup_raw/` **41/41 оригиналов** → **откат возможен** |
|
||||
> | ⏳ Откат 40 из `backup_conv40/` + перезапись правильным способом | ждёт «откат» от Alex |
|
||||
> | ⏳ Удаление 29 битых/DRM | **не выполнено** — команды не было (список уже сохранён) |
|
||||
> | ⏳ Правка дыры `apply_tags.py` (нет `.mp3`-фильтра) | Alex сказал «правь» — не выполнено |
|
||||
> | Приёмка в Jellyfin | ⏳ ждёт Alex |
|
||||
>
|
||||
> **🔴🔴🔴 НОВЫЙ КЛАСС ПРОБЛЕМЫ: `mutagen.ID3().save()` уничтожает аудио.** `ID3(path)` — это
|
||||
> парсер **тег-блока**, он не привязан к MPEG-потоку: `save()` сериализует только фреймы ID3,
|
||||
> а последующий `os.replace` затирает оригинал → файл размером ~1 КБ без единого аудио-фрейма
|
||||
> (`ffprobe`: `Failed to find two consecutive MPEG audio frames`). **Проверено на живой библиотеке:
|
||||
> 40 MP3 (2–10 МБ) превратились в 1.1 КБ.** Правильно: `ID3(p).save(p)` — **в тот же путь**
|
||||
> (тогда mutagen копирует поток), либо `MP3(p)` + `.save()`, либо `shutil.copy2(p, tmp)` перед правкой.
|
||||
> ⚠️ **«N/N записано, 0 ошибок» ≠ приёмка** — валидировать `MP3(p).info.length` и `ffprobe` кодек,
|
||||
> а не факт выполнения `save()`. Подробно — [[personal/plans/tagwriter-container]].
|
||||
>
|
||||
> **🔴 НОВЫЙ КЛАСС ПРОБЛЕМЫ: конвертация теряет теги между системами метаданных.**
|
||||
> `ogg` хранит теги в **Vorbis comments** (`ARTIST=`/`TITLE=`), `mp3` — в **ID3v2** (`TPE1`/`TIT2`).
|
||||
> `-map_metadata 0` этот маппинг **не делает** → 40/41 новых MP3 вышли с пустыми тегами
|
||||
|
||||
Reference in new issue
Block a user