[2026-05-10] music-download-practices: NAS structure, upload method, ffmpeg validation

This commit is contained in:
Alexey Martemyanov
2026-05-10 11:13:10 +06:00
parent c1a4d1d307
commit 9664b130c7
+42
View File
@@ -162,6 +162,11 @@ done | sort | uniq -c
```
Music/
├── !A Not sorted/
│ └── SD-card-2026-05/ ← новые треки (май 2026, ~160 mp3)
│ ├── Агата Кристи/
│ ├── Аквариум/
│ ├── ... (Artist/Track.mp3)
│ └── Юрий Визбор/
├── !Pop, Club, Любэ/
├── !Retro/
├── !Rock&Folk/ ← основная рок-коллекция
@@ -170,8 +175,45 @@ Music/
└── z Другое, Enigma, Ленинград/
```
### Соглашение по именованию (SD-card-2026-05)
- Структура: `Исполнитель/Название трека.mp3`
- Один исполнитель — одна папка (даже для 1 трека)
- Папки дублей на латинице (Andervud, OtavaYo) — артефакт, можно слить с кириллическими
- Класика хранится в папке `Классика/` (Бах, Орф, Пахмутова и др.)
- Саундтреки — в `Саундтреки/`
- Исполнитель с одним треком (Елена Камбурова, Тамара Миансарова) — отдельная папка
### Загрузка файлов на NAS
**Рабочий метод** — python3 скрипт через ssh+scp (май 2026):
- rsync с `!` в пути назначения ломается (bash history expansion)
- scp напрямую из bash тоже ломается на кавычках с пробелами
- **Решение:** python subprocess с отдельными аргументами, ssh mkdir + scp per-file
```python
# Шаблон: /tmp/upload_nas.py
subprocess.run(["ssh", "-i", KEY, f"user@host", f"mkdir -p '{nas_dir}'"])
subprocess.run(["scp", "-i", KEY, local_path, f"user@host:{nas_path}"])
```
**WMA на NAS:** 565 файлов (в основном The Prodigy, Дискотека Авария, старые радиозаписи). Конвертация не делалась — отдельная задача при необходимости.
### Валидация перед загрузкой
```bash
# Проверить все mp3 через ffmpeg (только ошибки)
find ~/Downloads/music -name "*.mp3" | while read f; do
r=$(ffmpeg -v error -i "$f" -f null - 2>&1)
[ -n "$r" ] && echo "ERR: $f | $(echo "$r" | head -1)"
done
# Частые проблемы:
# "invalid RIFF header" — файл обёрнут в WAV-контейнер → найти RIFF offset и перекодировать
# "Failed to find two consecutive MPEG frames" — нулевой или битый файл → перекачать
# "Header missing" — частичная порча → перекодировать через libmp3lame
```
### HTML-ссылки на треки
TrueNAS без дополнительных сервисов HTTP не отдаёт. Варианты: