FFmpeg - Audio Channel Layout

From PiRho Knowledgebase
Jump to navigationJump to search


References:

Summary

This article explains how FFmpeg understands, manipulates, converts, and remaps audio channels (e.g., Stereo, 5.1, 7.1). It covers layouts, downmixing, upmixing, channel mapping, and how to explicitly control audio routing using FFmpeg filters such as pan, channelmap, and aresample.

Why Channel Layout Matters

Modern multimedia workflows often involve a mixture of devices and formats:

  • Surround sound sources (5.1 / 7.1)
  • Stereo-only playback systems
  • Mobile devices with mono speakers
  • Incorrectly labelled or inconsistently ordered tracks
  • Broadcast, film, and online workflows requiring predictable channel order

A correct channel layout ensures voices remain centred, surround effects are preserved, LFE is handled appropriately, and no channels are lost or duplicated.

Understanding FFmpeg’s Channel Layouts

FFmpeg recognises channel layouts by both name and bitmask.

Common Layout Names

  • mono
  • stereo (FL, FR)
  • 3.0 (L, R, C)
  • 4.0 (L, R, SL, SR)
  • 5.0 (L, R, C, SL, SR)
  • 5.1 (L, R, C, LFE, SL, SR)
  • 7.1 (L, R, C, LFE, SL, SR, BL, BR)

Inspecting an Input File

ffmpeg -i input.mkv

Downmixing Surround to Stereo

Default Downmix

ffmpeg -i input.mkv -ac 2 output.mp4

Custom Downmix Matrix

ffmpeg -i input-5.1.wav -filter_complex "pan=stereo|FL = 0.90*FL + 0.32*FC + 0.22*SL + 0.22*BL|FR = 0.90*FR + 0.32*FC + 0.22*SR + 0.22*BR" output.wav

Upmixing Stereo to Surround

Basic Upmix

ffmpeg -i stereo.wav -af "channelmap=channel_layout=5.1" output.wav

Enhanced Upmix

ffmpeg -i stereo.wav -filter_complex "pan=5.1|FL=FL|FR=FR|C=0.5*FL+0.5*FR|SL=FL|SR=FR|LFE=0" output.wav

Reordering Channels (channelmap)

ffmpeg -i wrong-order.wav -filter_complex "channelmap=map=0|1|4|5|2|3:channel_layout=5.1" fixed.wav

Extracting Individual Channels

ffmpeg -i input.wav -map_channel 0.0.0 FL.wav
ffmpeg -i input.wav -map_channel 0.0.1 FR.wav
ffmpeg -i input.wav -map_channel 0.0.2 FC.wav
ffmpeg -i input.wav -map_channel 0.0.3 LFE.wav

Creating Silent Placeholder Channels

ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 silence.wav

Common Pitfalls

Invalid Layouts

Occurs when channel count mismatches layout.

LFE Issues

LFE may be discarded or reduced in downmixes.

Wrong Surround Ordering

Rear vs side channels may be swapped.

Design & Architecture Considerations

  • Always explicitly declare layouts.
  • Avoid relying on defaults.
  • Document downmix matrices.
  • Test with both headphones and speakers.

Troubleshooting Checklist

ffprobe -show_streams input.wav

Related Topics

  • FFmpeg – Resampling & Formats
  • FFmpeg – Filter Graph Basics
  • Audio Fundamentals – Channel Concepts