Релиз v1.0.0
This commit is contained in:
@@ -0,0 +1,328 @@
|
||||
# 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 являются отдельными проектами и распространяются на условиях собственных лицензий.
|
||||
Reference in New Issue
Block a user