MP4 → HLS (M3U8) Converter

Transcode an MP4 into an HLS stream (.m3u8 + .ts segments) entirely in your browser. Nothing is uploaded anywhere.

Click to choose an MP4 or drag & drop it here

Recommended: under ~200 MB / a few minutes of footage — browser-based encoding is much slower than native ffmpeg.

Single quality produces one .m3u8 playlist + segments. Adaptive produces several renditions plus a master playlist, so players can switch quality based on bandwidth.

2800 kbps
128 kbps
6s

Shorter segments = faster seeking / quicker quality switches but more files. 4–8s is typical for VOD.

Slower presets shrink the output more but take much longer to encode in WebAssembly. Veryfast is a good default.

Loading ffmpeg engine…
Show technical log
Original
HLS package
Renditions
Download HLS package (.zip)

The .zip contains .m3u8 playlist(s) and .ts segments (plus a master.m3u8 if adaptive). Unzip it onto any static HTTP(S) host and point an HLS-capable player (hls.js, Video.js, native Safari, etc.) at the .m3u8 file. It generally won't play directly from a file:// URL due to CORS/MIME restrictions.

Your video is processed locally in your browser using ffmpeg.wasm. It is never sent to a server (only the ~25MB ffmpeg engine itself is downloaded from a CDN on first use).

How to convert MP4 to HLS (M3U8) online for free

  1. Upload an MP4 file using the box above.
  2. Choose your output quality/bitrate settings.
  3. Let it transcode locally using ffmpeg.wasm — this runs in your browser, not on a server.
  4. Download the generated .m3u8 playlist and segment files as a zip.

Why convert MP4 to HLS?

HLS (HTTP Live Streaming) splits video into small segments with a playlist file, enabling adaptive bitrate streaming, faster start times, and better seeking compared to a single large MP4. It's the standard format for video players like hls.js, Video.js, and native Safari/iOS playback.

Frequently asked questions

Is my video uploaded to a server?

No. Conversion runs locally in your browser via ffmpeg.wasm. Only the ffmpeg engine itself (~25MB) is downloaded from a CDN on first use — your video file never leaves your device.

Why won't the HLS output play from a file:// URL?

HLS playback requires proper HTTP(S) delivery with correct MIME types and CORS headers, which local file:// URLs don't provide. Host the output on any static HTTP(S) server to play it.

Which players support the output?

Any HLS-capable player — hls.js, Video.js, Shaka Player, native Safari/iOS, and most modern video platforms.

Is this tool free?

Yes — free, no sign-up, and works entirely offline once the ffmpeg engine has been downloaded once.

← Back to all tools

Built by Raghav Garg — linkedin.com/in/raghavg1999