Video · 59 tools · nothing uploads

HLS (M3U8) to MP4

Stitch an HLS stream into one MP4: drop its .m3u8 playlist (a master playlist naming another playlist is fine too) and every .ts or .m4s segment it lists in one batch. Every packet is copied straight across with no decode and no re-encode. A segment the playlist names but you did not include is a clear refusal, not a silently short video.

Input

HLS (M3U8) to MP4 gathers a dropped playlist and every segment it lists, joining them into one continuous MP4 file. Nothing gets decoded or rebuilt; each packet moves across exactly as stored. A segment the playlist names that you forgot to include stops the run, naming what is missing, rather than shipping a shorter video.

Questions

What files do I need to drop?

The .m3u8 playlist and every .ts or .m4s segment it lists, all in one batch. For a master playlist, include the media playlist it points to as well.

Does it decode the video?

No. Every packet is copied straight from the segments into a new MP4 with no decode and no re-encode, so quality matches the source exactly.

What happens if I am missing a segment?

The tool refuses and names the missing path, rather than silently stitching together a shorter video than the playlist describes.

Does it handle a master playlist?

Yes. A playlist declaring stream variants is detected and used as the root, so dropping a master playlist plus its media playlist and segments resolves correctly.

Does this run outside the browser?

Yes. Because nothing is decoded, it runs in Node, on the command line and through MCP as well as on the web page.

Related Video tools

n→nMOV to MP4Repackage a QuickTime MOV into MP4. Both are the same ISOBMFF box family carrying the same H.264/H.265 and AAC, so every packet is copied across with no decode and no re-encode.Runs on each file you dropn→nMKV to MP4Repackage a Matroska MKV into MP4 with no decode and no re-encode. A subtitle or attachment track MP4 has no room for is dropped and named, the video and audio packets are copied across untouched.Runs on each file you dropn→nTS to MP4Repackage an MPEG transport stream (.ts) into MP4. TS repeats its stream tables throughout the file for channel-hopping and has no seek index; MP4 gets one, so the same packets seek instantly once copied across.Runs on each file you dropn→n3GP to MP4Repackage an old 3GP mobile video into MP4. 3GP is already an ISOBMFF variant carrying H.264/AAC or the older H.263/AMR, so a modern player that refuses the 3GP extension plays the identical packets once they sit in an MP4 box.Runs on each file you dropn→nMP4 to WebMTranscode an MP4 to WebM. H.264/AAC and VP8-VP9/Opus are unrelated codec families, so every frame is decoded and re-encoded rather than copied, in the browser only, through WebCodecs.Runs on each file you dropn→nWebM to MP4Transcode a WebM to MP4. VP8/VP9/AV1 and Opus/Vorbis are not MP4-native codecs, so this decodes and re-encodes every frame through WebCodecs, in the browser only, rather than repackaging the bytes.Runs on each file you dropn→nMP4 to GIFTurn an MP4 clip into an animated GIF. WebCodecs decodes the frames and this tool builds the GIF89a bytes itself: one shared 256-colour palette across every sampled frame, no dithering. Browser only.Runs on each file you dropn→nMOV to GIFTurn a QuickTime MOV screen recording or clip into an animated GIF. WebCodecs decodes the frames and this tool builds the GIF89a bytes itself, one shared palette across every sampled frame. Browser only.Runs on each file you drop