Полноценное веб-приложение для автоматизации подготовки аудиотреков для радио на базе Next.js с TypeScript.
- Скачивание треков: Поддержка YouTube (через RapidAPI) и Яндекс Музыки (через yt-dlp)
- Прослушивание и отбор: Встроенный аудиоплеер с кнопками принятия/отклонения
- Автоматическое определение типа трека: По длительности и BPM (Быстрый/Средний/Медленный)
- Обрезка треков: Автоматическая обрезка до 6 минут (требует FFmpeg)
- Редактирование метаданных: Полный редактор с тегированием
- FTP загрузка: Загрузка обработанных треков на сервер
- Проверка «На радио»: Сопоставление с плейлистом Streaming.Center (плейлист id=1), бейдж в списке треков
- Прогресс-бары: Отображение прогресса для всех операций
- Организация файлов: Автоматическое управление папками
- ✅ Полная поддержка Netlify: Все функции работают с FFmpeg.wasm (WebAssembly версия FFmpeg)
- Node.js 20+ (указано в package.json)
- Yarn 4.12.0+
- FFmpeg (для обработки аудио) - опционально, используется FFmpeg.wasm по умолчанию
- yt-dlp (для скачивания треков) - опционально, требуется только для YouTube Music и Яндекс.Музыки
Платформы: Windows, Linux, macOS (кроссплатформенная поддержка)
Деплой: ✅ Netlify, ✅ Vercel (с FFmpeg.wasm), VPS, выделенный сервер
Обработка аудио: �спользуется FFmpeg.wasm (WebAssembly) - работает везде, включая Netlify, без установки бинарных файлов
git clone <repository-url>
cd Track_parseryarn installСкопируйте файл .env.example в .env и заполните ваши API ключи:
cp .env.example .envОтредактируйте .env файл:
# RapidAPI Configuration
RAPIDAPI_KEY=your_rapidapi_key_here
RAPIDAPI_HOST=youtube-mp36.p.rapidapi.com
# FTP Configuration
FTP_HOST=s.ruworship.ru
FTP_PORT=21
FTP_USER=radio
FTP_PASSWORD=your_ftp_password_here
FTP_SECURE=false
FTP_REMOTE_PATH=/media/Server_1/0 0 ALL_TRACK # Optional: remote directory on FTP server
# FFmpeg Configuration (optional)
# FFMPEG_PATH=C:\ffmpeg\bin
# Streaming.Center (проверка «трек уже на радио», плейлист «все треки»)
STREAMING_CENTER_API_URL=https://your-server.streaming.center:1030
STREAMING_CENTER_API_KEY=your_api_key_here
# STREAMING_CENTER_PLAYLIST_ID=1Streaming.Center (опционально): для проверки «трек уже на радио» в плейлисте укажите:
STREAMING_CENTER_API_URL— базовый URL (напримерhttps://your-server.streaming.center:1030)STREAMING_CENTER_API_KEY— ключ APISTREAMING_CENTER_PLAYLIST_ID— ID плейлиста со всеми треками (по умолчанию 1)
Без этих переменных проверка отключена, бейдж «На радио» не показывается.
Важно:
- Получите ваш RapidAPI ключ на rapidapi.com
- Настройки FTP хранятся в
.envдля безопасности (пароль не должен попадать в репозиторий)
-
FFmpeg:
- Скачайте FFmpeg с официального сайта
- Распакуйте в
C:\ffmpeg\или добавьте в PATH - �ли укажите путь в
config.jsonили переменной окруженияFFMPEG_PATH
-
yt-dlp:
- Скачайте
yt-dlp.exeи поместите в папкуbin/проекта
- Скачайте
-
FFmpeg:
# Ubuntu/Debian sudo apt-get update sudo apt-get install ffmpeg # �ли укажите путь в config.json или переменной окружения FFMPEG_PATH
-
yt-dlp:
# Установка через pip (рекомендуется) pip install yt-dlp # �ли скачайте бинарник и поместите в папку bin/ проекта wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O bin/yt-dlp chmod +x bin/yt-dlp
Вы можете указать путь к FFmpeg одним из способов:
-
Через переменную окружения:
export FFMPEG_PATH=/usr/bin # Linux # или set FFMPEG_PATH=C:\ffmpeg\bin # Windows
-
Через config.json:
{ "ffmpeg": { "path": "/usr/bin" // Linux или "C:\\ffmpeg\\bin" для Windows } }
yarn checkyarn devПриложение будет доступно по адресу: http://localhost:3000
track-parser/
в”њв”Ђв”Ђ app/
│ ├── api/ # API маршруты
│ │ ├── audio/[trackId]/ # Служение аудиофайлов
│ │ ├── download/ # Скачивание треков
│ │ ├── process-track/ # Обработка треков
│ │ ├── reject-track/ # Отклонение треков
│ │ ├── test-ftp/ # Тест FTP соединения
│ │ ├── tracks/ # Получение списка треков
│ │ ├── update-metadata/ # Обновление метаданных
│ │ └── upload-ftp/ # Загрузка на FTP
│ ├── components/ # React компоненты
│ │ ├── DownloadTrack.tsx # Компонент скачивания
│ │ ├── TrackPlayer.tsx # Аудиоплеер
│ │ ├── MetadataEditor.tsx # Редактор метаданных
│ │ └── FtpUploader.tsx # FTP загрузчик
│ ├── globals.css # Глобальные стили
│ ├── layout.tsx # Корневой layout
│ └── page.tsx # Главная страница
├── lib/ # Библиотечные функции
│ ├── config.ts # Управление конфигурацией
│ └── processTracks.ts # Логика обработки треков
├── types/ # TypeScript типы
│ └── track.ts # Типы для треков
├── config.json # Конфигурация приложения
├── next.config.js # Конфигурация Next.js
├── package.json # Зависимости
├── postcss.config.js # Конфигурация PostCSS
├── tailwind.config.js # Конфигурация Tailwind CSS
├── tsconfig.json # Конфигурация TypeScript
└── README.md # Документация
- Перейдите на вкладку "Download Tracks"
- Выберите источник (YouTube или YouTube Music)
- Введите URL трека
- Нажмите "Download Track"
- Отслеживайте прогресс скачивания
- Перейдите на вкладку "Listen & Review"
- Выберите трек из списка скачанных
- �спользуйте аудиоплеер для прослушивания
- Нажмите "Accept Track" или "Reject Track"
- Перейдите на вкладку "Edit Metadata"
- Выберите обработанный трек
- Отредактируйте метаданные:
- Название
- Артист
- Альбом
- Тип трека (Быстрый/Средний/Медленный)
- Рейтинг (1-10)
- Год
- Нажмите "Save Metadata"
- Перейдите на вкладку "FTP Upload"
- Настройте FTP параметры:
- Host
- Port
- Username
- Password
- Secure connection (опционально)
- Нажмите "Test Connection" для проверки
- Выберите треки для загрузки или нажмите "Upload All Tracks"
Приложение автоматически создает и управляет следующими папками:
downloads/- Скачанные трекиprocessed/- Обработанные трекиrejected/- Отклоненные трекиserver_upload/- Треки для загрузки на сервер
GET /api/tracks- Получение списка трековPOST /api/download- Скачивание трекаPOST /api/process-track- Обработка трекаPOST /api/reject-track- Отклонение трекаPOST /api/update-metadata- Обновление метаданныхPOST /api/upload-ftp- Загрузка на FTPPOST /api/test-ftp- Тест FTP соединенияPOST /api/radio/check-batch- Проверка, какие треки уже есть в плейлисте Streaming.CenterGET /api/audio/[trackId]- Получение аудиофайла
- Frontend: Next.js 14, React 18, TypeScript
- Styling: Tailwind CSS
- Audio Processing: FFmpeg, fluent-ffmpeg
- Download: ytdl-core
- FTP: basic-ftp
- File Management: fs-extra
- Audio Metadata: node-audiotags
yarn dev # Запуск в режиме разработки
yarn build # Сборка для продакшена
yarn start # Запуск продакшен версии
yarn lint # Проверка кодаСоздайте файл .env.local для локальных настроек:
NEXT_PUBLIC_API_URL=http://localhost:3000✅ Проект поддерживает деплой на Vercel.
- Подключите репозиторий к Vercel.
- Добавьте переменные окружения (Supabase, RapidAPI, FTP) — см. VERCEL_DEPLOY.md.
- Деплой выполняется автоматически при
git push.
Ограничения те же, что и на Netlify: yt-dlp недоступен, обработка через FFmpeg.wasm.
✅ Проект полностью поддерживает деплой в Netlify!
Проект был переработан для полной поддержки Netlify с graceful degradation - все функции работают, но обработка аудио выполняется только при наличии FFmpeg.
-
Скачивание через RapidAPI:
- ✅ Скачивание треков с YouTube (обычный YouTube, не Music)
- ✅ Получение метаданных
- ✅ Прослушивание треков
-
Веб-интерфейс:
- ✅ Все UI компоненты
- ✅ Редактирование метаданных
- ✅ Просмотр списка треков
-
Обработка треков (с graceful degradation):
- ✅ Функция обработки работает без ошибок
- ⚠️ Обрезка не выполняется (файл копируется без изменений)
- ⚠️ BPM не определяется
- ✅ Настройки обрезки сохраняются в метаданных
-
yt-dlp:
- ❌ Нельзя запускать бинарные файлы в serverless
- ❌ YouTube Music и Яндекс.Музыка недоступны
- ✅ Обычный YouTube работает через RapidAPI
-
Обработка аудио:
- ⚠️ Обрезка треков не выполняется (требует FFmpeg)
- ⚠️ Fade in/out не применяется (требует FFmpeg)
- ⚠️ Определение BPM не работает (требует FFmpeg)
- ✅ Функции не падают с ошибками, работают gracefully
Подробнее: См. NETLIFY_LIMITATIONS.md
-
Переменные окружения в Netlify:
RAPIDAPI_KEY- ваш ключ RapidAPIRAPIDAPI_HOST- хост RapidAPI (обычноyoutube-mp36.p.rapidapi.com)
-
Конфигурация уже настроена:
- Файл
netlify.tomlуже содержит необходимые настройки - Next.js плагин для Netlify установлен
- Файл
-
Деплой:
# Подключите репозиторий к Netlify # Netlify автоматически соберет проект при push в main ветку
Проект готов для деплоя в Netlify:
- ✅ Все функции работают без ошибок
- ✅ Скачивание через RapidAPI работает
- ✅ Редактирование метаданных работает полностью
- ⚠️ Обработка аудио работает с graceful degradation (без обработки, но без ошибок)
Для полной функциональности (обработка аудио):
- ✅ �спользуйте VPS или выделенный сервер
- ✅ Установите FFmpeg и yt-dlp на сервере
- ✅ Деплойте Next.js приложение на сервер
- ✅ Все функции будут работать полностью
Бинарники в bin/:
- ✅ Полезны для локальной разработки (полная функциональность)
- ✅ Полезны для деплоя на VPS/сервер (полная функциональность)
- ⚠️ Не используются в Netlify (но проект работает gracefully)
-
Windows:
- Убедитесь, что FFmpeg установлен и доступен в PATH
- Проверьте версию:
ffmpeg -version - �ли укажите путь через
FFMPEG_PATHилиconfig.json
-
Linux:
- Установите через пакетный менеджер:
sudo apt-get install ffmpeg - Проверьте версию:
ffmpeg -version - Если установлен в нестандартном месте, укажите путь через
FFMPEG_PATH
- Установите через пакетный менеджер:
-
Путь не найден:
- Проверьте, что путь указывает на директорию с
ffmpegРёffprobe - РќР° Windows:
C:\ffmpeg\bin\(должны бытьffmpeg.exeиffprobe.exe) - На Linux:
/usr/bin/(должны бытьffmpegиffprobe)
- Проверьте, что путь указывает на директорию с
-
Windows:
- Убедитесь, что
yt-dlp.exeнаходится в папкеbin/проекта
- Убедитесь, что
-
Linux:
- Установите через pip:
pip install yt-dlp - �ли скачайте бинарник в папку
bin/и сделайте исполняемым:chmod +x bin/yt-dlp - Проверьте:
yt-dlp --version
- Установите через pip:
-
RapidAPI не работает:
- Проверьте правильность API ключа
- Убедитесь, что у вас есть активная подписка на RapidAPI
- Приложение автоматически попробует yt-dlp как fallback
-
yt-dlp не работает:
- Убедитесь, что yt-dlp установлен и доступен
- Обновите yt-dlp:
pip install --upgrade yt-dlp(Linux) или скачайте новую версию (Windows) - Проверьте, что FFmpeg установлен (требуется для конвертации в MP3)
- Проверьте правильность FTP настроек
- Убедитесь, что сервер поддерживает выбранный тип соединения
- Проверьте файрвол и настройки безопасности
- Для больших файлов увеличьте лимиты Node.js:
node --max-old-space-size=4096 yarn dev
MIT License
При возникновении проблем создайте issue в репозитории проекта.