The error "Input link parameters do not match the corresponding output link parameters" occurs when ffmpeg attempts to merge video streams with incompatible properties, such as differing resolutions, frame rates, pixel formats, or audio sample rates. This mismatch prevents the filter graph from processing the data because the concatenation filter requires all input segments to have identical encoding characteristics before they can be joined into a single output file.
Understanding Parameter Mismatch Causes
When you use the
-f concat demuxer or the
concat filter, ffmpeg expects every input file to share the exact same stream parameters. If one video is 1920x1080 at 30fps and another is 1280x720 at 60fps, the filter cannot align them in the timeline without explicit conversion. Similarly, audio streams must match in sample rate (e.g., 44100Hz vs 48000Hz) and channel layout (stereo vs mono).
This issue is distinct from other timestamping problems. For more information on handling time-based discrepancies that might accompany these errors, see our guide on
Fixing the 'ffmpeg -itsoffset is not working' Issue. While
-itsoffset handles timing shifts, it does not resolve structural format mismatches between streams.
Step-by-Step Resolution Using Pre-Processing
The most reliable solution is to normalize all input files to a common standard before concatenating them. You should create a master set of converted files where resolution, frame rate, and audio settings are uniform.
First, identify your target specifications. A common baseline for web video is 1920x1080 resolution, 30 frames per second, and 48000Hz stereo audio. Use the following command to convert a single source file to this standard:
ffmpeg -i input.mp4 -c:v libx264 -pix_fmt yuv420p -s 1920x1080 -r 30 -c:a aac -ar 48000 -ac 2 normalized.mp4
Key flags explained:
-c:v libx264: Ensures consistent video codec.
-pix_fmt yuv420p: Standard pixel format for broad compatibility.
-s 1920x1080: Forces resolution scaling.
-r 30: Sets the frame rate.
-c:a aac -ar 48000 -ac 2: Normalizes audio codec, sample rate, and channels.
Repeat this process for all input files. Once all files are normalized, you can safely concatenate them.
Concatenating the Normalized Files
After creating your normalized files, list them in a text file named
files.txt using the following format:
file 'normalized1.mp4'
file 'normalized2.mp4'
file 'normalized3.mp4'
Then, run the concat demuxer command:
ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4
Using
-c copy is crucial here because the files are already encoded in the desired format. Copying avoids re-encoding, which saves significant time and preserves quality. If you encounter issues with the duration of the output being longer than expected due to padding or metadata, refer to
FFMPEG Concat Demuxer adds more time to output than expected for troubleshooting tips related to container-level artifacts.
Alternative: On-the-Fly Filtering
If you cannot pre-process files, you can force normalization within the filter graph itself. This method is computationally expensive but works for dynamic inputs. The command structure involves applying scale and aresample filters before the concat filter.
ffmpeg -i input1.mp4 -i input2.mp4 \
-filter_complex "[0:v]scale=1920:1080,setpts=PTS-STARTPTS[v0]; [0:a]aresample=48000[a0]; [1:v]scale=1920:1080,setpts=PTS-STARTPTS[v1]; [1:a]aresample=48000[a1]; [v0][a0][v1][a1]concat=n=2:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mp4
Note that this approach requires careful mapping of outputs to avoid the original parameter mismatch error. Each stream must be explicitly mapped to the final output.
Common Pitfalls to Avoid
Do not mix different codecs like H.264 and HEVC in the same concat operation without transcoding them to a common format. Also, ensure that the pixel format matches; if one file uses
yuv420p and another uses
yuv422p, the concat will fail. Always verify your input files using
ffprobe before attempting concatenation. Check for any hidden streams or varying metadata that might cause silent failures.
For users dealing with specific audio insertion tasks rather than full concatenation, consider reviewing
Adding 3-Second Sound at Specific Time in Video Using FFmpeg to understand how audio streams interact with video filters.
Frequently Asked Questions
Why does my output file have black frames?
Black frames often appear when concatenating videos with different durations if the filter pads shorter clips. Ensure all normalized inputs have similar lengths or trim them beforehand. Using
-shortest in the concat filter options can help mitigate this by stopping at the end of the shortest stream.
Can I use the concat filter with different resolutions?
No, the concat filter requires identical stream parameters. You must scale the videos to the same resolution using the
scale filter before passing them to the concat filter. Attempting to bypass this will result in the parameter mismatch error.
What if my audio sample rates are slightly different?
Even small differences, such as 44100Hz vs 48000Hz, will cause a mismatch. Use the
aresample filter to resample all audio tracks to a single standard rate, typically 48000Hz, before concatenation.
Is it faster to pre-process or use on-the-fly filtering?
Pre-processing is significantly faster because it separates the normalization step from the concatenation step. On-the-fly filtering forces ffmpeg to decode, scale, resample, and encode everything in a single pass, increasing CPU load and processing time.
How do I check if my files are compatible?
Use
ffprobe on each file to inspect the video and audio stream details. Compare the width, height, frame rate, pixel format, sample rate, and codec names. They must be identical for successful concatenation.