BrowserTools

Video Joiner

Concatenate clips into one video

By Guga — BrowserTools maintainer, Tbilisi, Georgia Updated 2026-08-31
Free Private No uploads

Joining re-encodes every clip, which needs the WebAssembly FFmpeg core — about 30 MB from unpkg.com on your first run here, cached by the browser after that. All parts stay inside the tab.

What is Video Joiner?

Pick the clips in the order you want them and they come back as one continuous MP4. Nothing is glued together at the container level: every part is decoded and re-encoded to H.264 at CRF 23 with AAC audio, which is what allows sources that disagree with each other to be stitched at all. The first clip in the list sets the output frame rate and resolution, and parts recorded at a different rate get resampled to match — the timeline stays correct, but motion in the odd one out can look slightly stuttery. Scale the inputs up before joining, because total memory is the real ceiling: each part is read whole into the engine's in-memory filesystem, so join several short clips rather than a handful of large ones.

Combine multiple video clips into a single file. Best results come from clips with matching resolution and codec — joined locally in your browser.

Private Video Joiner In Your Browser

Video Joiner is processed locally with client-side JavaScript. Your files never touch a server, and there is no queue to wait in.

Step-by-Step

How to use Video Joiner

1

Drop two or more clips onto the panel; selection order is preserved and becomes playback order.

2

Check the order in the file count before continuing, since rearranging means deselecting and starting the list again.

3

Press Join into one video. Every part is re-encoded, so allow for a one-off engine download plus a length proportional to the total footage.

4

Play the joined file in the preview and save it with the Download MP4 button.

Key Capabilities
  • Accepts an arbitrary number of clips and joins them strictly in selection order.
  • Re-encodes everything to H.264 and AAC, so mixed input containers still yield a playable MP4.
  • Takes output resolution and frame rate from the first clip, reconciling later parts to match.
  • Writes each part and the join list to the engine's virtual filesystem and deletes both afterwards.
Common Use Cases
  • A course creator stitching six 720p lecture clips recorded across separate sessions into a single lesson video.
  • A video editor assembling b-roll shots from a phone and a camera into one sequence for a client review.
  • A QA engineer concatenating three short screen recordings of the same failing flow into one bug attachment.
Clear Answers

Frequently Asked Questions

Is the join lossless?
No. Every part is decoded and re-encoded to H.264 at CRF 23, which means a second generation of compression on material that was already encoded. A pure stream copy would be instant and lossless, but it only works when all the parts share identical codecs, resolution, frame rate and time base — and it fails outright the moment they do not.
What happens if my clips have different resolutions?
The first clip's dimensions win, and the rest are scaled to match during the re-encode. Joining a 4K clip after a 720p one will not give you a 4K result, and padding rather than cropping can appear if the aspect ratios differ. Scale your sources before joining if the first one is not the largest.
How many clips can I join at once?
The interface sets no count limit, but every part is copied entirely into the WebAssembly engine's memory alongside the decoded frames. A few dozen short clips is comfortable; several gigabytes of source video combined is where a browser tab will struggle. Join in batches if you are in doubt.
Does the first join need a download?
Yes — around 30 MB of WebAssembly FFmpeg from unpkg.com, cached by your browser for everything afterwards. The clips themselves are read into the tab and are never uploaded.