Self-hosted Opus Clip alternative — reels.biba.live
Problem: MXF and MPG files (TV broadcast formats) often contain: - Multiple audio streams (4-8 streams for different language tracks) - Multichannel layouts (5.1, 7.1) instead of stereo - Default ffmpeg behavior was -c:a aac without channel limit, which meant multichannel got transcoded as multichannel AAC, overwriting what should have been clean stereo Solution: 1. get_audio_streams() helper probes all audio streams with ffprobe - Returns codec, channels, sample_rate, language, layout for each 2. build_audio_args() picks best stream + downmix: - Prefers first 2-channel stereo stream (usually main mix) - Falls back to first stream if none are 2-ch - Always: -ac 2 (force stereo downmix), -ar 48000, -c:a aac, -b:a 192k - Bitrate raised from 128k to 192k for music quality 3. Smart trim path now detects broadcast formats: - .mxf, .mpg, .mpeg, .ts, .m2ts, .mts → transcode (not stream copy) - Standard MP4/MOV → stream copy (faster, lossless) 4. Pre-conversion step for broadcast files without trim: - Even without --start/--duration, MXF/MPG get converted to MP4 - Same audio handling as trim path 5. Main render adds explicit -map 0✌️0 -map 0🅰️0? -ac 2 to ensure only first video and first audio stream get encoded, with stereo 6. ACR recognize also gets -map 0🅰️0 -ac 2 for MXF compatibility 7. UI accepts: video/*,.mxf,.mpg,.mpeg,.ts,.m2ts,.mts 8. Upload limit raised: 2GB → 10GB (MXF files are large) This means a TV broadcast MXF with [SLO/EN/DE language tracks] now correctly outputs stereo MP4 with the main language track preserved. |
||
|---|---|---|
| app | ||
| scripts | ||
| templates | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| README.md | ||
| requirements.txt | ||
Reels Clipper · biba.live
Self-hosted Opus Clip alternativa za FOLX TV / PTC. Pretvori 16:9 video v 9:16 reels/shorts/tiktok format z auto face tracking, podnapisi (sl/de/en) in avto-detekcijo refrena v glasbenih pesmih.
Features
- 📤 Drag & drop upload (do 2 GB)
- 📺 YouTube URL paste (yt-dlp)
- 🎯 Smart reframe: track (face follow), center, blur (za glasbo)
- 🎵 Auto-chorus detection (Whisper + energy hibrid)
- 📝 Burned-in podnapisi (faster-whisper, multi-jezik)
- 🎨 3 stili podnapisov: reels, yellow (MrBeast), minimal
- 🔐 HTTP Basic Auth
- 📊 Real-time progress (Server-Sent Events)
- 📦 Docker / Coolify ready
Quick start (lokalno)
docker compose up --build
# odpri http://localhost:8000
Default login: sebastjan / nastavi AUTH_PASS v .env.
Coolify deploy
- V Coolify ustvari nov projekt → Docker Compose iz tega repoja
- Domena:
reels.biba.live - Env vars:
AUTH_USER=sebastjan AUTH_PASS=<močno geslo> MAX_UPLOAD_MB=2000 - Volume
reels_datase ustvari avtomatsko - Deploy → Coolify postavi Traefik reverse proxy + SSL via Let's Encrypt
Pipeline
Upload / YouTube
↓
[ yt_download.py ] ← samo če YouTube
↓
[ find_chorus.py ] ← samo če auto_chorus=true (Whisper + RMS analiza)
↓
[ reframe.py ] ← 16:9 → 9:16 (track / center / blur)
↓
[ subtitle.py ] ← Whisper transkripcija + burn-in
↓
reel.mp4
API
POST /api/upload— multipart file upload, vrnejob_idPOST /api/youtube— JSON{url, mode, lang, ...}POST /api/process— start processing za uploaded jobGET /api/jobs— list vsehGET /api/jobs/{id}— statusGET /api/stream/{id}— SSE stream progressGET /api/download/{id}— final reelDELETE /api/jobs/{id}— pobriši
Dependencies
- FFmpeg (system)
- faster-whisper (transkripcija)
- OpenCV (face detection)
- yt-dlp (YouTube)
- FastAPI + uvicorn (server)