Concatenate Different Video Formats with FFmpeg

This article provides a step-by-step guide on how to seamlessly join multiple video files of different formats (such as MP4, MKV, and MOV) into a single file using FFmpeg on Linux. Because FFmpeg’s native concatenation tool requires videos to share identical codecs and parameters, merging diverse formats requires transcoding them to a unified standard first. Below, you will find the exact commands needed to normalize your video properties and merge them efficiently without losing quality.

Step 1: Standardize the Video Formats

Before merging, every video must share the same resolution, frame rate, video codec, and audio codec. If you try to join them directly, the resulting file will likely corrupt or lose audio. The most reliable method is to re-encode each video into a standardized format (like H.264 video and AAC audio) at a consistent resolution.

Run the following command for each of your input files, replacing input1.mkv with your source file and part1.mp4 with your standardized output name:

ffmpeg -i input1.mkv -c:v libx264 -crf 23 -preset medium -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" -c:a aac -b:a 192k part1.mp4

Repeat this process for your other files (e.g., input2.mov), outputting them as part2.mp4, part3.mp4, and so on.

Step 2: Create a Text Registry File

Once all your video segments are standardized into identical formats, you need to list them in a text file so FFmpeg knows the order in which to join them.

Create a file named inputs.txt in the same directory as your standardized videos and open it in a text editor. List your files using the following format:

file 'part1.mp4'
file 'part2.mp4'
file 'part3.mp4'

Step 3: Concatenate the Standardized Videos

Now that the videos have identical properties and are listed in order, you can use FFmpeg’s concat demuxer. Because the files are already perfectly matched, FFmpeg can join them instantly without re-encoding them a second time.

Run the following command in your terminal:

ffmpeg -f concat -safe 0 -i inputs.txt -c copy final_output.mp4