TikTok, Reels and YouTube Shorts: Caption Specs and ffmpeg Export
💡 YouTube Shorts accepts SRT, VTT, SBV, SCC and a dozen other caption formats via YouTube Studio upload. TikTok and Instagram Reels do not accept sidecar subtitle files: both use in-app auto-captions only. For TikTok and Reels, burn styled captions into the video before upload with
ffmpeg -vf subtitles=captions.srt:force_style='...,MarginV=160'on a 1080x1920 master built at CRF 23.
Key takeaways
- YouTube Shorts: upload SRT, VTT, SBV or SCC directly in YouTube Studio, no video re-export needed.
- TikTok: no sidecar file upload; use built-in auto-captions (edit after upload) or burn captions into the video before uploading.
- Instagram Reels: auto-captions only; burn-in is the only way to deliver styled, positioned captions.
- 1080x1920 at CRF 23,
-pix_fmt yuv420p, AAC 128k is a solid export spec all three platforms accept. - For burn-in, set
MarginV=160inforce_styleto keep text clear of TikTok and Reels bottom UI chrome on a 1080x1920 frame.
What are the video specs for each platform?
All three platforms recommend the same vertical format for short-form content: 1080 x 1920 pixels, 9:16 aspect ratio. Here are the key specs side by side, from each platform's creator documentation:
| Platform | Resolution | Aspect ratio | Max duration | Frame rate |
|---|---|---|---|---|
| YouTube Shorts | 1080x1920 (max 1080p) | 9:16 | 3 minutes | up to 60 fps |
| TikTok | 1080x1920 recommended | 9:16 preferred | 10 min mobile / 60 min desktop | 30 fps typical |
| Instagram Reels | 1080x1920 recommended | 9:16 (up to 1:1) | 3 min recommended for discovery | 30 fps minimum |
YouTube Shorts expanded from 60 seconds to 3 minutes in December 2025: any square or vertical video up to 3 minutes is now classified as a Short. Instagram accepts Reels up to 20 minutes, but only videos 3 minutes or under are actively recommended to new audiences through the discovery feed.
Which platforms actually accept a subtitle file?
This is where the three platforms diverge completely, and it determines the entire caption delivery workflow:
| Platform | SRT upload | VTT upload | Auto-captions | In-app manual edit |
|---|---|---|---|---|
| YouTube Shorts | Yes | Yes | Yes | Yes (YouTube Studio) |
| TikTok | No | No | Yes | Yes (after auto-gen) |
| Instagram Reels | No | No | Yes | Yes (in Edits app) |
YouTube also accepts SBV, SCC (preferred for broadcast), EBU-STL, TTML and several other formats. For a creator delivering a translated subtitle track, SRT is the simplest choice: UTF-8 encoded, no special tooling needed to produce it.
TikTok and Instagram both generate auto-captions from audio on upload, and both let you edit the generated text inside their apps. Neither platform exposes an upload slot for an external subtitle file. The only way to deliver styled, accurately positioned captions on these two platforms is to burn them into the video pixel-for-pixel before upload.
How do I export a 1080x1920 master and burn captions for TikTok and Reels?
My workflow: export one 1080x1920 master, then branch from it per platform. If the source is landscape 16:9 footage (1920x1080), I letterbox it using a scale + pad chain so the frame fills the vertical canvas correctly:
ffmpeg -i input.mp4 \
-vf "scale=1080:1920:force_original_aspect_ratio=decrease,\
pad=1080:1920:(ow-iw)/2:(oh-ih)/2:color=black" \
-c:v libx264 -crf 23 -preset slow \
-pix_fmt yuv420p \
-c:a aac -b:a 128k \
master_1080x1920.mp4
What each flag does:
scale=1080:1920:force_original_aspect_ratio=decrease: scales the video down to fit inside 1080x1920 without any cropping, preserving the original aspect ratio.pad=1080:1920:(ow-iw)/2:(oh-ih)/2:color=black: centers the scaled frame in a 1080x1920 canvas, filling the remaining space with black bars (letterbox for landscape source).-c:v libx264 -crf 23: H.264 encode at CRF 23, a visually transparent quality level for most creator content.-preset slow: better compression than the defaultmedium, worth the extra encode time for a delivery export.-pix_fmt yuv420p: forces 4:2:0 chroma subsampling, required for broad player compatibility including mobile.-c:a aac -b:a 128k: AAC audio at 128 kbps, clean for voice and music on these platforms.
If the source is already native 9:16 (1080x1920 or a similar vertical format), drop the scale/pad chain entirely and use -vf "scale=1080:1920" alone.
For TikTok and Reels, I add the subtitles filter to the same chain, after the pad step. This re-encodes the video with the caption text composited into every frame:
ffmpeg -i input.mp4 \
-vf "scale=1080:1920:force_original_aspect_ratio=decrease,\
pad=1080:1920:(ow-iw)/2:(oh-ih)/2:color=black,\
subtitles=captions.srt:force_style=\
'FontName=Arial,FontSize=22,Bold=1,\
PrimaryColour=&H00FFFFFF,Outline=2,\
OutlineColour=&H80000000,MarginV=160'" \
-c:v libx264 -crf 23 -preset slow \
-pix_fmt yuv420p \
-c:a aac -b:a 128k \
burned_vertical.mp4
What each force_style key does:
FontName=Arial: a clean sans-serif that renders well at small sizes on vertical video. Substitute your brand font name if needed.FontSize=22: at 1080x1920 native resolution, this reads clearly without occupying too much of the frame.Bold=1: bold weight improves legibility over varied backgrounds.PrimaryColour=&H00FFFFFF: white text in libass ABGR hex (alpha=00 means fully opaque).Outline=2: 2-pixel black outline, the minimum for readability when text falls over mixed-colour backgrounds.OutlineColour=&H80000000: semi-transparent black outline (alpha=80 = 50% opacity), softer than a solid border.MarginV=160: distance in pixels from the bottom of the frame. TikTok and Reels do not publish an official safe-zone pixel value for their UI overlays. In practice I keep this at 160px on a 1080x1920 frame to keep text above the like and comment button row. Measure and adjust if your target has a different overlay height.
The trap I see most often: burning onto a scaled-down proxy, then uploading that to TikTok. TikTok re-encodes every upload. If the captions were rendered at a lower resolution before the final encode, the re-encode compounds the blur. Always burn onto the full 1080x1920 frame.
How do I deliver captions for YouTube Shorts?
For YouTube Shorts I do not embed the subtitle in the MP4 at all. The workflow is simpler: upload the video as normal, then in YouTube Studio open the video, click Subtitles, choose the language, select "Upload file," and drop in the .srt. YouTube attaches it as a selectable caption track without any re-encode.
One thing to check: the SRT file must be UTF-8 encoded. Save it from Subtitle Edit with "UTF-8 without BOM" selected in the encoding dropdown. Timestamps use a comma for milliseconds, not a dot (00:00:01,500 is correct SubRip format).
If the auto-captions YouTube generates are already accurate for the main language, my cleanup pass is: download from Studio, run Fix common errors in Subtitle Edit, verify CPS is under 20 characters per second, then re-upload the corrected version as a replacement track. That corrected track will also serve as the source for a translated version.
What you can do yourself vs when a translator adds real value
For a single-language video going straight to TikTok or Reels, the workflow above is fully self-serve. Write the SRT, burn it in with ffmpeg, upload. Auto-caption correction in-app works well for clean English speech.
The calculation shifts when the content needs a second language. Machine-translated SRT files for Vietnamese or Chinese regularly overflow reading-speed limits because translation expands line length, and auto-translation misses the pronunciation cues that diacritics carry in Vietnamese. A human translator working in Subtitle Edit sets line breaks and watches the CPS warnings live, which produces a file ready to burn or upload to YouTube Studio with no remediation pass.
For a Vietnamese subtitle track on a vertical video, I handle translation and timing end-to-end and deliver a UTF-8 SRT ready to use. More on that process on the vertical subtitles page.
FAQ
Can I use H.265 (HEVC) instead of H.264 for my vertical export?
All three platforms accept HEVC. In practice, H.264 at CRF 23 is safer because it decodes on every device without hardware acceleration. If file size matters and your audience uses recent hardware, switch to -c:v libx265 -crf 28, but test playback on an older Android device before publishing at scale.
TikTok re-encodes my burned captions and they look blurry. Why?
TikTok re-encodes every upload. If captions were rendered onto a scaled-down proxy before the final H.264 encode, the upload re-encode compounds the blur. Always burn onto the full 1080x1920 frame. Also check that you are passing -pix_fmt yuv420p: some ffmpeg builds default to yuv420p10 when libass renders, causing a second chroma conversion during TikTok's processing.
Can I upload Vietnamese captions to TikTok?
Not as a sidecar file. TikTok's auto-caption engine supports a limited set of languages, with Vietnamese available in select markets. If auto-captions are not offered for your language, burn the Vietnamese subtitle track into the video before upload using the ffmpeg command above.
YouTube Shorts auto-generates captions. Will uploading my own SRT override them?
No. YouTube keeps both tracks. The auto-captions and your uploaded SRT coexist as separate selectable options under the closed-caption settings icon. To make your uploaded track the default shown to viewers, mark it as the primary language when you upload it in YouTube Studio.
My SRT file contains Vietnamese diacritics. Will YouTube process it correctly?
Yes, as long as the file is UTF-8 encoded. Vietnamese precomposed characters (with combining diacritics baked in) are within the UTF-8 range and render correctly in YouTube's player. Save from Subtitle Edit as UTF-8 without BOM. If the file was originally created in a Windows editor and saved as Windows-1252, diacritics will appear as garbled characters after upload: check the encoding in Subtitle Edit before exporting.
Official Sources
- YouTube: Supported subtitle and closed caption files - lists SRT, VTT, SBV, SCC, EBU-STL and all accepted formats; confirms SCC as preferred broadcast format. Verified Oct 2026.
- YouTube: About YouTube Shorts (3-minute expansion) - confirms the December 2025 classification change to 3-minute Shorts. Verified Oct 2026.
- TikTok Newsroom: Introducing auto captions - confirms auto-caption feature and manual in-app editing; no SRT upload is mentioned. Verified Oct 2026.
- Instagram Help: Manage closed captions for your reels - confirms automatic speech-recognition captions and in-app editing only. Verified Oct 2026.
- ffmpeg filters documentation: subtitles filter and scale filter - authoritative option reference for force_style, force_original_aspect_ratio and pad. Verified Oct 2026 against installed ffmpeg 8.1.1.
Written by Dao Huy (Lucas), Vietnamese translator & localization specialist (EN · ZH · FR → Vietnamese). See translation services →
