Configure Audio Stream Count in FFmpeg Concat

This article provides a quick guide on how to configure the audio stream count when concatenating media files using FFmpeg's concat filter. You will learn how to use the a parameter to define the number of audio streams per segment, ensuring your output file has the correct audio layout and avoids stream mismatch errors.

When merging multiple video and audio files with FFmpeg's concat filter, you must explicitly define how many video and audio streams each input segment contains. This is controlled by the v (video) and a (audio) parameters within the filter graph.

The concat Filter Syntax

The basic syntax for the concat filter is:

[input_segments] concat=n=number_of_inputs:v=video_streams:a=audio_streams [outputs]

To configure the audio stream count, you modify the a parameter.

1. Merging Files with One Audio Stream (Standard)

If you are concatenating files that each have one video stream and one audio stream, set v=1 and a=1.

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][0:a][1:v][1:a] concat=n=2:v=1:a=1 [outv][outa]" -map "[outv]" -map "[outa]" output.mp4
  • n=2: Specifies two input files.
  • v=1: Specifies one video stream per input.
  • a=1: Specifies one audio stream per input.

2. Merging Files with No Audio (Video Only)

If you want to concatenate video files and exclude all audio streams, set the audio count a=0.

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][1:v] concat=n=2:v=1:a=0 [outv]" -map "[outv]" output.mp4

3. Merging Files with Multiple Audio Streams

If your input files contain multiple audio tracks (for example, a stereo mix and a surround sound mix, or multi-language tracks), you must increase the a parameter to match the exact number of audio streams.

To concatenate two files that each have one video stream and two distinct audio streams, set a=2:

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][0:a:0][0:a:1][1:v][1:a:0][1:a:1] concat=n=2:v=1:a=2 [outv][outa1][outa2]" -map "[outv]" -map "[outa1]" -map "[outa2]" output.mp4
  • a=2: Tells the filter to expect and output two audio streams.
  • [0:a:0][0:a:1]: Represents the first and second audio tracks of the first input file.
  • [outa1][outa2]: Defines the two separate output audio stream labels for mapping.

Critical Requirements

  • Stream Match: All input segments must have the exact same number of streams (defined by v and a). If Input 1 has two audio streams and Input 2 only has one, the filter will fail. You must add a silent audio track to Input 2 or drop the extra track from Input 1 before concatenating.
  • Codec Consistency: The streams being joined must share the same parameters, including audio sample rate, channel layout, and codec.
  • Mapping: Always map the output labels (e.g., -map "[outv]" and -map "[outa]") to ensure FFmpeg writes the filtered streams to the destination file.