How to create multichannel (5.1) AC3 audio (and video) in Linux
December 12, 2007
AC3 is a compressed (lossy) audio format that allows multichannel (from 1 to 6 channels) and is very used in DVDs and video (mpeg2 and mpeg4) files.
Surprisingly, I found creating multichannel ac3 files in Linux much harder that expected. This is basically because most of my searches led to experiences of ffmpeg and no other tools. However, the fact is that encoding more than 2 channels don’t work (at least I wasn’t able) using the ffmpeg version that comes with Ubuntu Gutsy.
For example, this seemingly correct ffmpeg command produced a ac3 file with correct metadata, but totally silent and useless:
ffmpeg -i l.wav -i r.wav -i sl.wav -i sr.wav -i c.wav -ab 192k -ar 48000 -ac 5 -acodec ac3 -y surround.ac3
Luckily there is an alternative to ffmpeg in the open-source/linux arena which is aften. And it is, actually, very flexible and overall better ac3 encoder.
It is still not packaged for Ubuntu, so you’ll need to download and build it from sources
svn co https://aften.svn.sourceforge.net/svnroot/aften aften
Change to the aften director,
create a new directory, e.g. default, and change into it.
Then compile:
cmake .. -DCMAKE_INSTALL_PREFIX:STRING="/usr/local" make sudo make install
To create a multichannel .ac3 you need to create first a multichannel wav.
Of course sox comes very handy:
sox -M L.wav R.wav C.wav SL.wav SR.wav surround.wav
And now the ac3 encoding
aften -b 448 -cmix 0 -smix 0 -dsur 2 -acmod 7 surround.wav surround.ac3
That’s all. Now you’re ready to use the created 5.0 ac3 file.
Since the options are not self explaining here goes a brief explanation of the used options:
- -b 448 — Bitrate in kbps (4 channels: 384 kbps, 5 channels: 448 kbps)
- -smix 2 — Surround mix level ( 0: -3dB, 1: -6dB, 2: 0 )
- -dsur 2 — (2: Dolby surround encoded, 0: not indicated, 1: not Dolby surround encoded)
- -acmod 7 — Audio coding mode, or channel order (7: L,R,C,SL,SR)
Now let’s put some images to the sound.
Embed the created .ac3 audio to a video
It is very easy to do using avidemux, a very nice graphical user interface application designed to do encoding and cutting video tasks. Use the menus to Open and choose the video file. Choose Audio, Main Track choose external AC3 and Save Video
Or, alternatively, you can use a quick command line with mencoder:
mencoder -ovc copy video.avi -audiofile surround.ac3 -oac copy -o newvideo.avi
Now it’s ready to play the video with the 6 audio channels. For example with a (jack enabled) mplayer
mplayer newvideo.avi -ao jack -channels 6
Changes: small update on Des 16
December 16, 2007 at 9:02 pm
[…] 16, 2007 In my last how-to we played a multichannel video with surround audio (coded with ac3) using mplayer and jack. Jack […]
January 5, 2008 at 9:36 pm
[…] Artikel in meinen Blod darüber zu schreiben. Die letzten Informationen über AC3 habe ich einem ausführlicheren Artikel zu aften […]
March 17, 2008 at 2:42 am
Thanks for the information.
March 27, 2009 at 5:09 am
I was just wondering where you got the 5 wav files:
L.wav R.wav C.wav SL.wav SR.wav and what is surround.wav
thanks from Canada
Bob
December 20, 2009 at 1:23 pm
Hi,
just a little side note: This might be wrong. Because: You haven’t added a LFE Channels (5.1 = 6 Channels(5+1)) and the Channel Order should be equal to what Dolby uses. Thus you would come up with:
Left Front, Center, Right Front, Surround Left, Surround Right, LFE
Thus i’m wondering whether you ever tried that yourself in a 5.1 System. However – Apart from that, nice article. Didn’t knew about whats possible with sox and didn’t knew aften, cool tools.
Cheers
February 26, 2011 at 7:45 am
Your webpage is a very good summary of your activities. great!
Wiko looks like very interesting.
April 21, 2013 at 10:10 am
Thanks. you also can use separate mono channels:
aften -b 448 -cmix 0 -smix 0 -dsur 2 -acmod 7 -lfe 1 -ch_fc front_C.wav -ch_fl front_L.wav -ch_fr front_R.wav -ch_lfe sub.wav -ch_sl surround_L.wav -ch_sr surround_R.wav surround.ac3