Subtitle problems

Subtitles not showing: 5 causes and the fix for each

Updated 6 fixes7 sources

Short answer

Captions go missing for three different reasons: the destination has no documented subtitle track for that surface, so nothing was ever attached; the file was rejected, and YouTube's own rule is the strictest published one (.srt basic form only, no style markup, plain UTF-8); or the track exists but is still being processed, which YouTube says can happen because processing time depends on the complexity of the audio. Fix the file first, then the platform setting, and burn captions into the picture when the platform documents no upload path.

Key takeaways

  • First ask whether the platform documents a subtitle upload for that surface at all.
  • YouTube accepts .srt in its basic form only, with no style markup, in plain UTF-8.
  • YouTube says automatic captions may not be ready at upload; processing time depends on the audio.
  • Burned-in captions cannot be mistimed or hidden, but they cannot be translated either.
  • Validate the file before you upload, not after the post looks bare.

Caption track or burned-in text: which one you have

A caption track is a separate data track: the platform can switch it off, translate it, restyle it or refuse to load it, and the text keeps its own timing. Burned-in text is pixels in the picture. It cannot be switched off, restyled or mistimed by the player, but it cannot be translated either and it becomes part of the image forever.

That difference decides the fix. If the destination documents a subtitle upload for your surface, fix the file. If it does not, the only route that survives is burned-in text.

What the platform documentsTrackBurned in
YouTube (Studio)Upload a file, auto-sync, type manually, auto-translateWorks, but you own the styling
LinkedInAuto captions are generated, with review before publishWorks
TikTokIn-app Text tool; no subtitle file upload documentedWorks, and is the only file route
PinterestNo caption track documented for PinsWorks

Where a platform documents neither, the burned-in route is not a workaround: it is the documented behavior. The table above lists only what each help page states.

What a caption file has to look like

YouTube documents what it accepts: SubRip (.srt) is supported in its basic form only, with no style markup recognized, and the file must be plain UTF-8. SubViewer (.sbv or .sub) is also supported. WebVTT (.vtt) is accepted with positioning, but styling is limited to bold, italic and underline. Timestamps are the part every player depends on, so a cue with a broken time code is a cue that never appears.

FormatExtensionWhat YouTube documents
SubRip.srtBasic versions only, no style markup, plain UTF-8
SubViewer.sbv, .subBasic versions only, no style markup, plain UTF-8
WebVTT.vttPositioning supported, styling limited to b, i, u
TTML, DFXP.ttmlPartial implementation

A SubRip cue is a number, a start and stop time, then the text: 1 then 00:00:00,599 --> 00:00:04,160 then the line. The comma before the milliseconds is what makes it SubRip; a dot makes it SubViewer.

Free tools:Check a subtitle fileConvert SRT to VTTConvert VTT to SRT

Find your case

What you seeWhat it usually meansDo this
No caption track on the post at allThe surface has no documented subtitle upload, so nothing was attachedBurn the captions into the picture (step 6)
Track loads but words are wrongAutomatic captions are machine generated and can mis-transcribeReview and edit the track (step 3)
Nothing right after posting, captions appear laterThe track is still being generatedWait, then re-check the post (step 4)
Your uploaded file was refusedStyle markup, a non-UTF-8 encoding or a broken time codeStrip to plain text and re-check (steps 1 and 2)
Cues appear late or early by a fixed amountTimestamps do not match the upload fileShift the whole track (step 5)
Captions show for you but not for viewersThe track is not published, or the viewer has captions offPublish the track and confirm it is on (step 3)

Fix it step by step

  1. Check the file before the platform

    Open the .srt in a text editor. YouTube documents that SubRip files are supported in their basic form only, that no style markup is recognized, and that the file must be plain UTF-8. Strip HTML-like tags, save as UTF-8 without a byte order mark, and confirm each cue has a start time, a stop time and text.

    Source: YouTube Help: Supported subtitle and closed caption files · Check a subtitle file →

  2. Confirm the destination documents a subtitle track

    YouTube Studio documents Upload file, auto-sync, type manually and auto-translate under Subtitles. LinkedIn documents auto captions with an Add auto captions toggle. TikTok's editing help documents an in-app Text tool and no subtitle file upload, so on TikTok a file has nowhere to attach: burn the text in instead.

    Source: TikTok Help: Editing TikTok videos and photos

  3. Publish and check the track

    In YouTube Studio: left menu, Subtitles, choose the video, ADD LANGUAGE, then ADD. Upload a file with timing, auto-sync a transcript, type manually, or let auto-translate fill it. YouTube says automatic captions are published on the video when they are available, in the video's default language only. Review them: YouTube warns they can misrepresent speech because of mispronunciations, accents, dialects or background noise.

    Source: YouTube Help: Add subtitles & captions

  4. Wait when the track is still processing

    YouTube states that automatic captions may not be ready at the time you upload, and that processing time depends on the complexity of the audio. LinkedIn makes the same point for auto captions: they can take some time, and a banner appears below the post once they are generated. Check the post again rather than re-uploading.

    Source: YouTube Help: Use automatic captioning

  5. Shift the cues when the timing is simply off

    A constant offset is fixed by moving every cue by the same amount: ffmpeg -i video.mp4 -itsoffset 1.20 -i subs.srt -map 0:v -map 0:a -map 1 -c copy -c:s mov_text fixed.mp4. FFmpeg documents -itsoffset as the offset added to the input timestamps, so a positive value delays the subtitle stream by that duration.

    Source: FFmpeg Documentation: Command line options (-map, -c copy, -itsoffset) · Shift subtitle timing →

  6. Burn the captions in as the reliable fallback

    ffmpeg -i video.mp4 -vf "subtitles=subs.srt" -c:a copy -c:v libx264 -crf 20 out.mp4. The subtitles filter needs an FFmpeg built with libass and converts the file to ASS internally, so the result needs no font styling from the platform. Move the text out of the areas the player covers before you render it.

    Source: FFmpeg Documentation: Video filters (crop, pad, scale, setsar, subtitles) · Burn captions into a video →

A caption file that survives a platform check

Format.srt (SubRip) or .vtt (WebVTT) · YouTube supports both
EncodingPlain UTF-8, no byte order mark · YouTube's documented requirement for .srt
StylingNone in the file · YouTube does not recognize style markup in .srt
TimingStart and stop time per cue · 00:00:00,599 --> 00:00:04,160
LanguageMatch the track the platform expects · YouTube auto-translates from the default language only

Work out the drift before you change anything

Drift has two shapes. Constant offset: the captions are correct but late or early by the same amount from the first word to the last, so one shift fixes it. Growing drift: the error is small at the start and large at the end, which means the file changed under the captions (a different cut, a removed intro, a re-encode that dropped or held frames) and the cues have to be re-timed against the exact file you upload.

Frame rateOne frame100 frames1000 frames
24 fps0.042 s4.2 s41.7 s
25 fps0.040 s4.0 s40.0 s
30 fps0.033 s3.3 s33.3 s
60 fps0.017 s1.7 s16.7 s

Computed: one frame is 1 divided by the frame rate, so at 30 fps a frame is 0.033 s and a cue that is four frames late is 0.13 s late. Measure at the start, in the middle and at the end; if the three numbers are the same, shift; if they grow, re-time.

Frequently asked questions

Why do my subtitles not show on TikTok?

TikTok's help documents captions as in-app text, not an uploaded subtitle file, so a file you attach has nowhere to go. Add text in the app with the Text tool, or burn the captions into the picture before uploading.

Why did YouTube reject my .srt file?

YouTube supports SubRip files in their basic form only, ignores style markup, and requires plain UTF-8. Strip the tags, re-save as UTF-8 and try again.

My captions appeared late on the post, is that a bug?

Probably not. YouTube says automatic captions may not be ready at upload and that processing time depends on the complexity of the audio. LinkedIn documents the same delay and shows a banner when the captions are ready.

Should I upload a subtitle file or burn captions in?

Upload a file where the platform documents a track, because it can be corrected, translated and switched off. Burn captions in where it does not, or where the exact position and style matter.

How do I fix subtitles that are a second late?

Shift every cue by the same amount with a subtitle timing tool, or attach a shifted copy with ffmpeg -i in.mp4 -itsoffset 1.0 -i subs.srt -map 0 -map 1 -c copy -c:s mov_text out.mp4.

Sources

Reviewed 2026-10-07. Steps not attributed to a source are general video practice or computed above.