Video Splitter & Joiner

Split videos into clips or merge into one. One-click export to 1080×1920 vertical MP4 for YouTube Shorts and TikTok. Browser-only, no upload.

published

  • [FREE]
  • [NO_SIGNUP]
  • [NO_UPLOAD]

A video splitter and joiner that runs in your browser. Drop an MP4, MOV, WebM, MKV, or AVI; split it into N equal parts, cut every X seconds, or merge several files into a single output. An optional toggle re-encodes each output to the 1080×1920 vertical MP4 that YouTube Shorts, TikTok, and Instagram Reels expect — so every clip from a long recording is upload-ready in one pass. No upload, no account, no watermark. Powered by FFmpeg compiled to WebAssembly.

How to use the tool

  1. Drop your videos. Multiple files at once are fine — each gets its own row in the queue.
  2. Pick a mode. Split → Equal parts (N evenly sized clips) or Fixed interval (a clip every X seconds, with the short tail kept at the end). Join → merge two or more videos into one.
  3. Configure. For Split, set parts or interval seconds. For Join, drag the up/down arrows to reorder.
  4. (Optional) Format as Shorts/TikTok. Toggle “Format output as YouTube Shorts / TikTok” to re-encode every output to 1080×1920 vertical MP4. Pick Pad (black bars) or Crop (fills frame) and a quality preset.
  5. Click Run. First run downloads the FFmpeg core (~30 MB) once and caches it. Stream-copy split/join is close to disk-speed; with the Shorts/TikTok toggle on, each output is re-encoded so it runs at roughly realtime.
  6. Grab the output. Per-clip download links live under each row. Download ZIP bundles every split clip; Join mode produces a single merged file.

Joining videos (stream-copy)

Join mode uses FFmpeg’s concat demuxer with -c copy. That means the audio and video bitstreams from every input are concatenated byte-for-byte into a single output — no decode, no re-encode, no quality loss. Every input must share the same codec and container; if they differ, the join fails. Normalize mixed sources with the Video Compressor first (everything to MP4 + H.264 + AAC).

The Shorts / TikTok toggle

Turning the toggle on chains a second pass after the split or join: every output is re-encoded to the exact 1080×1920 vertical 9:16 MP4 (H.264 + AAC) spec YouTube Shorts, TikTok, and Instagram Reels all share. Pad surrounds the source with black bars to preserve every pixel; Crop fills the entire frame and trims whatever does not fit.

The output is upload-ready for all three platforms — one file, three uploads. The trade-off: re-encoding takes roughly realtime, so a 60s clip needs ~60s of CPU. For a dedicated workflow without split/join clutter, see YouTube Shorts & TikTok Converter.

Why stream-copy?

The tool runs FFmpeg with -c copy. That means the audio and video bitstreams from your source are written directly into the output containers — no decode, no re-encode, no quality loss. The trade-off is that cuts can only land on keyframes. Most videos have a keyframe every 1–5 seconds; the tool snaps each cut to the nearest keyframe at or before your target timestamp.

If exact-frame cutting were needed, every clip would have to be fully re-encoded. That is slow in a browser tab (5–20× realtime in WebAssembly) and slightly lossy. For the common case — splitting a long recording into chapters, isolating a section to share, or chopping a screen recording into segments — stream-copy is the right default.

What input formats are supported?

  • MP4 (.mp4) — the most common container, broadly compatible.
  • MOV (.mov) — Apple QuickTime, what iPhones record.
  • WebM (.webm) — VP8/VP9/AV1 with Opus/Vorbis audio.
  • MKV (.mkv) — Matroska, flexible container often used for archives.
  • AVI (.avi) — older RIFF-based container.

Output containers always match the input. An MP4 produces MP4 clips; a WebM produces WebM clips.

Memory and file-size limits

Browser tabs cap JavaScript memory at a few gigabytes. The tool enforces:

  • Hard limit: 4 GB per file. Matches the WebAssembly linear-memory ceiling per instance — the absolute wall for in-browser FFmpeg. Files near the cap may still fail on machines with limited RAM; the browser will OOM before the tool intervenes.

For very large files, split them in chunks of a few hundred megabytes before processing, or use a desktop FFmpeg.

Privacy

Same posture as every other tool on the site. A static HTML page loads its JavaScript, then fetches the FFmpeg WebAssembly core once from a public CDN (cdn.jsdelivr.net) — the core is just the encoder binary, no user data ever leaves the tab. After that one-time download, DevTools → Network shows zero outbound requests on subsequent trims. There is no upload, no temporary cloud storage, no analytics on file contents, no watermark.

How it compares

bytefork.toolsclideo.comonline-video-cutter.com
Runs in browser only✗ (uploads to server)✗ (uploads to server)
Lossless stream-copy✗ (re-encodes)✗ (re-encodes)
Batch (multiple videos)
ZIP download of all clips
Watermark on free tiersometimes
Sign-in requiredfor larger files
Ad-free

Frequently asked questions

Are my videos uploaded anywhere?

No. Everything runs in your browser using FFmpeg compiled to WebAssembly. After the page loads and the FFmpeg core file downloads once, no further requests are made when you trim. Open DevTools → Network to confirm — your video bytes never leave the tab.

Why does the cut land a second or two off the timestamp I picked?

The tool uses stream-copy mode so the output is lossless and fast (no re-encode). Stream-copy can only cut on keyframes, and most videos have keyframes every 1–5 seconds. The tool snaps each cut to the nearest keyframe before your chosen mark. Exact-frame cutting would require re-encoding the entire video — slow in the browser and slightly lossy.

What input formats are supported?

MP4, MOV (QuickTime), WebM, MKV (Matroska), and AVI. The output container always matches the input — an MP4 in produces MP4 clips out.

How big a file can I trim?

Up to 4 GB per file. That ceiling matches the WebAssembly linear-memory limit per instance — the hard wall every in-browser FFmpeg tool hits. Files close to the cap need a 64-bit browser and enough free RAM; the browser, not the tool, decides where it really gives up.

Why is the first trim slow?

The FFmpeg WebAssembly core is about 30 MB and downloads on the first trim of the session. After that, every subsequent trim uses the cached core and is nearly disk-speed.

Will the audio still sync correctly?

Yes. Stream-copy preserves the original audio and video streams together — no re-muxing artifacts, no drift.

Are clips watermarked?

No. The output is a clean cut of your input, byte-for-byte where possible. No branding, no overlay, nothing added.

Can I trim multiple videos in one batch?

Yes. Drop several files; the tool processes them one at a time (FFmpeg already uses multiple CPU threads per video) and bundles every clip from every input into a single ZIP.

Can I join multiple videos into one?

Yes. Switch the mode to "Join videos", drop two or more files, drag the up/down arrows to reorder, then click "Join all". The output is a single file in the same container as the inputs.

Why does the join fail when I mix MP4 and MOV?

Stream-copy join requires every input to share the same codec and container. If your sources differ, run them through the Video Compressor first to normalize them to MP4 + H.264 + AAC, then join.

Can I get YouTube Shorts or TikTok-ready output from the split/join?

Yes. Enable the "Format output as YouTube Shorts / TikTok" toggle. The toggle works in both Split and Join modes. After trimming or joining, each output is re-encoded to 1080×1920 vertical MP4 (H.264 + AAC), upload-ready for YouTube Shorts, TikTok, and Instagram Reels.

Pad or Crop for Shorts/TikTok?

Pad keeps every pixel from the source by adding black bars on the sides. Crop fills the entire 9:16 frame by trimming the edges. Use Pad when text or subjects sit near the edges; use Crop when the subject is centered and you want full-screen impact.

Does the Shorts/TikTok toggle break the lossless split?

It re-encodes the trimmed or joined output, so the lossless guarantee only applies when the toggle is off. With the toggle on, each clip is first stream-copy trimmed, then re-encoded to the Shorts/TikTok spec. Slower, but the output is ready to upload.