A local web app to combine dual-camera dog training videos side-by-side.
Upload videos from two cameras, arrange them in order, and get a single combined video with both views.
- Node.js 18+
- FFmpeg (
brew install ffmpegon macOS)
# Install dependencies
npm install
cd client && npm install && cd ..
# Run the app (starts server on :3001 and client on :5173)
npm run dev- Upload videos - Drag videos into Camera A (left) and Camera B (right) zones
- Arrange order - Videos auto-sort by filename; drag to reorder if needed
- Configure - Adjust quality settings (CRF, preset, resolution, audio)
- Process - Click "Process Videos" when both zones have equal video counts
- Download - Get your combined video when processing completes
| Setting | Default | Description |
|---|---|---|
| CRF | 28 | Quality (18=best, 35=smallest file) |
| Preset | slow | Encoding speed vs compression tradeoff |
| Max Width | original | Scale down final video width |
| Audio | 96k | Audio bitrate |
server/ # Express backend (port 3001)
routes/ # upload, process, reset endpoints
services/ # FFmpeg video processing
client/ # React frontend (Vite, port 5173)
src/components # DropZone, ConfigPanel
- Designed for Xiaomi C400 cameras (handles variable frame rate)
- Videos are combined 50/50 horizontally, audio merged from both
- All processing happens locally - no cloud upload
- Reset button clears all uploaded files