56

I have two high-quality mp4 files, which are of two parts of the same show.

I want to merge them together into 1 file, and I usually use VirtualDub to merge my files... But it doesn't seem to support mp4.

What alternatives are available (especially ones that don't require re-encoding)?

Breakthrough
  • 34,227
  • 10
  • 105
  • 149
Paolo Bergantino
  • 3,039
  • 5
  • 29
  • 27

8 Answers8

49

I usually use VirtualDub to merge my files, but it doesn't seem to support mp4. So what alternatives are there?

Avidemux. It's just like VirtualDub, only with more formats supported and built-in codecs and filters. I always use it in preference; it joins AVC+AAC.MP4 files (without recoding) fine for me.

To join them in AviDemux:

  1. File -> Open -> Select File
  2. File -> Append -> Select File
  3. Set all to Copy
  4. File -> Save -> FileName
  5. Wait..

According to AViDemux forums, this join process is lossless (http://www.avidemux.org/smf/index.php?topic=9467.0)

bobince
  • 9,716
  • 2
  • 21
  • 18
  • yeah, it seems to do excellent with keeping audio in sync with video whereas the other persons answers to this question are questionable on that IMHO. – djangofan Nov 12 '10 at 23:39
  • 1
    I tried using Avidemux to join two files together but the audio became out of sync. – GiddyUpHorsey Jul 02 '12 at 13:56
  • You can get sync problems when the amount of audio material available doesn't match the length of video frames, or there's any stream corruption. You may be able to fix this up with the 'stream fix' features of VideoRedo or ProjectX. – bobince Jul 02 '12 at 21:38
  • I just tried this (H264 video) and it lost frames at the joins unless they were I-frames, as somewhat described [here](http://avidemux.berlios.de/doc/en/cutting.xml.html#doc_chap1_sect4). Useless. – Christopher Galpin Jun 11 '13 at 01:09
  • 1
    But this method worked: http://superuser.com/a/255566/1780 Hooray! – Christopher Galpin Jun 11 '13 at 01:15
  • 4
    If you use AviDemux to join two Mp4 files, don't forget to select the Mp4 Demux option at the bottom left hand corner. Otherwise it may try to convert it to an avi! –  Aug 11 '13 at 05:12
  • This didn't work for me. I concatenated 3 sequences of videos (3 or 4 individual videos each) and once it worked, once only the first video worked, and once only the first 2 videos worked. The remainder of the concatenated videos was just a gray image, even though the resulting videos were pretty much exactly as big as the ones they were supposed to be the concatenated versions of. [This other answer](https://superuser.com/a/522658/499352), however, worked just fine. – UTF-8 Sep 27 '17 at 22:13
30

You can do this with ffmpeg:

mkfifo temp0 temp1
ffmpeg -i input0.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y temp0 2> /dev/null & \
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y temp1 2> /dev/null & \
ffmpeg -f mpegts -i "concat:temp0|temp1" -c copy -absf aac_adtstoasc output.mp4

This doesn't re-encode anything, it places them in a new transport stream container, which makes them more easy to concatenate, and then concatenates them back into an MP4. If output.mp4 already exists, the command will fail. The version above uses named pipes, if you're on a system that doesn't support those you'd have to use intermediate files (like windows):

ffmpeg -i input0.mp4 -c copy -bsf:v h264_mp4toannexb temp0.ts
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb temp1.ts
ffmpeg -i "concat:temp0.ts|temp1.ts" -c copy -bsf:a aac_adtstoasc output.mp4
slhck
  • 223,558
  • 70
  • 607
  • 592
evilsoup
  • 13,097
  • 3
  • 59
  • 80
  • can someone explain how this is done with `avconv` instead of `ffmpeg`? I was able to complete the first two steps, but the last doesn't recognize the option `-absf` – a06e Oct 01 '14 at 23:45
  • @becko See my edit. Now you should use a stream specifier (see here https://libav.org/avconv.html#Advanced-options). – slhck Oct 02 '14 at 12:46
  • 2
    +1 just for future reference, you can substitute `avconv` for `ffmpeg` in the above commands and it will work. – a06e Oct 02 '14 at 14:00
18

Concat demuxer

The concat demuxer was added to ffmpeg 1.1. If your version of ffmpeg is to old, get the newest static binary from here: http://www.ffmpeg.org/download.html

Instructions

Create a file mylist.txt with all the files you want to have concatenated in the following form (Lines starting with a dash are ignored):

# this is a comment
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

Note that these can be either relative or absolute paths. Then you can encode your files with:

ffmpeg -f concat -i mylist.txt -c copy output

It is possible to generate this list file with a bash for loop, or using printf. Either one of the following would generate a list file containing every *.wav in the working directory:

for f in ./*.wav; do echo "file '$f'" >> mylist.txt; done
printf "file '%s'\n" ./*.wav > mylist.txt

Source: ffmpeg wiki

erik
  • 1,908
  • 3
  • 22
  • 38
8

YAMB along with MP4BOX is a good option.
Download both and unzip them (no installation needed and together they're about 5MB), in YAMB choose Settings and set the folder path of MP4box.
To join mp4 files choose Editing > Click to Join supported...

Eran
  • 3,421
  • 5
  • 34
  • 33
  • 1
    Seems like the best solution, keeping the .mp4 container format which would seem the more attractive option to the author ^^ – Oskar Duveborn Sep 19 '09 at 13:44
  • 1
    After difficulty, I used this config: MP4Box_path=E:\Software\Video Editing\Yamb-2.1.0.0_beta2\MP4Box\MP4Box.exe in an attempt to merge 4 500MB MP4 files generated from AVIDemux . It didn't work. The program just sat there for 45 minutes doing nothing until I finally gave up. – djangofan Nov 27 '09 at 23:43
  • 1
    i had trouble using this method because of audio sync problems. it was a nightmare... not trying it again. – djangofan Nov 12 '10 at 23:37
7

Try using the Matroska video container.

Firstly, you need mkvtoolnix. Download and install it, then you need to fire up mkvmerge GUI (unless you like command-line tools, which is fine by me - although you might want to look at the file linking section of the mkvmerge documentation).

Add your first file by clicking "add". Then, click on "append", and open your second file. Set the output file, hit "Start muxing" at the bottom, and away you go!

enter image description here

If the container is unsuitable for your needs, you can reencode it, or try to convert it to some other format... Although MKV is a very lovely container!

andromeda947
  • 384
  • 2
  • 10
Breakthrough
  • 34,227
  • 10
  • 105
  • 149
6

SUPER © (Simplified Universal Player Encoder & Renderer) provides the following additional Output Process:

Any supported input Multimedia file can be processed:

      o Join Format-Identical Files.
      o Mux Video & Audio Streams.
      o DeMux Extract Streams. 

of course, MP4 is a supported format.

SUPER © is freeware.

  • 5
    Its user interface is the most horrible I've seen in my life. I'm not kidding, it's just horrible. I emphasize it once more: *I can't name a worse interface, I'm serious about it, I've never seen anything below the "SUPER threshold".* – Camilo Martin Jan 12 '12 at 14:48
1

If you can play them on your system / have a codec installed, Windows Movie Maker may the quickest (and free) way to join the two files. You can then use Virtualdub to convert to a different format.

William Hilsum
  • 116,650
  • 19
  • 182
  • 266
1

Another solution is Open Video Joiner. It also does transition effects.

enter image description here

Gaff
  • 18,569
  • 15
  • 57
  • 68
harrymc
  • 455,459
  • 31
  • 526
  • 924