FFmpeg: Create MOV with Multiple Mono Audio Tracks

This article provides a straightforward guide on how to use FFmpeg to package a video into a QuickTime MOV container with multiple discrete, single-channel (mono) audio tracks. This configuration is a standard requirement for professional broadcast delivery, multi-language distribution, and post-production workflows where dialogue, music, and effects must be kept on separate streams.

To create multiple discrete audio tracks in a MOV container, you must map each audio source as a separate stream using the -map option in FFmpeg. By default, FFmpeg will preserve the channel layout of the input. If your source files are already mono, mapping them individually will automatically create separate mono tracks.

Scenario 1: Combining separate mono audio files into one MOV

If you have a video file and multiple separate mono WAV files (for example, Track 1 for Dialogue and Track 2 for Effects), you can merge them using the following command:

ffmpeg -i input_video.mp4 -i dialogue_mono.wav -i effects_mono.wav \
-map 0:v \
-map 1:a \
-map 2:a \
-c:v copy \
-c:a pcm_s16le \
output.mov

How it works: * -map 0:v selects the video stream from the first input (input_video.mp4). * -map 1:a takes the audio from the second input (dialogue_mono.wav) and writes it as the first audio track. * -map 2:a takes the audio from the third input (effects_mono.wav) and writes it as the second audio track. * -c:v copy copies the video stream without re-encoding to save time and preserve quality. * -c:a pcm_s16le encodes the audio streams to uncompressed 16-bit PCM, which is standard for MOV containers in professional environments.

Scenario 2: Splitting a stereo track into two discrete mono tracks

If you have an input video that contains a single stereo audio track (Left and Right channels), and you want to split those channels into two separate, discrete mono tracks inside a MOV container, use the channelsplit audio filter:

ffmpeg -i input_stereo.mp4 \
-filter_complex "[0:a]channelsplit=channel_layout=stereo[left][right]" \
-map 0:v \
-map "[left]" \
-map "[right]" \
-c:v copy \
-c:a pcm_s16le \
output.mov

How it works: * -filter_complex "[0:a]channelsplit=channel_layout=stereo[left][right]" splits the stereo track of the first input into two independent mono streams, labeled [left] and [right]. * -map "[left]" maps the left channel to the first discrete audio track. * -map "[right]" maps the right channel to the second discrete audio track.

Scenario 3: Splitting a 5.1 surround sound track into six mono tracks

For multi-channel audio like 5.1 surround sound, you can split all six channels into six individual mono tracks using a similar approach:

ffmpeg -i input_51.mp4 \
-filter_complex "[0:a]channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR]" \
-map 0:v \
-map "[FL]" -map "[FR]" -map "[FC]" -map "[LFE]" -map "[BL]" -map "[BR]" \
-c:v copy \
-c:a pcm_s16le \
output.mov

This command splits the 5.1 input stream into Front Left (FL), Front Right (FR), Front Center (FC), Low-Frequency Effects (LFE), Back Left (BL), and Back Right (BR), mapping each to its own unique mono track in the output file.