This project is a backend data-processing pipeline for audio and video files, built with Express.js. Users can upload files directly to S3 using pre-signed URLs, and files are processed asynchronously using BullMQ + Redis workers. The pipeline handles format conversion, metadata extraction, waveform generation, and uploads the processed files back to S3.
demo.webm
- Direct S3 uploads via pre-signed URLs
- Automatic worker triggering after file upload
- Audio format conversion (e.g., MP3/AAC)
- Metadata extraction from audio/video files
- Waveform generation stored as JSON
- Processed files and waveform JSON are uploaded back to S3
- Asynchronous processing with BullMQ + Redis
Make sure the following are installed:
- Node.js
- npm
- FFmpeg
- audiowaveform
- Redis server
npm installnpm run devnpm run workernpx prisma generate
npx prisma db pushnpm run lint
npm run lint:fix
npm run formatMake sure Redis is running before starting the worker. FFmpeg and audiowaveform must be installed and available in your system PATH.
- Client requests a pre-signed URL from the backend
- Client uploads the file directly to S3
- A worker picks up the uploaded file
- Worker downloads the file locally (required by FFmpeg)
- Extracts metadata using FFprobe
- Generates a mute video from the original video
- Extracts audio-only track and converts to AAC format
- Generates waveform JSON for the audio
- Uploads processed files back to S3
- Saves all metadata and S3 keys in the database
