gizmobench
BrowseDaily

Video Joiner

Choose local video clips, put them in order and trim their start and end times. Join them into one MP4 or WebM with a common frame size, frame rate and sound format. The work runs in your browser, and the timeline explains how each clip will fit before you start.

Add video clips to join

· or drop them anywhere on the stage

Never uploadedNo accountUp to 250 MB togetherUp to 10 minutes
Clips
none yet
Length
none yet
Frame
none yet
Output
H.264 MP4
Frame size
Other shapes
Frame rate
Format
Sound

Ready. Add video clips, or drop them on the stage.

  • Two 2-second clips, each trimmed to 1 secondjoined at 30 fps
    2.000 s out, 60 frames, within one frame (33.3 ms)
  • A 1440 x 1080 clip in a 1920 x 1080 videofit, then fill
    fit: 1440 x 1080 with 240 px bars each side; fill: scaled to 1920 x 1440, 180 px cut top and bottom
  • Cancel at 60%frame 423 of 705
    decoders and encoders are closed and no file is offered; the timeline is kept

Choose clips, or drop them on the stage, and add more with Add clips; they join in the order of the timeline, and Up and Down move the selected clip. Trim a clip by typing its start and end, or by playing it and pressing Start here and End here. Play timeline plays every trimmed part in order in the preview, which is shaped like the joined frame so Fit and Fill look as they will; it moves to the next clip when the player reports the end of a trim, so a cut in the preview can land a moment late, while the joined file cuts on the frame. The joined video has one frame size, one frame rate and one sound format. The frame is the first clip's upright size with even sides, or the size you choose; a clip of another shape is scaled to fit inside it with black bars (Fit) or to cover it with its edges cut from both sides (Fill), and a phone clip stored sideways is turned upright by its rotation flag first. Auto uses the highest frame rate among the clips, kept between 24 and 60 fps. Each output frame shows the clip's frame that was on screen halfway through it, so a slower clip repeats frames and a faster one skips them; frames are never blended. Every join is a straight cut with no gap or transition: each part starts at the frame nearest the sum of the trims before it, so every join lands within half a frame. Sound is written as stereo at 48 kHz, or at 44.1 kHz in an MP4 when every clip with sound has that rate, at 128 kbps: AAC in an MP4, Opus in a WebM, with an MP4's AAC start-up delay measured and skipped with an edit list. A clip at another rate is resampled, more than two channels are mixed to stereo, and a clip without sound gets silence for its whole part, marked on the timeline, so the sound never stops short of the picture; Remove sound leaves the sound track out entirely. A clip whose sound this browser cannot decode stops the join before any work, with Remove sound as the way round it. It reads MP4, MOV, WebM, MKV and MPEG-TS clips whose video this browser can decode, and refuses AVI, MPG, WMV and FLV by name; each clip's size, picture size, length and frame count are read before a frame is decoded, up to 50 clips, 250 MB together and 10 minutes, with frames up to 4096 px a side and 9,437,184 pixels, so 3840 x 2160 fits. The joined file is built in memory, so its size is estimated from the frame size, format and length before any work, and a join estimated past 1,000 MB is refused: 3840 x 2160 in H.264 fits up to 5 minutes 48 seconds, and 10 minutes at 1920 x 1080 stays under it in every format. Clips are opened one at a time, their frames decoded forwards and each drawn and released before the next, and each clip's decoders are closed when its part is written. When the work ends the file is read back: its container, codecs, frame size and sound track must match the plan or it is not offered, and its length, where its sound starts and how long its sound runs are measured, not predicted.

Accuracy. Joins clips with the codecs your browser can decode and encode, and refuses a clip or an output format it cannot handle with the reason before any work starts, never sending it to a server; it does not import links or download from streaming sites. Every join is a straight cut with no gap or transition, every clip is re-encoded to one frame size, frame rate and sound format, silence filled in for a clip without sound is marked on the timeline, and the finished file is read back to check its length against the sum of your trims to one frame. Local files only, up to 250 MB and 10 minutes in total.
The encoding is done by your browser, and the file handling by one open source library served from this site. Containers are read and written by Mediabunny 1.55.7 under the MPL-2.0 (licence text, the exact package, source), bundled unmodified. Video and sound are decoded and encoded by the WebCodecs codecs built into your browser, which is why the formats on offer depend on it.

Common questions

How do I join videos without uploading them?
Choose the clips, or drop them on the stage, and add more with Add clips. Put them in order with Up and Down, and trim each one if you need to. Choose the frame size, how clips of another shape fit, the frame rate and the format, then press Join. Your browser decodes every clip and encodes the joined video with its own WebCodecs codecs, and the file is handed back as a download. Nothing is sent to a server, and there is no account.
Can I join videos with different sizes or aspect ratios?
Yes. The joined frame is the first clip's upright size with even sides, or 1920 x 1080, 1280 x 720, 1080 x 1920 or 1080 x 1080. A clip of another shape is either fitted inside it with black bars (Fit) or scaled to cover it with its edges cut from both sides (Fill): a 1440 x 1080 clip in a 1920 x 1080 video gets 240 px bars each side with Fit, or is scaled to 1920 x 1440 with 180 px cut top and bottom with Fill. A phone clip stored sideways is turned upright first, so a 1080 x 1440 clip fits as 810 x 1080 with 555 px bars each side. The timeline shows this for every clip before you join.
What happens when the clips have different frame rates?
The joined video has one frame rate: Auto uses the highest rate among the clips, kept between 24 and 60 fps, or you can choose 24, 25, 30, 50 or 60. Each output frame shows the clip's frame that was on screen halfway through it, so a 24 fps clip in a 30 fps video shows all its frames with some shown twice, and a 60 fps clip in a 30 fps video shows every other frame. Frames are never blended.
Will the joined video be exactly as long as my clips?
Each join is a straight cut with no gap or transition, and each clip starts at the frame nearest the sum of the trims before it, so every join lands within half a frame of where your trims put it. Two 2-second clips trimmed to 1 second each come out as 2.000 s, 60 frames at 30 fps. The finished file is read back and its length is compared with the sum of your trims to one frame, and the result says whether it landed within that.
What happens to the sound if one clip has none?
That clip gets silence for its whole part, marked on the timeline, so the sound runs without a break from the first frame to the last. The joined sound is stereo at 48 kHz, or 44.1 kHz in an MP4 when every clip with sound has that rate, encoded at 128 kbps as AAC in an MP4 or Opus in a WebM. A clip at another rate is resampled and more than two channels are mixed to stereo. In an MP4, the AAC encoder's start-up delay is measured and skipped with an edit list, and the finished file is checked for sound starting within one frame of the picture. Remove sound writes no sound track at all, and if your browser cannot decode a clip's sound, the join is refused before any work with Remove sound as the way round it.
Which formats can it join, and how big can the clips be?
It reads MP4, MOV, WebM, MKV and MPEG-TS clips whose video your browser can decode, and refuses AVI, MPG, WMV and FLV by name. It writes H.264 or HEVC in an MP4, or VP9, VP8 or AV1 in a WebM, and asks your browser whether it can encode that at the joined size before any work starts. Up to 50 clips and 250 MB together are joined, each clip and the joined video up to 10 minutes, with frames up to 4096 px a side and 9,437,184 pixels, so 3840 x 2160 fits. The joined file is built in memory, so its size is estimated from the frame size, format and length before any work, and a join estimated past 1,000 MB is refused: 10 minutes at 1920 x 1080 in H.264 comes to about 468 MB, while 3840 x 2160 in H.264 fits up to 5 minutes 48 seconds.
Can I join videos from a link?
No. It joins files on your device only: it does not import links or download from streaming sites.
Can I stop a join partway through?
Yes. Cancel closes the decoders and encoders at once and no file is offered, not even a partial one. The timeline and your trims are kept, so you can change them and join again.
Does joining lower the quality?
Every clip is re-encoded, because the joined video has one frame size, frame rate and codec, so some quality can be lost, and a clip scaled to the frame is resampled. The picture is encoded at a high quality setting and the sound at 128 kbps.
Can I join videos on a Mac, Windows PC, Linux or iPhone?
Use a current browser with WebCodecs video decoding and encoding. The same requirements apply on Mac, Windows, Linux or Ubuntu, and on iPhone: the operating system alone does not establish codec support. The page checks each clip’s decoder and the chosen output’s video and sound encoders before joining. If the browser is missing the required codecs, it refuses the join with a reason; there is no server fallback.
Does the video joiner add a watermark?
No. It encodes the joined clip frames without adding a logo or watermark. A mark already present in the source video remains; this page does not remove it.
Can I combine a separate MP3 or photo with video?
No. Every input must contain a video track; audio-only files and still images cannot be added to the timeline. The joiner can keep sound already embedded in a video clip, but it has no separate soundtrack input or photo-duration control.
Can I split one video into separate files?
No. Start and end trims select the portion of each input clip used in the join. The result is one joined file, not separate downloads for multiple segments of one source.

Joins clips with the codecs your browser can decode and encode, and refuses a clip or an output format it cannot handle with the reason before any work starts, never sending it to a server; it does not import links or download from streaming sites. Every join is a straight cut with no gap or transition, every clip is re-encoded to one frame size, frame rate and sound format, silence filled in for a clip without sound is marked on the timeline, and the finished file is read back to check its length against the sum of your trims to one frame. Local files only, up to 250 MB and 10 minutes in total.