ffmpeg join two mp4 files with ffmpeg on command line
2019 Update:
As mentioned in the comments, Stack Overflow has a great description of the available options for concatenation, as well as a discussion of which method to use depending on the types of files you're using:
How to concatenate two MP4 files using FFmpeg?
Original 2016 Answer:
You should be able to use the concat protocol method to combine the files:
ffmpeg -i "concat:input1.mp4|input2.mp4|input3.mp4" -c copy output.mp4
In addition, the FFmpeg manual discusses a method specifically for MP4 files, in order to losslessly concatenate them, but requires that you create temporary files (or named pipes):
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output.mp4
You may replace file with list by outputting list to stdout
and reading the list from stdin
by ffmpeg:
(echo file 'a.mp4' & echo file 'b.mp4') | ffmpeg -protocol_whitelist file,pipe -f concat -safe 0 -i pipe: -vcodec copy -acodec copy "result.mp4"
No, there appears to be no way to use the ffmpeg concat demuxer on a single command line without some hack. You need to create the input text file with the list of files. I thought this strange myself, maybe someone will add this to FFMpeg at a later date.
The accepted answer to this question uses the concat protocol, not the concat demuxer which is what the OP asked.