Skip to content

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

Core Engine Architecture

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.

Payload & Syntax Inspector

JSON to VTT Code Syntax & Structure Inspection

Side-by-side code inspection illustrating header definitions, timestamp syntax, and cue payload formatting

Millisecond Sync
input.json
JSON SOURCE
{
"events": [
{ "tStartMs": 1000, "dDurationMs": 3000,
"segs": [{ "utf8": "Hello, world!" }] },
{ "tStartMs": 4500, "dDurationMs": 3500,
"segs": [{ "utf8": "This is a subtitle file." }] }
]
}
output.vtt
VTT RESULT
WEBVTT
 
00:00:01.000 --> 00:00:04.000
Hello, world!
 
00:00:04.500 --> 00:00:08.000
This is a subtitle file.
 
00:00:08.500 --> 00:00:12.000
Converted locally!
Specification Sheet

JSON vs VTT Technical Specifications

Standard Compliant
Input Format

JSON

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.

Output Format

VTT

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

JSON3 uses a YouTube events array; VTT uses WEBVTT header and cue blocks
JSON3 stores tStartMs and dDurationMs; VTT stores HH:MM:SS.mmm --> HH:MM:SS.mmm timestamps
JSON3 is YouTube proprietary; VTT is the W3C standard for web video
Browsers cannot load JSON3 through a track element; VTT is the native HTML5 subtitle format

Conversion Troubleshooting & Gotchas

Practical solutions for player compatibility, character encoding, and timing synchronization

4 Common Gotchas
GOTCHA #1

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.

GOTCHA #2

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.

GOTCHA #3

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.

GOTCHA #4

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

Automatically parses YouTube JSON3 events array and segs text fragments
Converts JSON3 millisecond timestamps to VTT HH:MM:SS.mmm cue timing
Client-side processing — your files never leave your device
Supports UTF-8 encoding for CJK and non-Latin characters
Browser-based processing — no file uploads, files stay on your device
Free to use, no signup, no watermark, files up to 50 MB each

Why Convert?

HTML5 video elements require VTT via the track tag. JSON3 files will not load in any browser.
YouTube Studio accepts VTT uploads for subtitles but does not recognize JSON3 format.
Vimeo requires VTT for closed caption uploads through their web interface.
JavaScript video players like Video.js, Plyr, and JW Player use VTT as their primary subtitle source.
WebVTT is the native caption format for browser-based accessible video playback.
Web-based course platforms commonly accept VTT for video subtitles and captions.
VTT supports positioning, styling, and metadata that JSON3 cannot represent.
Scenarios

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.

Format Ecosystem

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. 1

    Upload or drag your .json file into the tool area.

  2. 2

    The parser reads the JSON structure and iterates the events array.

  3. 3

    Each timestamp pair is reformatted to VTT notation: hours padded, arrow inserted, period for milliseconds retained.

  4. 4

    Timing-only events without segs are automatically skipped.

  5. 5

    The resulting .vtt file starts with WEBVTT and contains valid arrow-separated cues for web players.

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.

Ready to convert your subtitles?

Drop your JSON file here and convert to VTT instantly.