YouTube JSON3 to VTT Subtitle Converter
Turn YouTube timedtext JSON3 events into WebVTT subtitles with the required WEBVTT header and HH:MM:SS.mmm timing.
Drag & drop your JSON file here
or click to browse
Supports .json, .json3, .xml, .html files up to 50 MB
About JSON to VTT
YouTube timedtext JSON3 is not accepted by HTML5 track elements or most web video platforms. This converter parses the JSON3 events array, joins segs text fragments, calculates cue timing, and writes valid WebVTT with the required WEBVTT header. The file is ready for HTML5 video, YouTube Studio, Vimeo, and JavaScript players.
JSON to VTT Code Syntax & Structure Inspection
Side-by-side code inspection illustrating header definitions, timestamp syntax, and cue payload formatting
JSON vs VTT Technical Specifications
JSON
JSON3 is YouTube's internal subtitle format, exported via the timedtext API. The file is a JSON object with an events array. Each event has tStartMs (start millisecond), dDurationMs (duration in ms), and segs (an array of text fragments, each with a utf8 field). Users typically download this format using youtube-dl, yt-dlp, or similar tools.
VTT
VTT (WebVTT) is the W3C standard subtitle format for web video, required by the HTML5 track element and accepted by YouTube, Vimeo, and JavaScript video players like Video.js and JW Player. A VTT file must begin with the literal text WEBVTT on the first line, followed by cue blocks. Each cue uses HH:MM:SS.mmm --> HH:MM:SS.mmm timestamps (period before milliseconds, zero-padded hours). VTT also supports optional cue settings (line, position, align, size), inline styling tags, NOTE comments, and CSS blocks.
Format Differences
Conversion Troubleshooting & Gotchas
Practical solutions for player compatibility, character encoding, and timing synchronization
Subtitle timing drifts or appears out of sync on media players
Video files frequently differ in framerate (e.g., 23.976 fps vs 25 fps). If the timing drifts steadily, use our Subtitle Sync tool to adjust the global offset or framerate stretch.
Characters appear as garbled symbols or question marks (Mojibake)
Legacy files saved in Windows-1252, Shift-JIS, or GBK may render incorrectly. Our exporter standardizes output to clean UTF-8. Use our Subtitle Encoding Converter if the source file is corrupted.
Overlapping captions when multiple speakers talk simultaneously
Different formats handle overlapping dialogue differently. If your target player cannot render stacked cues cleanly, open the file in our Subtitle Editor to adjust individual cue timings.
Video editing software (Premiere, DaVinci, Final Cut) rejects the file
Professional NLE software enforces strict syntax rules. Our converter eliminates malformed line breaks and non-standard tags, producing clean, standardized files.
Features
Why Convert?
Common Use Cases
HTML5 Video Embeds
Add subtitles to a website video using a track element pointing to the VTT file. Browsers will not load JSON3 files via the track element.
YouTube Subtitle Upload
Upload VTT files to YouTube Studio instead of typing subtitles manually. YouTube accepts VTT but not JSON3.
Vimeo Captions
Add closed captions to Vimeo videos by uploading a VTT file through the subtitle settings panel.
E-Learning Platforms
Add subtitles to lecture videos on Coursera, Canvas, or your own LMS when VTT is the accepted web caption format.
JavaScript Video Players
Enable captions in Video.js, Plyr, JW Player, or similar web players that read VTT as their subtitle source.
Related Formats
JSON (YouTube JSON3)
JSON3 is YouTube's internal subtitle format, exported via the timedtext API. The file is a JSON object with an events array. Each event has tStartMs (start millisecond), dDurationMs (duration in ms), and segs (an array of text fragments, each with a utf8 field). Users typically download this format using youtube-dl, yt-dlp, or similar tools.
SRT (SubRip)
The universal alternative: works on smart TVs and desktop players. Choose SRT instead of VTT if your target is not a web browser.
ASS (Advanced SubStation Alpha)
The styled alternative: supports fonts, colors, and positioning. Choose ASS if visual styling matters more than web compatibility.
How It Works
- 1
Upload or drag your .json file into the tool area.
- 2
The parser reads the JSON structure and iterates the events array.
- 3
Each timestamp pair is reformatted to VTT notation: hours padded, arrow inserted, period for milliseconds retained.
- 4
Timing-only events without segs are automatically skipped.
- 5
The resulting .vtt file starts with WEBVTT and contains valid arrow-separated cues for web players.
More Subtitle Tools
Frequently Asked Questions
JSON3 is YouTube's internal subtitle format. It is served via the timedtext API as a JSON object with an events array. Each event has tStartMs (start millisecond), dDurationMs (duration in ms), and segs (text fragments array, each with a utf8 field).
The utf8 fragments in each event are joined in their original order. For example, "Hello " and "world" become the complete subtitle line "Hello world".
Yes. The output includes the required WEBVTT header and valid cue timing, so it works with YouTube Studio, Vimeo, the HTML5 track element, Video.js, Plyr, and JW Player.
Use yt-dlp: yt-dlp --write-auto-sub --sub-format json3 <video-URL>. The downloaded .json3 file can be directly imported into this tool. You can also fetch it via the YouTube timedtext API in a browser.
Some events in YouTube JSON3 contain only timing information (like aAppend markers) without text fragments. These events are automatically skipped during conversion and do not affect the VTT output.
VTT (WebVTT) is the W3C standard subtitle format for web video, required by the HTML5 track element and accepted by YouTube, Vimeo, and JavaScript video players like Video.js and JW Player. A VTT file must begin with the literal text WEBVTT on the first line, followed by cue blocks. Each cue uses HH:MM:SS.mmm --> HH:MM:SS.mmm timestamps (period before milliseconds, zero-padded hours). VTT also supports optional cue settings (line, position, align, size), inline styling tags, NOTE comments, and CSS blocks.
Related Articles
Convert YouTube JSON3 Subtitles to SRT, VTT, or LRC | AllSubConverter
Download YouTube captions as JSON3 and convert them to SRT, VTT, or LRC. Step-by-step guide covering yt-dlp, the JSON3 format, and free online conversion.
Add Pinyin & Furigana to Subtitles | AllSubConverter
Learn how to add pinyin to Chinese subtitles and furigana to Japanese subtitles. AI-powered reading aids for language learners, karaoke, and study materials.