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.movHow 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.movHow 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.movThis 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.