Merge MP4 files
Merging (or "concatenating") multiple MP4 files means gluing several video files end-to-end into one longer file. There are two ways to do it. If your source files are structurally identical - same video codec, same resolution, same frame rate, recorded from the same camera or exported from the same editing session - you can glue the compressed data directly without re-encoding anything. Fast (seconds regardless of total length) and lossless. If your inputs came from different sources, they need to be re-encoded into a common format first, which takes longer but works for any inputs. This page has the ffmpeg command for each path.
What actually changes
Concatenating video files is only fast when the inputs are structurally identical: same codec (H.264 or HEVC), same dimensions, same frame rate, same audio codec. When those match, ffmpeg's concat demuxer just glues the compressed streams together - no decoding, no re-encoding (see Remux vs re-encode for why that's so much faster). Two clips exported from the same editing session, or two GoPro chapters from the same recording, satisfy this.
The fast-concat command uses a text file listing the inputs: create a file `inputs.txt` with `file input1.mp4` on line one and `file input2.mp4` on line two (and so on), then run `ffmpeg -f concat -safe 0 -i inputs.txt -c copy output.mp4`. Takes seconds regardless of total length. The -safe 0 flag lets ffmpeg accept file paths outside a specific directory; -c copy skips re-encoding.
When the inputs don't match structurally, a full re-encode is required. `ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][0:a][1:v][1:a] concat=n=2:v=1:a=1 [outv] [outa]" -map "[outv]" -map "[outa]" -c:v libx264 -c:a aac output.mp4` uses the concat filter (different from the concat demuxer). This decodes all inputs, normalises them to a common format, and re-encodes to a single MP4. Runs at real-time or faster on modern hardware for 1080p; the total time is roughly equal to the total playtime of all inputs summed.
Wave's current build doesn't offer a merge UI. The conversion path is one input in, one output out. A dedicated merge mode with multi-file input is on the roadmap - it needs a materially different UX than the current drop-one-file flow. Until then, ffmpeg locally is the tool. HandBrake also doesn't merge (it's single-input only). For an interactive merge with preview, DaVinci Resolve (free) or iMovie handles it as a normal editing operation.
Three steps.
-
01
Step 1
For structurally-identical inputs (same codec, size, fps): create inputs.txt with "file input1.mp4" per line, then ffmpeg -f concat -safe 0 -i inputs.txt -c copy output.mp4.
-
02
Step 2
For different inputs: ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][0:a][1:v][1:a] concat=n=2:v=1:a=1 [outv] [outa]" -map "[outv]" -map "[outa]" -c:v libx264 -c:a aac output.mp4.
-
03
Step 3
The output is a single MP4 containing all inputs back-to-back.
Answers, specifically.
Which concat method should I use?
Fast-concat (demuxer) when inputs match structurally. Re-encode (filter) when they don't. If in doubt, try fast-concat first - if the output plays back with sync issues, glitches, or a black frame at the boundary, the inputs weren't structurally identical and you need the re-encode path.
How to know if inputs match?
ffprobe input.mp4 shows the codec, resolution, and frame rate for each input. Compare across inputs: if codec, width, height, and framerate all match, fast-concat works. Bitrate can differ; sample rate for audio can differ (may cause a click at the boundary).
Does Wave merge videos?
Not currently. Wave processes one input per conversion. A merge UI is on the roadmap; it needs a multi-file drop zone which is materially different from the current single-file UX.
DaVinci Resolve or iMovie to merge?
Both work well and offer preview. iMovie: drag clips onto the timeline in order → Export → pick MP4. DaVinci Resolve free: import clips → drag onto timeline → Deliver tab → MP4 export. Preview lets you check boundaries interactively.
Merge audio from one, video from another?
Different operation - that's a track-swap, not a concat. Command: `ffmpeg -i video.mp4 -i audio.mp4 -c:v copy -c:a aac -map 0:v -map 1:a output.mp4` takes video from input 1 and audio from input 2. Also on the Wave roadmap.
Merged output has a glitch or audio pop at each boundary.
Usually means the audio sample rates or channel counts don't match across inputs. Re-encode with the filter method (concat filter normalises), or pre-normalise each input with `ffmpeg -i input.mp4 -ar 48000 -ac 2 normalised.mp4` before concatenating.
Can I merge different codecs (H.264 + HEVC + AV1)?
Only through the re-encode path (concat filter). The filter decodes each input regardless of codec and re-encodes to a single output codec. Slower than fast-concat but universally works.