Files
qobuz-streamrip-tools/README.md
T
2026-08-09 12:06:46 +03:00

329 lines
9.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.
# Qobuz Streamrip Tools
Набор утилит для Windows для автоматизации работы со **Streamrip** и загрузками из **Qobuz**.
Проект объединяет:
- программу `QobuzWatchdog`, которая последовательно обрабатывает список ссылок через Streamrip и перезапускает зависший процесс;
- очистку базы истории Streamrip;
- приведение скачанных FLAC-файлов к CD-качеству;
- группировку нескольких альбомов одного исполнителя в общую папку.
> Используйте проект только для контента, который вы имеете право скачивать и обрабатывать, и в соответствии с условиями используемых сервисов.
## Структура проекта
```text
qobuz-streamrip-tools/
├── QobuzWatchdog/
│ ├── Properties/
│ ├── App.config
│ ├── Program.cs
│ └── QobuzWatchdog.csproj
│
├── scripts/
│ ├── Clear-StreamripDb.bat
│ ├── Convert-FlacToCD.ps1
│ └── GroupAlbumsByArtist.ps1
│
├── tools/
│ └── .gitkeep
│
├── downloads/
│ └── .gitkeep
│
├── data/
│ └── urls.txt
│
├── QobuzWatchdog.sln
├── README.md
├── LICENSE
└── .gitignore
```
## Общий рабочий процесс
```text
data/urls.txt
↓
QobuzWatchdog
↓
Streamrip
↓
downloads/
↓
Convert-FlacToCD.ps1
↓
GroupAlbumsByArtist.ps1
```
Все загрузки Streamrip направляются в папку `downloads` в корне проекта.
`QobuzWatchdog` при каждом запуске проверяет `%APPDATA%\streamrip\config.toml` и устанавливает параметр `downloads.folder` в путь к локальной папке `downloads`.
## Скачать все зависимости:
[Скачать (.zip)](https://cloud.kolbox.duckdns.org/seafhttp/f/f918d0ca3aac4b4195de/?op=view)
## Основная зависимость — Streamrip
Streamrip:
https://github.com/nathom/streamrip
Для актуальной версии Streamrip необходим Python 3.10 или новее и `pip`.
Установка:
```powershell
pip3 install streamrip --upgrade
```
Проверка:
```powershell
rip
```
Перед первым использованием необходимо настроить Streamrip и авторизацию Qobuz.
Для Qobuz требуется подходящая подписка, позволяющая получать соответствующее качество аудио.
### Где ищется Streamrip
`QobuzWatchdog` ищет `rip.exe` в следующем порядке:
1. `tools\rip.exe`;
2. системная переменная `PATH`.
Если Streamrip установлен через `pip`, обычно достаточно, чтобы каталог Python `Scripts` был добавлен в `PATH`.
## FFmpeg
Для `Convert-FlacToCD.ps1` необходимы:
```text
ffmpeg.exe
ffprobe.exe
```
Сборка FFmpeg для Windows:
https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full.7z
После распаковки файлы находятся в каталоге `bin`.
Их можно положить непосредственно в:
```text
tools/
```
Скрипт ищет `ffmpeg.exe` и `ffprobe.exe`:
1. в `tools`;
2. затем в системном `PATH`.
## Зависимости по компонентам
| Компонент | Streamrip | FFmpeg | FFprobe | PowerShell | .NET Framework |
| ------------------------- |:---------:|:------:|:-------:|:----------:|:--------------:|
| `QobuzWatchdog` | ✓ | — | — | — | 4.7.2 |
| `Clear-StreamripDb.bat` | ✓ | — | — | — | — |
| `Convert-FlacToCD.ps1` | — | ✓ | ✓ | 5.1+ | — |
| `GroupAlbumsByArtist.ps1` | — | — | — | 5.1+ | — |
## QobuzWatchdog
`QobuzWatchdog` читает ссылки из:
```text
data/urls.txt
```
Каждая ссылка должна находиться на отдельной строке.
Пример:
```text
https://www.qobuz.com/...
https://open.qobuz.com/...
```
Строки, начинающиеся с `#`, игнорируются.
Программа хранит состояние в:
```text
data/completed_urls.txt
data/failed_urls.txt
```
Эти файлы создаются автоматически и не добавляются в Git.
### Что делает Watchdog
Для каждой ссылки программа:
1. запускает `rip --no-progress --verbose url "<URL>"`;
2. отслеживает вывод процесса;
3. если Streamrip долго не выводит ничего, завершает дерево процесса;
4. повторяет попытку;
5. сохраняет успешно обработанные ссылки;
6. повторяет незавершённые ссылки в следующих проходах.
Текущие параметры находятся в `Program.cs`:
```csharp
private const int MaxRunsPerUrl = 10;
private const int MaxRounds = 20;
private const int IdleLimitSeconds = 60;
private const int RestartDelaySeconds = 3;
```
### Сборка QobuzWatchdog
Проект рассчитан на:
```text
.NET Framework 4.7.2
```
Откройте:
```text
QobuzWatchdog.sln
```
в Visual Studio и соберите конфигурацию `Release`.
Каталоги `.vs`, `bin` и `obj` исключены из Git.
## Очистка базы Streamrip
Запустите:
```text
scripts\Clear-StreamripDb.bat
```
Скрипт удаляет:
```text
%APPDATA%\streamrip\downloads.db
%APPDATA%\streamrip\failed_downloads.db
```
Это сбрасывает историю скачанных и неудачно обработанных элементов Streamrip.
## Конвертация FLAC в CD-качество
Запустите:
```powershell
.\scripts\Convert-FlacToCD.ps1
```
Скрипт автоматически обрабатывает:
```text
downloads/
```
Целевые параметры:
```text
FLAC
16 бит
44,1 кГц
2 канала
```
Скрипт:
- рекурсивно ищет FLAC;
- пропускает уже подходящие файлы;
- сохраняет метаданные и встроенные изображения;
- создаёт временный файл;
- проверяет результат через FFprobe;
- только после успешной проверки заменяет исходник;
- при ошибке пытается восстановить исходный файл.
## Группировка альбомов по исполнителям
Запустите:
```powershell
.\scripts\GroupAlbumsByArtist.ps1
```
Скрипт работает с папкой `downloads`.
Он ожидает названия альбомов в формате:
```text
Исполнитель - Альбом
```
Если у одного исполнителя найдено два или больше альбомов:
```text
downloads/
├── Исполнитель/
│ ├── Исполнитель - Альбом 1/
│ └── Исполнитель - Альбом 2/
```
Если альбом только один, его папка остаётся на первом уровне.
## Папка downloads
Вся музыка находится в:
```text
downloads/
```
Содержимое этой папки исключено из Git:
```gitignore
downloads/*
!downloads/.gitkeep
```
## Папка tools
В `tools` можно положить локальные зависимости:
```text
rip.exe
ffmpeg.exe
ffprobe.exe
```
Бинарные файлы из `tools` не добавляются в Git.
## PowerShell
Скрипты рассчитаны на Windows PowerShell 5.1 или новее.
Если Windows блокирует запуск локальных `.ps1`, проверьте текущую политику:
```powershell
Get-ExecutionPolicy
```
При необходимости для текущего пользователя можно использовать:
```powershell
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
```
Меняйте политику выполнения только если понимаете последствия этой настройки.
## Лицензия
Исходный код этого репозитория распространяется по лицензии MIT.
Streamrip и FFmpeg являются отдельными проектами и распространяются на условиях собственных лицензий.