Все кейсы

Пайплайн транскодирования аудио

Серверный пайплайн: загрузка FLAC/MP3/OGG, транскодирование в нужные форматы, стриминг через S3. Lossless воспроизведение в браузере с любого устройства.

NuxtTypeScriptS3Node.js
Пайплайн транскодирования аудио

Задача

Мелотека - облачный музыкальный сервис, где пользователь загружает свою коллекцию и слушает с любого устройства. Проблема: люди хранят музыку в разных форматах. Аудиофилы загружают FLAC (40-60 МБ на трек), обычные пользователи - MP3 и OGG. Нужно было решить три задачи одновременно: сохранить оригиналы без потерь, создать оптимизированные копии для стриминга через браузер и обеспечить мгновенный старт воспроизведения без буферизации. При этом всё должно работать на бюджетной инфраструктуре - стартап на ранней стадии, каждый рубль на счету.

Решение

Спроектировал асинхронный пайплайн обработки аудио на Node.js. При загрузке файл сразу отправляется в S3-хранилище на Yandex Cloud - оригинал сохраняется как есть. Параллельно создается задача в очереди на транскодирование. Воркер берет файл, прогоняет через ffmpeg: генерирует AAC-версию для браузерного стриминга (128/256/320 kbps в зависимости от тарифа пользователя), извлекает метаданные (длительность, битрейт, сэмплрейт), создает waveform-превью для визуализации. Готовые файлы заливаются обратно в S3. Стриминг реализован через presigned URLs с ограниченным временем жизни - клиент получает прямую ссылку на S3, CDN кэширует популярные треки. Для lossless воспроизведения отдается оригинальный FLAC через отдельный эндпоинт с поддержкой Range-запросов.

Результат

Среднее время обработки трека - 15 секунд (FLAC 40 МБ). Мгновенный старт воспроизведения благодаря CDN-кэшированию и presigned URLs. Хранение обходится в ~0.5 руб/ГБ в месяц на S3. Пользователи загружают FLAC и получают lossless в браузере без установки отдельного приложения. Пайплайн обрабатывает до 100 треков параллельно благодаря очереди задач.

Похожие кейсы

Миграция платформы на React и NestJS
Переписал ядро o5.Еда с PHP/jQuery на TypeScript/React/NestJS. Модульная архитектура, типизированный API, 500+ бизнес-клиентов без простоя при переходе.
ReactTypeScriptNestJSNode.js
Интеграция каталога MusicBrainz
Подключил каталог MusicBrainz (127 000+ артистов), скробблинг в ListenBrainz, Telegram Mini App для мобильного доступа к библиотеке.
NuxtTypeScriptTelegram Mini App
SEO-архитектура для сайтов доставки
Отдельные страницы товаров с Schema.org разметкой, SSR, мета-теги. Клиентские сайты выходят в топ Google по локальным запросам.
NuxtTypeScriptTailwind CSS
Онлайн-оплата без комиссии для ресторанов
Интеграция прямого эквайринга для клиентов SaaS-платформы доставки еды. 0% комиссии на заказы вместо 3-5% у агрегаторов.
NuxtTypeScriptNode.js

Нужно решить похожую задачу?

Напишите - обсудим ваш проект или идею.

© 2026 Николай Косарев