M3U8 to MP4 Converter

Paste an .m3u8 link, pick the quality, get one MP4 file with picture and sound. The conversion runs in your browser.

Convert an M3U8 stream to MP4

Free. Nothing is uploaded: your browser downloads from the stream's server and writes the file on your computer.

Step 1 reads the playlist. Step 2 downloads and converts. No link yet? See how to find the m3u8 URL in DevTools.

Try:

Diagnosis

    To convert M3U8 to MP4 online, paste the playlist URL above, press Check link, choose the quality and press Convert to MP4. The page downloads every segment from the stream's server, decrypts AES-128 if needed, and writes one MP4 without re-encoding, so the quality is the original. A separate audio playlist is merged in, and MP3 / audio only saves just the sound. When the browser cannot do it, it prints the ffmpeg command instead.

    How to convert M3U8 to MP4 online

    1. Copy the .m3u8 URL. In Chrome, open DevTools, go to the Network tab, filter on m3u8 and play the video. The first request is usually the master playlist, the one that lists every quality. The guide to finding the m3u8 URL covers the tricky cases.
    2. Paste it and press Check link. The page reads the playlists and the first bytes of a segment, the same diagnosis as the M3U8 tester: where the sound is, how the stream is encrypted, live or on-demand.
    3. Pick the quality. The best quality up to 1080p is selected, with AAC sound preferred when two variants have the same resolution, because AAC plays everywhere once in MP4.
    4. Press Convert to MP4. In Chrome and Edge on a computer, you choose where to save and the file is written to disk as it downloads. In other browsers the file is assembled in memory, then downloaded.

    Four segments download at a time, a request that fails on the network or with a server error is retried once, and Cancel stops everything.

    What happens to the stream

    What the playlist containsWhat the converter does
    MPEG-TS segments (.ts), H.264 video and AAC soundRemuxes them to MP4 with mux.js: same video and audio data, new container, no re-encoding
    Fragmented MP4 segments (EXT-X-MAP, .m4s)Writes the init segment once, then every fragment in order
    Byte ranges (EXT-X-BYTERANGE)Requests each slice of the file with a Range header
    AES-128 encryptionFetches the key, decrypts each whole segment with WebCrypto, follows key changes
    Separate audio playlist (EXT-X-MEDIA:TYPE=AUDIO)Downloads the video and the audio playlist you pick, then writes both tracks into one MP4, lined up on the stream's own timestamps
    MP3 / audio onlySaves the sound alone: AAC as .m4a, MP3 as .mp3, AC-3 as .ac3, copied without re-encoding
    HEVC, AC-3 or MP3 inside MPEG-TS, SAMPLE-AESFor an MP4, stops and prints the ffmpeg command. MP3 and AC-3 sound can still be saved alone
    Live stream, DRMStops. Live gets a recording command, DRM gets nothing

    The result is a fragmented MP4: it plays in browsers, VLC, mpv and most players. If a video editor refuses it, rewrite it as a regular MP4 without re-encoding:

    ffmpeg -i video.mp4 -c copy -movflags +faststart video-regular.mp4

    When the browser cannot do it: the ffmpeg command

    ffmpeg reads HLS natively and is not limited by CORS. After the check, the page prints the exact command for the stream you checked, quoted for bash or PowerShell, with a yt-dlp alternative. Two cases come up most often when the server blocks the page:

    Separate audio playlist

    ffmpeg -i "https://cdn.example.com/hls/video/1080p.m3u8" -i "https://cdn.example.com/hls/audio/en.m3u8" -map 0:v:0 -map 1:a:0 -c copy video.mp4

    Live stream

    ffmpeg -i "https://cdn.example.com/live/index.m3u8" -c copy recording.ts

    Press q to stop. A .ts file stays playable even if the recording is cut, and you can remux it afterwards in the TS to MP4 converter or with ffmpeg -i recording.ts -c copy recording.mp4. More in the guide to recording a live m3u8.

    On AES-128 streams, ffmpeg fetches the key itself and decrypts on the fly, so the same commands work. Passing a Referer and cookies, fixing a file without sound and the other ways to convert are covered in the M3U8 to MP4 guide.

    Separate audio tracks

    Many streams keep the sound apart from the picture. The master playlist declares it on an #EXT-X-MEDIA:TYPE=AUDIO line with its own URI, and the video playlists carry pictures only. A player loads both at once; a converter that only follows the video playlist writes a silent MP4.

    This page follows both. After the check, an Audio menu lists the sound tracks of the chosen quality by name and language, with the one marked DEFAULT=YES selected. On Convert, the video and audio segments download side by side, each is remuxed without re-encoding, and the two tracks go into one MP4. The picture and the sound keep the start times the stream gives them, so the sync is the same as in the player.

    The ffmpeg command with two inputs and -map 0:v:0 -map 1:a:0 stays available for streams the browser cannot read. If a file you already downloaded has no sound, the guide to videos downloaded without sound lists the other causes.

    M3U8 to MP3: save only the audio

    Press Check link, then choose MP3 / audio only above the Convert button. When the stream has separate sound tracks, the Audio menu lists all of them; the page saves the one you pick, without the picture. Nothing is re-encoded, so the file type follows the sound inside the stream:

    Sound in the streamFile you get
    AAC, the most common.m4a, the AAC frames copied into an MP4 audio container
    MP3 (MPEG-TS or raw .mp3 segments).mp3, the MP3 frames as they are
    AC-3 or E-AC-3.ac3 or .eac3, played by VLC and mpv

    Sound carried in fragmented MP4 segments stays in an MP4 container: .m4a for AAC or MP3, .mp4 for other codecs. When the sound is inside the video segments rather than in its own playlist, the page has to download the picture too, then leaves it out. Pick a low quality first: the sound is often the same in every quality, and the download is smaller.

    Turning AAC into a real MP3 means decoding and encoding the sound again, which this page does not do. With the audio only option selected, the command box prints it for the track you picked:

    ffmpeg -i "https://cdn.example.com/hls/audio/en.m3u8" -vn -c:a libmp3lame -q:a 2 audio.mp3

    -q:a 2 is LAME's variable bitrate around 190 kb/s, transparent for most listening. With yt-dlp: yt-dlp -x --audio-format mp3 followed by the playlist URL.

    AES-128 is not DRM

    AES-128 is the standard encryption of HLS. The playlist names a key URL, and any player allowed to fetch that key can decrypt the segments. The converter fetches each key once, checks that it is 16 bytes long, and decrypts every segment with the initialization vector the HLS specification defines (the IV attribute, or the segment's sequence number). Segments before the first key stay as they are, and a key change midway is followed.

    Widevine, PlayReady and FairPlay are DRM: the key never leaves a licensed decryption module, and removing DRM is illegal in most countries. The converter names the system and stops. SAMPLE-AES, which encrypts inside the video frames, is not converted either; the encrypted M3U8 guide covers what ffmpeg can do with it.

    Limits

    The site blocks the converter?

    Vidora is a Chrome extension that works from the page where the video plays, with the access that page already has. Streams with their sound in a separate playlist come out as one MP4 with picture and sound. Already have the link? Use Paste a link in its popup.

    Frequently asked questions

    Can I convert M3U8 to MP4 online for free?
    Yes. Paste the .m3u8 URL, press Check link, pick the quality and press Convert to MP4. The page downloads the segments from the stream's server and writes one MP4 file, without re-encoding. It works when the server lets other sites read the stream (CORS), as the sample streams above do.
    Is the video uploaded to a server?
    No. The conversion runs in your browser tab. Your browser requests the playlist, the key and the segments directly from the stream's server, and the file is written on your computer. Vidora receives nothing about the URL or the video.
    Why does it say the browser could not read the stream?
    A web page can only read a stream from another site if that site sends an Access-Control-Allow-Origin header, and many video sites only allow their own player. The stream may be fine: run npx m3u8-doctor in a terminal for the ffmpeg command, or paste the link in the Vidora extension, which is not limited by CORS.
    Does it keep the sound when the audio is a separate playlist?
    Yes. When the master playlist declares the sound as its own playlist (EXT-X-MEDIA TYPE=AUDIO with a URI), the page downloads the video playlist and the audio playlist chosen in the Audio menu, then writes both tracks into one MP4, lined up on the stream's own timestamps. AES-128 is decrypted on both. Sound in MPEG-TS or raw audio segments must be AAC to be merged; otherwise the page prints an ffmpeg command with two inputs and -map 0:v:0 -map 1:a:0.
    Can I choose the audio language?
    Yes, when the stream offers several. After the check, the Audio menu lists the sound tracks of the chosen quality by name and language, with the one the stream marks as default selected. Pick another one before pressing Convert.
    Can I convert M3U8 to MP3?
    Choose MP3 / audio only after the check. If the stream's sound is MP3, you get an .mp3 file with the frames as they are. Most streams use AAC: you get an .m4a file, copied without re-encoding, which plays in most music and video players. For a true .mp3 from AAC, the page prints an ffmpeg command that re-encodes it with LAME (-c:a libmp3lame -q:a 2).
    Can it convert encrypted M3U8 streams?
    AES-128, yes: the page fetches the key named in the playlist and decrypts each segment with WebCrypto, including streams that change keys midway and separate audio playlists with their own key. SAMPLE-AES and DRM (Widevine, PlayReady, FairPlay) are not converted. Removing DRM is illegal in most countries.
    Can I convert a live M3U8 stream to MP4?
    Not in the browser: a live playlist has no end, so there is no finished file to build. The page prints an ffmpeg command that records the stream to a .ts file until you press q, which stays playable even if the recording is cut.

    Romain Gouraud, RGC Digital LLC

    Updated 2026-10-09. Separate audio and audio only were tested on generated streams (MPEG-TS, raw AAC and MP3 segments, fragmented MP4, AES-128 on the video and audio playlists, two languages, spliced parts): ffprobe found the picture and the sound, both matched the source frame for frame, and the sound started at the same offset from the picture as in the source. The first segments of Apple's public sample with separate audio merged with the same offset as the source. Before that, tested on the public MPEG-TS, AES-128 and byte-range streams above (first 8 segments of each): every MP4 had H.264 video and AAC sound in ffprobe and decoded in ffmpeg without errors. Fragmented MP4 with byte ranges was checked on Apple's video and audio playlists, separately; key rotation, spliced MPEG-TS parts (EXT-X-DISCONTINUITY, joined end to end in ffprobe) and the refusals (live, DRM, SAMPLE-AES) on test playlists. The diagnosis comes from m3u8-doctor (MIT); the MPEG-TS remux uses mux.js (Apache-2.0).