Reels Pipeline
Raw 16:9 → polished 9:16 in one pass.
When to use
- User has a single source clip (gameplay, screen recording, talking head).
- Target is IG Reels / YT Shorts / TikTok (1080×1920, ≤ 90s).
- User wants captions burned in (better retention than IG's auto-captions).
Pipeline stages
input.mp4 (16:9)
↓ 1. trim to hook + body + payoff (≤ 60s)
↓ 2. crop or pad to 9:16
↓ 3. mix BGM at -18 LUFS under voice
↓ 4. burn captions (SRT → ass with style)
↓ 5. prepend 1.5s hook frame (text + freeze)
↓ 6. append 2s end card (handle + CTA)
↓ 7. encode H.264 + AAC, ≤ 100 MB
output.mp4
Reference FFmpeg command (single pass)
ffmpeg -i input.mp4 -i bgm.mp3 -i hook.png -i end.png \
-filter_complex "\
[0:v]crop=ih*9/16:ih,scale=1080:1920,setsar=1[main]; \
[2:v]scale=1080:1920[hook]; [3:v]scale=1080:1920[end]; \
[hook][main][end]concat=n=3:v=1:a=0[v]; \
[0:a]volume=1.0[a0]; [1:a]volume=0.25[a1]; \
[a0][a1]amix=inputs=2:duration=first[a]; \
[v]subtitles=captions.ass[vout]" \
-map "[vout]" -map "[a]" \
-c:v libx264 -preset medium -crf 21 \
-c:a aac -b:a 128k -ar 44100 \
-movflags +faststart \
-t 60 output.mp4
Captions style (.ass)
- Font: Inter Bold, size 64
- Outline: 4px black, no shadow
- Position: lower-third (PlayResY=1920, MarginV=240)
- Max 2 lines, 18 chars/line, 1.2s min display
Hook frame design
The first 1.5 seconds decide retention. Keep these rules:
- One big text claim, max 6 words ("I lost ₹50k. Here's why.")
- Recognisable still from the body, not a generic title card
- High contrast: dark frame + bright text, or vice versa
What NOT to do
- Don't centre-crop a horizontal gameplay clip blindly — kill-feed and minimap get lost. Crop with intent.
- Don't mix BGM louder than -15 LUFS — voice gets buried.
- Don't burn captions on the bottom 10% — IG UI covers it.
Niche tuning (thenoobstack)
- Gameplay: hook = score/kill count visible
- Tech: hook = before/after split-screen
- AI: hook = one-line claim + tool name
- Earning: hook = specific number (₹/$), not "make money fast"