Subtitle guide Format comparisons

Best subtitle format for JW Player

Updated

TL;DR — Learn which subtitle format JW Player needs. WebVTT offers the best compatibility. Convert SRT for free and fix common caption issues with our guide.

Related tool

SRT to VTT Converter

Open SRT to VTT

For most JW Player subtitle workflows, WebVTT (VTT) is the safest default format. JW Player is usually embedded in a browser page, so the subtitle file should be prepared for web playback rather than only for editor compatibility. That makes WebVTT the safer final delivery format, even when your working file starts as SRT.

Quick answer

If your subtitle source is SRT, convert it to VTT before attaching it to JW Player. That keeps the caption file aligned with the format most often expected in web video environments.

Use the JW Player Subtitle Converter to create VTT output from SRT or ASS input.

Why VTT is the safer web choice

WebVTT fits browser playback well because it’s designed for web video and caption rendering. That usually makes it the cleanest choice for:

  • HTML5-based players: JW Player uses HTML5 video under the hood
  • Embedded video pages: VTT works consistently across browsers
  • Browser testing and QA: Valid VTT files reduce debugging time

The practical benefit is predictability. A valid VTT file has the WEBVTT header, dot-based timestamps, and a structure that web video tooling expects. That reduces the chance that a caption issue is caused by the file wrapper instead of the player setup.

JW Player subtitle support by format

FormatJW Player SupportBrowser SupportNotes
VTT✅ Native✅ All browsersRecommended, best compatibility
SRT⚠️ Partial❌ Not nativeWorks but may have parsing issues
DFXP/TTML⚠️ Partial❌ Not nativeXML-based, less common

Key takeaway: JW Player supports VTT natively and reliably. SRT works in some cases but may have parsing issues. VTT is the safer choice. For the complete conversion workflow, see how to convert subtitles for JW Player.

When SRT still shows up first

You may still receive subtitles as SRT because it’s common in:

  • Exports from subtitle editors: Aegisub, Subtitle Edit, and other editors often default to SRT
  • Transcription tools: Rev, Otter, Descript, and most transcription services export SRT by default
  • Client handoff files: Translators, editors, or clients may send SRT files
  • Legacy subtitle archives: Old subtitle files from DVD rips, fansubs, or older projects

That’s fine as a source format, but it doesn’t need to remain the final playback format.

Keep SRT when: You’re exchanging captions with a client, translator, or archive. Convert to VTT when: The same captions move into the JW Player implementation.

Delivery checklist for JW Player captions

Before adding captions to JW Player, check:

  • Format: Use .vtt for the browser-ready subtitle file
  • Header: File begins with WEBVTT (uppercase, first line)
  • Timestamps: Use dots (00:00:01.000), not commas (00:00:01,000)
  • Encoding: Use UTF-8 encoding to avoid character corruption
  • URL: Host the file at a URL the page can access (not a local file path)
  • CORS: If the VTT file is on a different domain, the server must send Access-Control-Allow-Origin headers
  • MIME type: Server must send Content-Type: text/vtt (not text/plain or application/octet-stream)
  • Testing: Test captions in the real embedded player, not only in a text editor

Practical workflow

Scenario 1: You have SRT subtitles

  1. Keep the original .srt file if you still need it for exchange or editing
  2. Convert to VTT using the SRT to VTT Converter
  3. Validate the VTT file with the WebVTT Validator
  4. Upload the VTT file to your web server or CDN
  5. Add the VTT file to JW Player:
jwplayer("myPlayer").setup({
  file: "video.mp4",
  tracks: [{
    file: "captions.en.vtt",
    label: "English",
    kind: "captions",
    default: true
  }]
});
  1. Test playback in the browser and verify captions appear

What changes: Timestamp format (commas → dots), file header added (WEBVTT). Text content stays the same.

Scenario 2: You have ASS subtitles (anime, fansubs, styled captions)

  1. Convert ASS to VTT using the ASS to VTT Converter
  2. Validate the VTT file
  3. Upload and test

What you lose: Advanced styling (colors, fonts, positioning, karaoke effects). What you gain: Browser compatibility, faster rendering.

Scenario 3: You have multiple subtitle languages

Add multiple tracks to the JW Player configuration:

jwplayer("myPlayer").setup({
  file: "video.mp4",
  tracks: [
    {
      file: "captions.en.vtt",
      label: "English",
      kind: "captions",
      default: true
    },
    {
      file: "captions.es.vtt",
      label: "Español",
      kind: "captions"
    },
    {
      file: "captions.fr.vtt",
      label: "Français",
      kind: "captions"
    }
  ]
});

JW Player automatically detects all tracks and displays them in the captions menu.

Scenario 4: You need to serve VTT from a CDN

If your VTT file is on a different domain than the video page, configure CORS:

Server-side (CDN or origin server):

Access-Control-Allow-Origin: https://yourdomain.com
Content-Type: text/vtt; charset=utf-8

Client-side (JW Player configuration):

jwplayer("myPlayer").setup({
  file: "video.mp4",
  tracks: [{
    file: "https://cdn.example.com/captions.en.vtt",
    label: "English",
    kind: "captions"
  }]
});

Without CORS headers, the browser blocks the VTT request and captions fail silently.

Common mistakes

Using SRT in a workflow that really expects VTT

Even when timing and text look correct, the wrong wrapper can still cause playback issues. JW Player may parse SRT in some cases, but VTT is more reliable.

Fix: Always convert SRT to VTT before adding it to JW Player. See how to convert SRT to VTT for HTML5 video for step-by-step instructions.

Renaming the file without converting it

Changing .srt to .vtt does not create valid WebVTT output. The browser sees SRT-style timestamps (commas) and no WEBVTT header, so it rejects the file.

Fix: Use the SRT to VTT Converter to properly convert the file.

Forgetting the hosting layer

Even a valid VTT file can fail if the player cannot fetch it. After conversion, test the caption file from the same environment where the video will be embedded.

Fix: Upload the VTT file to your web server or CDN, and verify the URL is accessible from the browser.

Using the wrong MIME type

If the server sends Content-Type: text/plain or application/octet-stream, the browser refuses to parse the file as WebVTT.

Fix: Configure the server to send Content-Type: text/vtt for .vtt files. See How to fix VTT MIME type for HTML5 video for server-specific instructions.

Forgetting CORS headers for cross-origin VTT files

If your video page is at example.com and the VTT file is at cdn.example.com, the browser blocks the request unless the server sends Access-Control-Allow-Origin headers.

Fix: Configure CORS on the CDN or origin server.

Troubleshooting scenarios

Scenario 1: Captions don’t appear in JW Player

Possible causes:

  • VTT file is malformed (missing WEBVTT header, wrong timestamp format)
  • Server sends wrong MIME type (text/plain instead of text/vtt)
  • CORS headers missing (cross-origin request blocked)
  • Track configuration has wrong file URL (404 error)
  • JW Player version doesn’t support VTT (very old versions)

Fix:

  1. Validate the VTT file with the WebVTT Validator
  2. Check the browser console for errors (F12 → Console tab)
  3. Check the Network tab for the VTT request - verify it returns 200 OK and Content-Type: text/vtt
  4. If cross-origin, verify CORS headers
  5. Update JW Player to the latest version if using an old version

For MIME type issues, see how to fix VTT MIME type for HTML5 video. For a broader troubleshooting walkthrough, see Why JW Player captions are not showing.

Scenario 2: Captions appear but text is garbled

Cause: Wrong text encoding (e.g., Windows-1252 instead of UTF-8).

Fix: Re-save the VTT file as UTF-8 in a text editor before uploading.

Scenario 3: Captions work in Chrome but not Firefox or Safari

Cause: Firefox and Safari are stricter about MIME types and CORS than Chrome.

Fix:

  1. Confirm Content-Type: text/vtt (not text/plain)
  2. If cross-origin, ensure Access-Control-Allow-Origin is set
  3. Check the browser console for specific error messages

Scenario 4: Captions are out of sync

Cause: The subtitle file was created for a different video cut, or timestamps are wrong.

Fix: Use the Subtitle Time Shifter to adjust timing, or re-sync the subtitles to match your video.

Scenario 5: Timestamps are invalid

Cause: The VTT file has malformed timestamps (wrong format, overlapping times, negative durations).

Fix: See How to fix invalid WebVTT timestamps for detailed troubleshooting.

Frequently asked questions

Does JW Player support SRT natively?

JW Player can parse SRT in some cases, but VTT is the recommended format. SRT support is not guaranteed across all JW Player versions and configurations.

What’s the difference between VTT and SRT?

DifferenceSRTVTT
HeaderNoneWEBVTT required
Timestamps00:00:01,000 (comma)00:00:01.000 (dot)
Browser support❌ Not native✅ Native
JW Player support⚠️ Partial✅ Native
Cue settings❌ Not supported✅ Alignment, position, size

Can I style VTT captions in JW Player?

Yes. JW Player supports custom caption styling via CSS and configuration options. You can customize font, color, background, size, and position.

How do I add chapters with VTT?

Use kind: "chapters" in the JW Player configuration:

jwplayer("myPlayer").setup({
  file: "video.mp4",
  tracks: [{
    file: "chapters.vtt",
    kind: "chapters"
  }]
});

What if my VTT file has a BOM (Byte Order Mark)?

Some text editors (Notepad on Windows) save UTF-8 files with a BOM - 3 invisible bytes at the start. The WebVTT parser sees this as garbage before WEBVTT and rejects the file.

Fix: Re-save the file as “UTF-8 without BOM” in your editor.

Can I use VTT for live streaming with JW Player?

Yes. JW Player supports live VTT captions via HLS (HTTP Live Streaming) or DASH (Dynamic Adaptive Streaming over HTTP).

Does JW Player support DFXP/TTML?

Yes, but VTT is more widely supported and easier to work with. DFXP/TTML is XML-based and more complex.

Use the SRT to VTT Converter

Convert SRT subtitles to WebVTT online for HTML5 video, browser players, and track elements. No signup, no upload, and everything runs locally in the browser.

Open SRT to VTT