Tuesday, 25 December 2018

ffmpeg: isolate one audio channel


How can I use ffmpeg to isolate one channel from an audio file? I have a stereo audio file, and I need the output to be the contents of the right channel in a mono audio file.


While I'm sure it's fairly easy to do, I can't figure it out. Thanks for the help!



Answer



You have two methods:



The pan audio filter is powerful but the syntax takes some time to understand.


It is helpful to refer to the channel layouts list when using pan: ffmpeg -layouts


Stereo right channel to mono:


ffmpeg -i stereo.wav -af pan=mono|FC=FR right_mono.wav

...which is the same as:


ffmpeg -i stereo.wav -af pan=1|c0=c1 right_mono.wav


  • mono is output channel layout or number of channels. Alternatively you could use 1 instead of mono.

  • FC=FR create the Front Center channel of the output from the Front Right of the input.

  • c0=c1 is the same as the above in this case: create the first (and only) channel of the mono output (c0) from the second channel (c1) of the input.

  • If you want the left channel instead use FC=FL or c0=c0.


See the pan audio filter documentation for more info.





You can use the -map_channel option. It uses pan in the background and is somewhat less flexible.


ffmpeg -i stereo.wav -map_channel 0.0.1 right_mono.wav


  • The first 0 is the input file id

  • The next 0 is the stream specifier

  • The 1 is the channel id


So this can be translated as: first file, first stream, second channel (or right channel).


From the -map_channel documentation:



The order of the -map_channel option specifies the order of the channels in the output stream. The output channel layout is guessed from the number of channels mapped (mono if one -map_channel, stereo if two, etc.



No comments:

Post a Comment

Where does Skype save my contact's avatars in Linux?

I'm using Skype on Linux. Where can I find images cached by skype of my contact's avatars? Answer I wanted to get those Skype avat...