329 lines
9.0 KiB
Markdown
329 lines
9.0 KiB
Markdown
# 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 являются отдельными проектами и распространяются на условиях собственных лицензий.
|