Cut multiple videos and merge with ffmpeg
You question is quiet general...
The following example may help you, but it might not solve your specific issues.
The example applies three stages:
Create synthetic video (with no audio):
ffmpeg -f lavfi -i testsrc=duration=3:size=160x120:rate=10 -c:v rawvideo -pix_fmt rgb24 testsrc.avi
(The created video is uncompressed).
Reference: https://trac.ffmpeg.org/wiki/FilteringGuideCut video into 3 parts (creating 3 video files):
ffmpeg -i testsrc.avi -ss 00:00:00 -c copy -t 00:00:01 sec0.avi ffmpeg -i testsrc.avi -ss 00:00:01 -c copy -t 00:00:01 sec1.avi ffmpeg -i testsrc.avi -ss 00:00:02 -c copy -t 00:00:01 sec2.avi
Reference: https://superuser.com/questions/138331/using-ffmpeg-to-cut-up-video
Concatenate (merge) 3 parts in reverse order:
ffmpeg -i "concat:sec2.avi|sec1.avi|sec0.avi" -codec copy output.avi
Note: for Linux use single quotes
'
Reference: Concatenate two mp4 files using ffmpeg
Synthetic video looks as the following image:
For anyone coming into this, I noticed that Gyan's answer has the drawback that inpoints and outpoints are approximate in the case of inter-frame codecs (see the doc).
The following command (from Ilogan's answer) does not have this drawback. It works both for one or multiple inputs.
ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 \
-filter_complex \
"[0:v]trim=3.48:5.72,setpts=PTS-STARTPTS[v0]; \
[0:v]trim=6.56:8.68,setpts=PTS-STARTPTS[v0b]; \
[1:v]trim=13.52:15.36,setpts=PTS-STARTPTS[v1]; \
[1:v]trim=17.56:23.32,setpts=PTS-STARTPTS[v1b]; \
[2:v]trim=20.6:23.96,setpts=PTS-STARTPTS[v2]; \
[v0][v0b][v1][v1b][v2]concat=n=5:v=1:a=0[v]" \
-map "[v]" -an -crf 17 output.mp4
You can use the concat demuxer.
#1 Create a text file
file video.mp4
inpoint 34.5
outpoint 55.1
file video.mp4
inpoint 111.0
outpoint 155.3
file video.mp4
inpoint 278
outpoint 316.4
The inpoint/outpoint directives specify the trim in and out points in seconds for the file listed above them.
#2a Create the joint file
ffmpeg -f concat -i list.txt combined.mp4
#2b Do the overlay together
ffmpeg -f concat -i list.txt -i background.mp4 -filter_complex "[0:v]scale=400:400[v1];[1:v][v1]overlay=0:0:shortest=1" -shortest -preset superfast "output.mp4"
External Audio stream with concat
ffmpeg -i 12m.mp4 -f concat -i list.txt -vf setpts=(PTS-STARTPTS)/1.1 -af atempo=1.1 -map 1:v -map 0:a -shortest new.mp4