How to burn srt subtitles into mp4 for tiktok
- Step 1Open the Subtitle Burner and drop your video — Drag your TikTok clip onto the dropzone, or click to browse. Accepted containers are MP4, MOV, MKV, WebM, AVI, M4V, and TS. A vertical 1080×1920 export is ideal but any aspect ratio works — the caption position is measured from the bottom edge.
- Step 2Pick your .srt file — In the Subtitle file panel, click Pick and choose your
.srt. The tool also accepts.vtt. It decides the format from the file extension, so keep the.srtextension intact. Your captions stay on your machine — the file is written into the in-browser FFmpeg filesystem, never uploaded. - Step 3Select the TikTok style preset — Set Style preset to TIKTOK. This applies an ASS
force_styleoverride to every cue: bold white Arial at size 28, a 3px black outline with a soft shadow, bottom-centre alignment, and an 80px bottom margin so text clears the in-app UI. - Step 4Run the burn — Click Run Burn Subs. FFmpeg renders your SRT into each frame via the
subtitlesfilter, re-encodes video with libx264 (-preset medium -crf 20), and copies the audio stream. Progress shows in the render dashboard. - Step 5Download the MP4 — The output is always an MP4 (H.264 video, copied audio). Download it from the result card. The filename defaults to a
-out.mp4suffix. - Step 6Upload to TikTok and verify on a phone — Upload the burned MP4 through the TikTok app or web uploader. Preview on an actual phone — confirm the caption strip clears the right-rail icons and the bottom caption box. If it sits too low, the default preset (lower position) or re-timing the SRT is the lever; this tool exposes the five presets, not free-form positioning.
What each style preset paints over your TikTok clip
The five presets are the only styling controls — each maps to a tested ASS force_style string applied to every cue. The default preset applies no override and renders the SRT in FFmpeg's plain white default.
| Preset | Font / size | Look | Position (Alignment / MarginV) | Best for |
|---|---|---|---|---|
| default | FFmpeg default (~16–18px) | Plain white, thin black outline — no override applied | Bottom-centre, default margin | When your SRT already carries its own styling or you want the smallest text |
| tiktok | Arial 28, bold | White with 3px black outline + 1px shadow | Bottom-centre, MarginV 80 (lifted high) | TikTok feed — clears username/caption UI |
| youtube | Roboto 22 | White on a semi-transparent black box (BorderStyle 4) | Bottom-centre, MarginV 40 | Caption-strip look if you cross-post to Shorts |
| subtle | Arial 18 | Light grey (#DDDDDD), 1px outline, no shadow | Bottom-centre, MarginV 30 | Understated captions that don't dominate the frame |
| bold | Impact 36, bold | White, thick 4px outline + 2px shadow | Bottom-centre, MarginV 60 | Tabloid/meme energy, maximum legibility |
Inputs, output, and the exact encode
Verified against the processor: the subtitles filter plus a single libx264 re-encode at CRF 20, audio copied.
| Property | Value |
|---|---|
| Video input | MP4, MOV, MKV, WebM, AVI, M4V, TS |
| Subtitle input | .srt or .vtt (format chosen by file extension) |
| Output container | Always MP4 |
| Video codec | H.264 (libx264), -preset medium -crf 20 |
| Audio | Stream-copied (-c:a copy) — not re-encoded |
| Caption engine | FFmpeg subtitles filter with per-preset force_style |
| Free tier | 1 GB per file, 1 file at a time |
| Pro / Pro + Media | 10 GB / 100 GB per file (streamed); no duration cap |
Cookbook
Real before/after for burning an SRT into a TikTok upload. The tool exposes a file picker and a 5-way preset dropdown — these recipes show what each choice produces and where the limits are.
Standard TikTok burn with the tiktok preset
The everyday case: a vertical clip plus a hand-corrected SRT, burned with the TikTok preset so captions clear the in-app UI.
Inputs:
dance-clip.mp4 1080x1920, H.264 + AAC
dance-clip.srt 42 cues
Options:
Subtitle file = dance-clip.srt
Style preset = TIKTOK
FFmpeg (effective):
-i dance-clip.mp4
-vf subtitles=sub.srt:force_style='FontName=Arial,FontSize=28,
PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BorderStyle=1,
Outline=3,Shadow=1,Bold=1,Alignment=2,MarginV=80'
-c:v libx264 -preset medium -crf 20 -c:a copy out.mp4
Output:
dance-clip-out.mp4 — white bold captions, 80px off bottomKeeping captions small with the default preset
If your SRT already has the look you want, or you want minimal text, the default preset applies no force_style and lets FFmpeg render the cues plainly.
Options: Style preset = DEFAULT FFmpeg (effective): -vf subtitles=sub.srt (no force_style override) Result: Plain white text, thin outline, FFmpeg's default size and bottom position. Smaller and lower than the tiktok preset.
Captions sit behind the TikTok caption box
Symptom: burned text overlaps the username/description overlay. The tiktok preset's MarginV=80 is tuned for this; if it still clashes, the cause is usually the platform UI, not the burn.
Problem: Used DEFAULT preset -> text rendered low, behind UI. Fix: Switch Style preset to TIKTOK (MarginV=80 lifts cues higher). Note: This tool offers 5 presets, not free-form Y position. For a custom vertical offset, edit MarginV in an ASS file with the subtitles filter offline — out of scope here.
Fixing a typo without re-cutting the video
Captions are data; the SRT is plain text. Correct it in any editor and re-burn — the video is untouched until you re-run.
1. Open dance-clip.srt in Notepad / VS Code
2. Fix: 'Lets go' -> "Let's go"
3. Save (keep .srt extension)
4. Re-pick the SRT, keep preset = TIKTOK, Run
Result: corrected caption, identical video + audio,
~seconds of re-encode.Reframe first, then burn
If your source is 16:9, crop to vertical before burning so captions are positioned for the final 9:16 canvas — the burner reads bottom margin from the frame it receives.
Pipeline: 1. /video-tools/auto-reframe (16:9 -> 9:16 smart crop) 2. Re-time / verify the SRT against the cropped clip 3. Subtitle Burner: preset = TIKTOK Why order matters: MarginV=80 is measured from the 9:16 frame's bottom, so reframing first keeps captions in the safe zone.
Edge cases and what actually happens
Soft SRT muxed into the MP4 instead of burned
Stripped by TikTokA subtitle track muxed alongside the video (soft subs) is removed when TikTok re-encodes on upload — viewers see no captions. This tool avoids that entirely: it paints the cues into the frame via the subtitles filter, so the text is pixels, not a removable stream.
SRT timing is offset from the video
By design — burned as-isThe burner renders cues at exactly the timestamps in your SRT; it does not re-sync. If captions lead or lag, fix the timing in your SRT (a constant offset is a quick find/replace on the 00:00:00,000 stamps) and re-burn.
File picked has a .txt or wrong extension
Treated as SRTFormat is chosen by extension: only names ending .vtt are read as WebVTT; everything else is parsed as SRT. A correctly-formatted SRT saved as .txt will be treated as SRT, but a mislabelled or malformed file makes FFmpeg's subtitles filter fail. Keep the real .srt/.vtt extension and content matched.
No subtitle file selected
Error · blockedThe run throws Pick an .srt or .vtt file. if the subtitle slot is empty. The burner needs both the video and a caption file — there is no auto-transcription step in this tool.
Emoji or non-Latin script in cues
Font-dependentThe tiktok/subtle presets use Arial; bold uses Impact; youtube uses Roboto. Glyphs missing from the chosen font render as tofu boxes. For CJK, Arabic, or heavy emoji, the default preset (which leans on FFmpeg's bundled fontconfig defaults) is the safest, and you may need to confirm coverage before publishing.
Source has no audio track
Preserved-c:a copy simply has nothing to copy on a silent clip — the burn still succeeds and produces a video-only MP4. No error is raised.
Very long or 4K clip on Free tier
1 GB capFree tier allows 1 GB per file and one file at a time. A long 4K source can exceed that; Pro raises the ceiling to 10 GB and Pro + Media to 100 GB with streaming. There is no minutes limit — only file size and batch count.
Dropped two videos with one SRT
Per-file batchIf your tier allows multiple files, the burner processes them as a batch, applying the same selected SRT and preset to each. That is rarely what you want for distinct clips — burn each clip with its own matching SRT one at a time for correct captions.
Re-encode looks softer than the source
Expected — CRF 20Burning requires one re-encode (you can't paint text without re-drawing frames). CRF 20 is visually lossless for most footage; TikTok then re-compresses again, so starting from a clean CRF 20 master gives the platform good source pixels to work from.
Frequently asked questions
Will burned captions really survive TikTok's upload?
Yes. Burned captions are part of the video frame, so TikTok's ingest re-encode re-compresses them along with everything else but cannot remove them. Soft subtitle tracks, by contrast, are stripped on upload. This is the whole reason to hard-burn for short-form platforms.
What's the difference between this and TikTok's auto-captions?
TikTok auto-captions are generated by the platform, can be turned off by the viewer, sometimes mistranscribe, and don't appear on downloaded/re-uploaded copies. Burned captions come from your own corrected SRT, look identical to every viewer, and persist through downloads, duets, and stitches.
Can I change the font, colour, or exact position?
You choose from five presets — default, tiktok, youtube, subtle, bold — each a fixed style (font, size, colour, outline, and vertical margin). There is no free-form font/colour/position picker in this tool. The tiktok preset is bold white Arial 28 with a thick outline at an 80px bottom margin.
Is my video uploaded anywhere?
No. Processing runs entirely in your browser via FFmpeg.wasm. Your MP4 and SRT are written to an in-browser filesystem, the burn runs locally, and the result is handed straight back to you. Nothing is sent to a server.
What output format do I get?
Always an MP4 with H.264 video (libx264, CRF 20) and your original audio copied through unchanged. MP4/H.264 is exactly what TikTok wants, so no further conversion is needed.
Does it re-encode my audio?
No. Audio is stream-copied with -c:a copy, so your AAC/Opus track is bit-for-bit identical to the source. Trending-sound sync and loudness are preserved.
My SRT is out of sync — can the tool fix it?
The burner renders cues at the exact timestamps in the SRT; it doesn't re-sync. Fix the timing in your SRT first (a constant offset is a quick search-and-replace on the timecodes), then re-burn.
Can I burn .vtt as well as .srt?
Yes. Both are accepted. The tool reads files ending in .vtt as WebVTT and everything else as SRT, so keep the correct extension on your file.
How big a video can I burn?
Free tier handles up to 1 GB per file, one at a time. Pro raises that to 10 GB and Pro + Media to 100 GB with streaming. There is no duration limit — only file size and batch count.
Why does the burn take longer than a trim?
Trimming can stream-copy bytes; burning has to re-draw every frame with the caption painted in, then re-encode the video. That's inherent to hard-subbing. CRF 20 medium preset balances speed and quality.
Do I need to crop to 9:16 before burning?
Not required, but recommended for TikTok. The tiktok preset's bottom margin is measured from whatever frame you feed it, so reframe to 9:16 first with auto-reframe, then burn, so captions land in the vertical safe zone.
What if I want to extract existing subtitles instead of burning new ones?
Use subtitle-extractor to pull a soft track out of an MKV/MP4 as SRT, edit it, then bring it here to hard-burn. For square/feed crops see auto-reframe; for a GIF version of the captioned clip 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.