Subtitle guide Conversion guides

How to convert subtitles for JW Player


TL;DR — Convert subtitles to WebVTT for JW Player. Free browser tool handles SRT and ASS formats. No upload required — prepare captions for browser playback in seconds.

Related tool

JW Player Subtitle Converter

Open JW Player converter

JW Player caption workflows usually work best when the final delivery file is WebVTT (VTT). JW Player is a browser-based video player, so it expects web-native subtitle formats. Converting SRT or ASS to VTT ensures captions work reliably across all browsers and JW Player configurations.

Quick answer

Use the JW Player Subtitle Converter to create VTT output from SRT, VTT, or ASS subtitle input before wiring captions into JW Player. The converter prepares the subtitle file, not the player configuration.

When to use this workflow

Use this workflow when:

  • The source subtitle file is SRT from a collaborator: Transcription tools, translators, or clients often send SRT files
  • The source file is ASS from an editing workflow: Aegisub or other subtitle editors export ASS with advanced styling
  • Captions need to be hosted for a browser player: JW Player runs in the browser and expects VTT format
  • JW Player captions fail because the file is not valid VTT: Wrong format, missing header, or malformed timestamps

If the file is already VTT, validate it first with the WebVTT Validator before debugging the player.

Why JW Player needs VTT

JW Player is built on HTML5 video technology, so it expects WebVTT format. For a format comparison, see best subtitle format for JW Player.

  • Browser-native support: VTT is the W3C standard for HTML5 video captions
  • Reliable parsing: JW Player’s caption engine is optimized for VTT
  • Better debugging: If the VTT file is valid, caption issues are more likely to come from the player setup or server configuration, not the subtitle format
  • Cross-browser compatibility: VTT works consistently across Chrome, Firefox, Safari, and Edge

Step-by-step workflow

1. Keep the original subtitle source file

Before converting, save a copy of the original file. You’ll need it if you want to make edits later or restore styling (for ASS files).

2. Convert to VTT

  1. Open the JW Player Subtitle Converter
  2. Upload or paste SRT, VTT, or ASS subtitle content
  3. Click Convert to VTT
  4. The tool automatically:
    • Adds the WEBVTT header (if missing)
    • Converts timestamp format to VTT style (dots instead of commas)
    • Removes SRT cue numbers (optional in VTT)
    • Strips ASS styling and override tags
    • Preserves subtitle text and timing

3. Review the VTT output

Check the converted VTT file:

  • Header: First line is WEBVTT (uppercase)
  • Timestamps: Use dots (00:00:01.000), not commas (00:00:01,000)
  • Text: Subtitle text is intact and readable
  • Encoding: Non-English characters display correctly

4. Download the VTT file

Click Download VTT to save the converted file. The file is ready to use in JW Player.

5. Host the file and attach it in JW Player

Upload the VTT file to your web server or CDN, then add it to the JW Player configuration:

jwplayer("myPlayer").setup({
  file: "video.mp4",
  tracks: [{
    file: "captions.en.vtt",
    label: "English",
    kind: "captions",
    default: true
  }]
});

6. Test captions in the embedded player

Open the page in a browser and verify:

  • Captions appear at the correct times
  • Text is readable and properly formatted
  • No timing drift or sync issues
  • Captions work across different browsers (Chrome, Firefox, Safari, Edge)

What changes during conversion

From SRT to VTT:

  • Header added: WEBVTT line added at the top
  • Timestamps converted: Commas → dots (00:00:01,00000:00:01.000)
  • Cue numbers removed: Sequential numbers (1, 2, 3) are optional in VTT
  • Text preserved: Subtitle text and timing stay the same

From ASS to VTT:

  • Header added: WEBVTT line added at the top
  • Timestamps converted: ASS format → VTT dot-based format
  • Text preserved: Subtitle text stays the same
  • Line breaks preserved: ASS \N → actual line breaks
  • Styling removed: Colors, fonts, borders, shadows are stripped
  • Positioning lost: All subtitles appear in the default position
  • Override tags removed: {\an8}, {\c&HFF0000&}, {\pos(x,y)}, etc. are deleted

From VTT to VTT (cleanup):

  • Validation: Checks for malformed timestamps, missing header, broken cue structure
  • Normalization: Fixes common formatting issues
  • Encoding: Ensures UTF-8 encoding

The output becomes easier to validate before player debugging.

Common mistakes

Using the right file at the wrong URL

Even a valid VTT file will not show if JW Player cannot fetch it. Test the caption URL directly after upload or deployment.

Fix: Open the VTT URL in a browser tab to verify it’s accessible. Check for 404 errors, CORS issues, or wrong MIME type.

Renaming instead of converting

Changing .srt to .vtt leaves SRT timing and missing WebVTT structure behind. Browsers reject renamed files.

Fix: Use the JW Player Subtitle Converter to properly convert the file.

Skipping validation

If captions do not show, validate the VTT file before changing the player code. Many caption issues come from malformed files, not player configuration.

Fix: Validate the VTT file with the WebVTT Validator first. See how to validate WebVTT files for a detailed walkthrough.

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.

Not testing in multiple browsers

A VTT file that works in Chrome may fail in Firefox or Safari due to stricter parsing or CORS enforcement.

Fix: Test the VTT file in all target browsers (Chrome, Firefox, Safari, Edge) before deploying to production.

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 source file as UTF-8 before converting, or use the Subtitle Encoding Fixer after conversion.

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: Timestamps are off by a few seconds

Cause: Rounding errors during conversion, or the original file had precision issues.

Fix: Use the Subtitle Time Shifter to adjust timing after conversion.

Scenario 5: Some cues are missing from the VTT output

Cause: The source file has malformed cues (missing timestamps, wrong format) that the converter skipped.

Fix: Validate the source file before converting. Fix any errors, then re-convert.

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 SRT and VTT?

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

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 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"
    }
  ]
});

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

What’s the best way to serve VTT files?

  • MIME type: Configure your server to send Content-Type: text/vtt
  • CORS: If cross-origin, send Access-Control-Allow-Origin headers
  • Encoding: Always use UTF-8 encoding

Use the JW Player Subtitle Converter

Convert SRT or ASS subtitles to WebVTT captions for JW Player and browser-based video delivery. No signup, no upload, and everything runs locally in the browser.

Open JW Player converter