The short answer
A successful conversion did not guarantee that the intended captions survived. In this local experiment, each FFmpeg path exported all twenty constructed cases, but six changed literal payload or timing. Wrapped.li’s narrower check exported fourteen unchanged and rejected six. Equal unchanged totals hid different cases. Review the actual file and final media; none of these measurements establishes LinkedIn acceptance or human readability.
What you’ll take away
- Keep the original before running a conversion.
- Compare cue text and timing, not just the exit message or file extension.
- A strict subset can reject content another tool legitimately preserves.
The practical question: did my caption file keep its meaning?
Moving a caption file between tools can change more than its extension. A visible success message answers whether a processing step finished, not whether every intended cue, symbol and boundary survived. We tested this narrower preservation question using original exercise files rather than private videos or creator accounts.
The corpus contains twenty fixed cases: six container variations, six payload variations, six boundary challenges and an NFC/NFD Unicode pair. It includes ordinary line endings, German text, emoji, spaces, multiple lines, markup, overlap, an empty cue and invalid timing. These are deliberately related constructed cases, not twenty randomly sampled videos. Some challenge cases are not claimed to be conforming SRT.
Three fixed paths, every case, two complete runs
Before execution we saved the protocol, corpus, exact existing Wrapped.li caption function and runner with hashes. Path one called that function with zero offset. Path two explicitly demuxed SRT and encoded SRT in FFmpeg. Path three converted SRT to WebVTT and then back to SRT. The installed versions were Node v24.21.0 and FFmpeg 9.0.2. No alternative settings, repairs or replacement cases were tried after seeing results.
A separately implemented output parser compared cue count, exact millisecond boundaries and literal payload strings against declared intent. It accepted overlap and markup for measurement rather than reusing the checker’s admission rules. Only line endings were normalized: spaces, Unicode form and markup remained part of the comparison. We also recorded absent outputs, diagnostics and byte hashes. The second complete matrix matched every measured row and output hash. That is a repeatability check, not another sample.
| Path, each with 20 cases | Exported | Same declared text/time | Exported with changes |
|---|---|---|---|
| Wrapped.li plain-text subset | 14; 6 rejected | 14 | 0 |
| FFmpeg SRT to SRT | 20 | 14 | 6 |
| FFmpeg SRT to WebVTT to SRT | 20 | 14 | 6 |
All 20 cases, with no omitted results
C01–C20 follow the fixed corpus. Equality concerns declared characters and times after line-ending normalization, not appearance or format validity. Descriptions and original inputs are in the linked corpus.
| Case | Wrapped.li | FFmpeg SRT | FFmpeg VTT/SRT |
|---|---|---|---|
| C01 | Same text/time | Same text/time | Same text/time |
| C02 | Same text/time | Same text/time | Same text/time |
| C03 | Same text/time | Same text/time | Same text/time |
| C04 | Same text/time | Same text/time | Same text/time |
| C05 | Same text/time | Same text/time | Same text/time |
| C06 | Same text/time | Same text/time | Same text/time |
| C07 | Same text/time | Same text/time | Same text/time |
| C08 | Same text/time | Changed | Changed |
| C09 | Same text/time | Changed | Changed |
| C10 | Same text/time | Changed | Changed |
| C11 | Same text/time | Same text/time | Same text/time |
| C12 | No export | Same text/time | Same text/time |
| C13 | No export | Changed | Changed |
| C14 | No export | Same text/time | Same text/time |
| C15 | No export | Changed | Changed |
| C16 | No export | Changed | Changed |
| C17 | No export | Same text/time | Same text/time |
| C18 | Same text/time | Same text/time | Same text/time |
| C19 | Same text/time | Same text/time | Same text/time |
| C20 | Same text/time | Same text/time | Same text/time |
Read the changed cases before judging the totals
Both FFmpeg paths changed the same six cases. C08 and C09 lost trailing or leading spaces. C10 retained separator whitespace as part of a cue. Those differences may have little visible consequence. A literal mismatch is not automatically a bad edit; it tells you what to inspect. The complete matrix does not silently discard such cases or count them as failures of human understanding.
C13 is more consequential: the literal source “A < B and C > D.” became “A <b> D.</b>” in the SRT output. That is a changed payload, not a browser-rendering observation. C15 started with a deliberately reversed 4,000-to-3,000ms interval; the output end became 4,294,970,296ms. C16’s empty first cue disappeared, leaving one output cue. All these tested commands exited successfully without a warning. Preserve originals and inspect the resulting text and times, especially when a file contains bracket-like notation or malformed cues.
The narrower checker is not a universal format judge
Wrapped.li’s declared plain-text subset rejected six cases and exported fourteen with their intended text and timing intact. Its rejection of markup and overlap was intentional. FFmpeg preserved the italic-markup, overlapping-cue and decimal-variation cases that it rejected. Therefore the equal fourteen-case preservation total does not mean the paths handled the same material or that our checker is a better caption editor.
The Library of Congress describes SRT’s limited formal documentation and reader-dependent styling; WebVTT has its own specified syntax and permits overlapping cues. A local rule against overlap is a workflow boundary, not proof that overlap is universally invalid. Decide whether your chosen workflow supports the actual content instead of flattening every rejection into a platform rule.
A reading-speed flag can count a different thing from your eyes
C19 contains twenty precomposed accented letters, and C20 contains twenty decomposed equivalents. The canonically equivalent strings contain twenty versus forty Unicode code points. At one second, the existing local checker reports 20 versus 40 code points per second and flags the latter. Both files retain their text. This is a concrete limit of the disclosed code-point heuristic, not evidence that one text takes twice as long for a person to read.
Do not rewrite someone’s language simply to clear an automatic flag. Inspect wording, line breaks, speech and available time in the real media. Formal preservation, a screening flag, synchronization and human comprehension are separate questions; this experiment only measures the first and records the existing flag.
Use the evidence as a preflight, with its limits intact
Keep a source copy, export into a new file, then compare the complete cue list and meaningful time boundaries. If a change was intentional, document it. If it was not, return to the source rather than repeatedly converting a damaged derivative. Finally play the actual media with captions and inspect the published result in its intended context. LinkedIn’s help describes attaching SRT captions on desktop, but we performed no upload or private-account test here.
The downloadable bundle contains both complete runs, all original inputs and outputs, code, version information and the pre-execution hashes. It includes no FFmpeg binary and requires installed Node/FFmpeg for reproduction. We tested these paths and versions, not every editor, encoding, player or caption service. No result establishes visual styling, glyph rendering, accessibility, reader preference, reach or revenue. This is one original file-processing study; repeated runs are not additional research pieces.
Sources & product references
Product details reflect the publication date. External features and interfaces may change.
- Original protocol, saved before execution
- Complete original inputs and declared intent
- Every measured output, time, diagnostic and hash
- Both full runs, source and reproducible method
- Library of Congress: SubRip format and reader-dependent features
- W3C: WebVTT text track format
- LinkedIn: Desktop SRT caption attachment




