I really, really hate AAC. Don’t ask me why … it’s an unreasonable hatred. But, who cares. Last night I downloaded a trailer from Apple’s website (they have them in HD, how cool is that … my computer couldn’t handle the 1080p one, heh), and of course the audio was in AAC. I hate that.
I wanted to get just the audio from the file, decode it using faad, then re-encode it to AC3. Normally in a situation like this, you would just use mencoder to re-encode the audio portion and create a new AVI. But, I always have problems with that when I just want to copy the video portion (mencoder -ovc copy -oac whatever … ), so instead I just dump the audio, reencode it, then mux it all back in one file.
More specifically, this is what I do:
1. Start with a file where I want to keep the video the same (copy it, no encoding), but only re-encode the audio to another codec.
2. Extract the audio to a WAV file using mplayer
mplayer cool_movie_trailer.mov -vo null -vc null -ao pcm:fast:file=cool_movie_trailer.wav
3. Reencode the WAV to the codec of my choice. In this case, AC3 (emerge media-sound/aften).
aften cool_movie_trailer.wav cool_movie_trailer.ac3
4. Mux the original video into a Matroska file, ignoring the audio track, and inserting the AC3 track instead
mkvmerge -o cool_movie_trailer.mkv -A cool_movie_trailer.mov cool_movie.trailer.ac3
The -A flag tells mkvmerge to ignore any audio tracks from the .mov file, thus the .ac3 file becomes the first (and only) audio track. Without that flag, I could have had both audio tracks on there, but I don’t really want that either.
That’s pretty much it. I wrote a little bash script to do the whole thing for me:
#!/bin/bash
I=${1}
EXT=${1/*./}
BASE=`basename ${1} .${EXT}`WAV=${BASE}.wav
AC3=${BASE}.ac3
MKV=${BASE}.mkvmplayer ${1} -vo null -vc null -quiet -ao pcm:fast:file=${WAV}
aften ${WAV} ${AC3}
mkvmerge -o ${MKV} -A ${1} ${AC3}
rm ${AC3} ${WAV}
Just save it as some_script.sh and the first (and only) argument is the movie you want to convert. So foobar.sh cool_movie_trailer.mov, and it’ll spit out the .mkv file and delete all the temp files.
No more AAC. I’m happy. 🙂