How to add captions to instagram reels locally
- Step 1Drop your Reel into the burner — Click the dropzone or drag your clip in. Accepted containers: MP4, MOV, MKV, WebM, AVI, M4V, TS. A 1080×1920 vertical export is ideal for Reels; any aspect ratio is accepted.
- Step 2Pick your caption file — In the Subtitle file panel, click Pick and choose your
.srtor.vtt. The format is read from the extension. The file stays local — it's written into the in-browser FFmpeg filesystem, not uploaded. - Step 3Choose a style preset — Set Style preset. For Reels, subtle keeps captions understated, bold maximises a meme/hook look, and youtube gives a caption-strip box. Each preset applies a fixed ASS
force_styleto every cue (font, size, colour, outline, and bottom margin). - Step 4Run the burn — Click Run Burn Subs. FFmpeg renders the captions into each frame, re-encodes video with libx264 (
-preset medium -crf 20), and copies the audio. The render dashboard shows progress. - Step 5Download the MP4 — The output is always an MP4 (H.264 + copied audio). Grab it from the result card; the filename gets a
-out.mp4suffix. - Step 6Upload to Reels and check the safe zone — Upload through the Instagram app. Preview against the Reels UI — the right-rail icons and the bottom caption/CTA area. If captions clash, switch presets: the bottom margin differs per preset (subtle sits lowest at 30px, tiktok highest at 80px). This tool exposes the five presets, not free-form Y placement.
Preset bottom margins vs the Reels safe zone
Bottom margin (MarginV) is the key difference for Reels, where the lower third is crowded by UI. All presets are bottom-centre aligned (Alignment=2).
| Preset | Font / size | MarginV (off bottom) | Reels fit |
|---|---|---|---|
| subtle | Arial 18, light grey | 30px | Low and quiet — risks the caption/CTA overlay; good for clean shots |
| youtube | Roboto 22 on black box | 40px | Readable strip; box helps over busy footage |
| bold | Impact 36, white | 60px | High-impact hook captions; clears most UI |
| tiktok | Arial 28, bold white | 80px | Highest — safest clearance if cross-posting to TikTok |
| default | FFmpeg default white | default (low) | Smallest text; use only if your SRT is pre-styled |
Inputs, output, and limits
Grounded in the processor and tier-limits config.
| Property | Value |
|---|---|
| Video input | MP4, MOV, MKV, WebM, AVI, M4V, TS |
| Caption input | .srt or .vtt (by extension) |
| Output | MP4 · H.264 (libx264 CRF 20) · audio copied |
| Styling | 5 presets only — no custom font/colour/position UI |
| Free tier | 1 GB / file · 1 file |
| Pro | 10 GB / file · up to 5 files |
| Pro + Media | 100 GB / file (streamed) · up to 50 files |
Cookbook
Caption recipes for the mute-by-default Reels feed. The only controls are the file picker and the preset dropdown — these show what each produces.
Understated captions with the subtle preset
For a polished, on-brand Reel where captions should support but not shout, the subtle preset renders small light-grey text.
Options: Subtitle file = reel.vtt Style preset = SUBTLE FFmpeg force_style: FontName=Arial,FontSize=18,PrimaryColour=&H00DDDDDD, OutlineColour=&H00000000,BorderStyle=1,Outline=1, Shadow=0,Alignment=2,MarginV=30 Result: small grey captions low on the frame.
Hook-style captions with the bold preset
When the goal is stopping the scroll, the bold preset uses Impact 36 with a heavy outline for maximum legibility on mute.
Options: Style preset = BOLD FFmpeg force_style: FontName=Impact,FontSize=36,PrimaryColour=&H00FFFFFF, OutlineColour=&H00000000,BorderStyle=1,Outline=4, Shadow=2,Bold=1,Alignment=2,MarginV=60 Result: big punchy white captions, 60px off bottom.
Captions collide with the Reels caption box
Symptom: text overlaps the bottom CTA/caption overlay. The lever in this tool is the preset's margin, not free-form Y.
Problem: SUBTLE preset -> MarginV=30 -> too low, behind UI. Fix options (in this tool): - BOLD -> MarginV=60 - TIKTOK -> MarginV=80 (highest) There is no custom vertical offset slider; pick the preset whose margin clears your overlay.
Using a VTT exported from a transcription app
WebVTT files drop in directly — no conversion needed. Keep the .vtt extension so the tool parses it correctly.
1. Export captions as WebVTT (reel.vtt) 2. Pick reel.vtt in the Subtitle file panel 3. Preset = SUBTLE, Run The tool detects .vtt by extension and feeds it to the subtitles filter; output is MP4 with captions burned in.
Reframe a landscape clip, then caption it
If your source is widescreen, crop to vertical before burning so the caption margin is measured against the final 9:16 frame.
Pipeline: 1. /video-tools/auto-reframe -> 9:16 vertical 2. Verify SRT timing on the cropped clip 3. Subtitle Burner -> preset BOLD -> Run For a square feed post instead of a Reel, format with /video-tools/instagram-feed-formatter first.
Edge cases and what actually happens
Instagram strips the soft subtitle track
Stripped on uploadMuxing an SRT alongside the video produces no captions on Reels — Instagram removes embedded subtitle streams when it re-encodes. Burning into the frame is the only approach that survives, which is what this tool does.
No caption file selected
BlockedRunning without a subtitle file throws Pick an .srt or .vtt file. The burner has no auto-transcription — you bring the captions, it bakes them in.
Captions sit behind the Reels UI
Pick a higher presetThe subtle preset's 30px margin can fall behind the bottom caption box. Switch to bold (60px) or tiktok (80px) for more clearance. There is no manual position control — the preset's MarginV is the dial.
SRT timing leads or lags the speech
By design — rendered as-isCues burn at their SRT timestamps; the tool does not re-time. Correct the SRT timecodes and re-burn for accurate sync.
Non-Latin script with the Impact font
Font-dependentThe bold preset uses Impact, which has limited glyph coverage. For accented Latin, CJK, or Arabic captions, the default preset (FFmpeg's fontconfig fallback) is the most reliable; check the rendered output before publishing.
Silent Reel (no audio track)
Preserved-c:a copy finds no audio to copy and the burn still completes, producing a captioned video-only MP4. No error.
4K master over the Free 1 GB cap
1 GB capFree tier allows 1 GB per file. A high-bitrate 4K source can exceed it; Pro (10 GB) or Pro + Media (100 GB, streamed) handle larger files. There is no minutes cap, only size.
Re-encode softens fine detail
Expected — CRF 20Hard-subbing requires one re-encode. CRF 20 keeps it visually lossless; Instagram then applies its own compression, so a clean CRF 20 master gives the platform good source pixels.
Frequently asked questions
Why burn captions instead of using Instagram's caption sticker?
The auto-caption sticker only lives while the clip is native to Instagram, can mistranscribe, and disappears on download or repost. Burned captions come from your corrected SRT, look identical to every viewer, and persist through Instagram's re-encode and any re-share.
Do captions show when the Reel is muted?
Yes — that's the point. Burned-in text is part of the frame, so it displays whether or not the viewer turns on sound. Since Reels autoplay muted, this is what keeps your hook readable.
Can I choose my own font and colour?
You choose from five presets (default, tiktok, youtube, subtle, bold), each with a fixed font, size, colour, outline, and bottom margin. There is no custom font or colour picker in this tool. Subtle is grey Arial 18; bold is Impact 36; tiktok is bold white Arial 28.
Is my Reel uploaded to a server?
No. Everything runs in your browser via FFmpeg.wasm. The video and caption file are processed locally and the burned MP4 is returned to you without ever leaving your machine.
Does it accept .vtt or only .srt?
Both. Files ending in .vtt are read as WebVTT; everything else is parsed as SRT. Keep the correct extension so the tool picks the right format.
Will my audio stay in sync with the trending sound?
Yes. Audio is stream-copied unchanged (-c:a copy), so it stays exactly aligned and at original loudness. Only the video is re-encoded to paint in the captions.
What if captions land behind the Reels UI?
Switch to a preset with a higher bottom margin: subtle is 30px, youtube 40px, bold 60px, tiktok 80px. There's no free-form vertical slider, but the preset margins span the common safe-zone needs.
What format is the output?
Always MP4 with H.264 video (libx264, CRF 20) and copied audio. That's exactly what Instagram wants, so no extra conversion is required.
How large a clip can I caption?
Free tier handles up to 1 GB per file; Pro up to 10 GB; Pro + Media up to 100 GB with streaming. There's no length limit — the cap is on file size and batch count.
Can it auto-transcribe my speech into captions?
No. This tool burns a caption file you provide — it does not generate captions from audio. Create or export an SRT/VTT first, then bring it here to bake it in.
Should I crop to vertical before captioning?
For Reels, yes. Use auto-reframe to crop 16:9 to 9:16 first, then burn, so the caption margin is measured against the final vertical frame. For a square grid post, use instagram-feed-formatter.
How do I get an SRT from an existing captioned video?
Use subtitle-extractor to pull a soft track out as SRT, fix it in a text editor, then bring it back here to hard-burn. For a captioned GIF, see video-to-gif.
Privacy first
Every JAD Video tool runs entirely in your browser via WebCodecs and FFmpeg (WebAssembly). Your video files never leave your device — verified by zero outbound network requests during processing.