Merge two audio channels (stereo) into one (mono) on GSM6.10 using FFMPEG

Solution 1:

The way to "mixdown" from stereo to mono in any supported file in ffmpeg is like so:

ffmpeg -i file.ext -ac 1 file_mono.ext

The "-ac 1" bit instructs ffmpeg to output just 1 audio channel, i.e. mono. By default, this operation will preserve your file format but will revert your bitrate to the ffmpeg default of 64kbs. If you want a higher bitrate, you can do:

ffmpeg -i file.ext -ac 1 -ab 192k file_mono.ext

...replacing 192k with your preferred bitrate.

Note that your install of ffmpeg must support your particular GSM codec in order for this to work properly. I know some GSM encoded audio is supported in ffmpeg through libgsm but I have never dealt with GSM files myself. I have successfuly converted other types of files (MP3) to mono without a hitch, however.

Solution 2:

The above answer works in the case that you still want to convert between formats, but for long files that can take a long time. Or maybe you don't want to convert yet again, degrading quality, and so you might just want to stream copy. Using -codec:a and -ac 1 at the same time doesn't work, but according to the ffmpeg pan filter documentation, if certain conditions are met (like you aren't adjusting the levels of channels or mixing two channels into one), it will recognize this case and report: "Pure channel mapping detected", and do a stream copy, which is much faster.

For example: To make a stereo file mono by just using the left channel, and just copying the video stream, do this:

ffmpeg -i infile.ext -codec:v copy -af pan="mono: c0=FL" outfile.ext

Solution 3:

To preserve video, I used a combination of two answers above:

ffmpeg -i infile -codec:v copy -ac 1 -ab 192k outfile

That produced a sufficient solution for me.