Video Joiner
Put video clips in order, trim each one and join them into a single MP4 or WebM, encoded in this browser tab with the codecs your browser already has, so the clips are never uploaded. Clips of different sizes, frame rates and sound formats are made into one video: each is fitted inside the frame with black bars or scaled to fill it with its edges cut, a phone clip stored sideways is turned upright, every output frame shows what was on screen halfway through it, and all the sound is written at one rate, with silence written and marked on the timeline for a clip that has none. The timeline says what will happen to every clip before any work starts, a codec your browser cannot handle is refused with the reason, and the finished file is read back to check its length against the sum of your trims to one frame.
Add video clips to join
· or drop them anywhere on the stage
- 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.
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.
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.
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.