On this page
An .m3u8 file contains the playlist for an HLS stream, so saving the link alone gives you text rather than a playable video. To make an MP4, a tool needs to download the video segments listed in that playlist and join them. This guide covers four methods: ffmpeg, VLC, an online downloader and a browser extension.

The quick answer
- You have the .m3u8 URL and a computer: run
ffmpeg -i "URL" -c copy video.mp4(Method 1), or use VLC's Convert menu (Method 2). - You can't install anything: an online m3u8 downloader may work for short, public, unsigned playlists (Method 3).
- The video is playing in Chrome: an extension that detects HLS saves it without hunting for the URL (Method 4).
| Method | Install needed? | Takes a raw URL? | Encrypted (AES-128) streams | Works on | Cost |
|---|---|---|---|---|---|
| ffmpeg (Method 1) | Yes, a command-line tool | Yes | Yes, when the key URL is reachable | Windows, Mac, Linux | Free |
| VLC (Method 2) | Yes, a desktop app | Yes | Partly; encrypted or signed streams fail more often | Windows, Mac, Linux | Free |
| Online m3u8 downloaders (Method 3) | No | Yes | Varies by site | Any browser, including phones | Free with ads; size or time caps |
| Clipmoth Chrome extension (Method 4), our tool | Yes, a Chrome extension | No; it works from the page playing the video | Yes | Chrome on Windows, Mac, Linux; not YouTube | Free 10/day · $9.99 one-time |
What an .m3u8 is, and how to find the URL
HLS (HTTP Live Streaming) splits a video into hundreds of short .ts or .m4s segments. The .m3u8 is a plain-text list of them, plus a pointer to the AES-128 key if the stream is encrypted. A line starting #EXT-X-STREAM-INF marks a master playlist that points to several qualities. To find the URL:
- Play the video on the page.
- Press F12 (Cmd+Option+I on a Mac) and open the Network tab.
- Type
m3u8in the filter box. Reload if the list is empty. - Right-click the request → Copy → Copy link address. The first, shortest one is usually the master playlist.
A long token in the query string means the URL is signed and will expire, so use it soon. If you see .mpd instead, the site uses DASH (see the FAQ).
Official options and terms

Check the site first. Vimeo lets uploaders turn on a Download button, and many course platforms offer offline viewing in their apps. If the stream is yours, download the original from your hosting dashboard (Vimeo, Wistia, Mux); it beats reassembled segments.
The rules: HLS is used by thousands of unrelated sites, so there is no single set of terms. Most sites allow access only through their own player, and breaching their terms can get an account suspended even when no copyright is infringed. Your own streams, Creative Commons material and streams you have permission to save are fine. We are not lawyers; this is not legal advice.
Terms and law in detail
Course platforms in particular enforce their terms. Read the terms of the site you are on before saving anything from it.
- Saving someone else's copyrighted stream without permission can infringe their rights, whatever tool you used.
- Japan, for example, makes it an offense to download content you know was uploaded without the rights holder's permission.
- Circumventing DRM is prohibited separately under the US DMCA and the EU Copyright Directive, even for content you may otherwise copy. None of our tools attempt it.
Tools and their limitations
Clipmoth is our own product; weigh that as you read.
Method 1: ffmpeg (plus yt-dlp)
Install ffmpeg (on a Mac, brew install ffmpeg), then run:
ffmpeg -i "https://example.com/stream.m3u8" -c copy video.mp4-c copy remuxes without re-encoding, so it is fast and loses no quality. AES-128 is handled when the key URL is reachable.Given a master playlist, ffmpeg picks one variant on its own, usually but not always the highest; to be sure, pass the URL of the variant you want, or use yt-dlp.
If the server answers 403, send the headers your browser sent:
ffmpeg -headers "Referer: https://example.com/" -user_agent "Mozilla/5.0" -i "https://example.com/stream.m3u8" -c copy video.mp4yt-dlp also takes an .m3u8, picks the best quality from a master playlist and retries failed segments: yt-dlp "https://example.com/master.m3u8" -o video.mp4 (add --referer if needed; it needs ffmpeg too).
If you end up with separate video and audio files, merge them without re-encoding:
ffmpeg -i video.mp4 -i audio.m4a -c copy out.mp4Method 2: VLC
- Choose Media → Open Network Stream (File → Open Network on a Mac) and paste the URL.
- Open the arrow next to Play and choose Convert (on a Mac, tick Stream output).
- Pick Video - H.264 + MP3 (MP4), set a file name ending in .mp4, and click Start.
The default profile re-encodes; tick “Keep original video track” and “Keep original audio track” in the profile to avoid that. VLC fails more often than ffmpeg on signed or referer-locked URLs.
Method 3: Online m3u8 downloaders
They need no install, but the URL goes to their server, so signed, IP-bound or referer-locked streams fail, and free tiers cap length and carry ads. We have not tested any of them and do not name one.
Method 4: The Clipmoth Chrome extension
The Clipmoth extension detects the HLS or DASH stream the page is playing and saves one MP4, but it cannot take a bare URL, does not record live streams, and does not work on YouTube (see our compatibility guide). Try it on our practice pages first:
- HLS streaming practice: a simulated site playing an .m3u8 stream.
- Encrypted stream practice: a simulated members-only course with encrypted segments.
For video playing in the browser, including sites yt-dlp does not list, this is how yt-dlp and our Chrome extension differ.
| yt-dlp (command line) | Clipmoth Chrome extension | |
|---|---|---|
| Coverage | Sites on its list (1,000+) | Any HLS / DASH stream that is playing, whatever the site (not YouTube) |
| URL | You pass the video page URL | Nothing to find: it detects what is playing |
| Pages behind a login | Export cookies and pass them | Not needed; it runs inside your logged-in browser |
| Encrypted streams (AES-128) | Yes | Yes, and nothing is uploaded |
| Cost | Free, unlimited | Free 10/day · $9.99 one-time (one key with the Windows app) |
When it doesn't work
| Problem | What to do |
|---|---|
| The stream is still live | There is no end to download. ffmpeg records from now on (add -t 01:00:00 to stop after an hour); wait for the replay for the whole thing. |
| DRM (Netflix, Prime Video, Disney+) | Widevine, PlayReady or FairPlay keys are never exposed, so no tool here can save these. Plain AES-128 is different: its key URL sits in the playlist. |
| 403 Forbidden | Copy a fresh URL (signed links expire), send the Referer header, or use a local tool if the URL is bound to your IP. |
| Silent or video-only file | You copied a video-only child playlist. Give ffmpeg or yt-dlp the master playlist so it fetches both tracks. |
| You saved a text file | That is the playlist itself (it starts with #EXTM3U). Run the URL through one of the methods above. |
Frequently asked questions
How do I open or play an .m3u8 file?
Use VLC (Media → Open Network Stream), or Safari and QuickTime Player (File → Open Location), which play HLS natively; Chrome, Edge and Firefox do not. A saved .m3u8 opened from disk usually won't play, because its segment URLs are relative to the original server.
How do I convert m3u8 to MP4 on a Mac or iPhone?
On a Mac, all four methods work. On an iPhone, the free a-Shell terminal app ships ffmpeg and runs the same one-line command; otherwise convert on a computer and move the MP4 over with AirDrop.
Can I download an m3u8 online without installing anything?
Sometimes, for short public streams. Many online tools read only the first variant of a master playlist, or hand back a raw .ts file instead of an MP4.
What about DASH (.mpd) streams?
DASH uses a .mpd manifest with .m4s segments, and ffmpeg -i "URL.mpd" -c copy video.mp4 works for unencrypted DASH. yt-dlp accepts .mpd links too and merges the separate audio and video tracks DASH usually uses.
Save an HLS stream in one click
Clipmoth is our own downloader. Its Chrome extension saves an HLS or DASH stream as a single video file, including streams with AES-128 encryption. You do not need to find the stream URL, and your video is not uploaded to a server.
The extension does not support YouTube. Our Windows app supports YouTube, TikTok and over 1,000 sites.
Both offer 10 free downloads a day. Premium costs a one-time $9.99, with a 14-day refund policy.
Add to Chrome (free) Windows app for YouTube & 1,000+ sites