About this tool
Video Merger joins two or more video clips end-to-end into a single MP4, all inside your browser. Powered by ffmpeg.wasm, it uses the FFmpeg concat demuxer, so it works best when every clip shares the same video codec — for example several H.264 MP4s from the same phone or recorder. The "Re-encode to H.264" option is on by default: it re-encodes the joined result at CRF 23 with AAC 128 kbps audio, which smooths over timestamp, keyframe, and resolution differences between clips (different sizes are scaled to the first clip's frame size). Untick it for a fast, lossless stream-copy join when the clips match exactly. Clips are merged in the order they were added; you can remove any clip from the queue with its × button. Clips that use different codecs (such as HEVC plus H.264) cannot be joined reliably — convert them to the same format first. Nothing uploads — all videos and the final output stay on your device.
Why use it
100% private — none of your clips ever leave your device
Stream-copy concat is lossless and fast when sources match codec
Re-encode option smooths over timestamp, keyframe and resolution differences between same-codec clips
No file count limits — merge dozens of clips in one go
No watermarks, no signup, completely free
Works offline after the first ffmpeg.wasm download
How to use
- Click or drag two or more MP4, WebM or MOV files onto the upload area.
- Check the numbered queue — clips are merged in the order they were added.
- Remove any clips you don't want by clicking the × next to them.
- Add more clips by clicking the upload area again; they are appended to the end of the queue.
- Leave "Re-encode to H.264" ticked (the default) for mismatched clips, or untick it for a lossless stream-copy join of identical clips.
- Click "Merge Videos" and wait for ffmpeg.wasm to concatenate locally.
- Preview the merged result and click Download to save the combined MP4.
When it helps
- Joining multiple short phone clips into one continuous recording
- Combining screen-capture segments after pause/resume
- Stitching tutorial chapters exported with the same settings into a single deliverable file
- Merging short dashcam segments around an event for a continuous timeline
- Joining several short recordings of the same meeting or webinar
Examples
01Join 5 phone clips from same camera
Input5 × 1080p MP4 H.264, total 200 MB, re-encode off
Expected resultSingle MP4, ~200 MB, lossless, completes in seconds
02Merge screen recordings with different sizes
Input1920×1080 and 1280×720 H.264 MP4 recordings, re-encode on (CRF 23)
Expected resultOne H.264 MP4 at 1920×1080 — the second clip is scaled to the first clip's frame size
03Stitch tutorial chapters
Input4 × 60 MB H.264 MP4 chapters exported with the same settings, re-encode off
Expected resultSingle ~240 MB MP4 with no quality loss, joined by stream copy
Tips
- If your clips were exported from the same source/camera with identical settings, untick re-encode for a lossless, much faster merge.
- If you see stuttering or audio drift at clip boundaries with stream copy, tick re-encode and merge again.
- Pre-trim oversized clips with the Video Trimmer tool before merging to stay under the ~500 MB total memory budget.
- For more than 10 clips, consider merging in two passes (5+5 → final) to keep peak memory usage lower.
- Clips with different codecs (e.g. iPhone HEVC and OBS H.264) can't be joined by the concat demuxer — convert them to H.264 MP4 first with Video Resize & Converter.
- Clips are merged in the order you add them, so add them one by one or name them 01-clip.mp4, 02-clip.mp4 so the file picker keeps the order you want.
Frequently Asked Questions
Does my video leave my device?⌄
No. All concatenation happens locally via ffmpeg.wasm — your clips and the merged output never reach any server.
Why does it require Chrome / Edge?⌄
ffmpeg.wasm needs SharedArrayBuffer for multi-threaded WebAssembly, which only works in browsers that send COOP/COEP cross-origin isolation headers — Chrome, Edge, Brave, and Arc qualify.
What is the file size limit?⌄
There is no server-imposed cap, but the browser tab can address roughly 2 GB before running out of memory. Practically, total combined input around 500 MB is the safe ceiling.
When do I need to enable re-encode?⌄
Keep it on (the default) whenever your clips differ in resolution, frame rate, keyframe interval or timestamps — it re-encodes the joined result to H.264 at CRF 23 with AAC audio, scaling everything to the first clip's frame size. It does not fix clips that use different codecs (e.g. HEVC plus H.264); convert those to the same codec first.
Will re-encoding reduce quality?⌄
Slightly. Re-encoding at CRF 23 is visually transparent for most content but is technically lossy. If your sources match exactly, untick re-encode for lossless joining.
Can I reorder clips?⌄
The merge order matches the upload order. Remove a clip and re-add it last to move it to the end. Drag-and-drop reordering is on the roadmap.
Why do I get a glitch at the join points with stream-copy?⌄
Stream-copy concat needs identical streams — different keyframe intervals, resolutions or pixel formats cause stutters. Tick re-encode to fix. If the clips use different codecs entirely, convert them to the same codec first.
Why does the first run take longer?⌄
ffmpeg.wasm is ~30 MB and downloads on first use, then is cached by your browser for instant subsequent merges, even offline.
Glossary
- Concat demuxer
- An FFmpeg input mode (-f concat) that reads a text list of files and joins them as one logical input — fast and lossless when codecs match.
- Stream copy
- FFmpeg's -c copy mode: muxes existing audio/video streams into a new container without decoding/re-encoding.
- Container
- The wrapper file (MP4, WebM, MOV) that holds video, audio and metadata streams together.
- Codec
- Algorithm that encodes/decodes video (H.264, VP9) or audio (AAC, Opus) — must match across clips for stream-copy concat.
- ffmpeg.wasm
- WebAssembly port of FFmpeg that runs locally in your browser tab — no server processing.
- SharedArrayBuffer
- A JS memory primitive required for multi-threaded WebAssembly; gated by COOP/COEP headers.
A LITTLE HELP. A LOT DONE.
Good tools.
Great flow.
Your shortcut to the everyday. Create, convert, calculate,
and get back to what you love.
✳
✳
✓ Free to use✓ No sign-up✓ 500+ possibilities