Getting MP3 CDs to work with my car stereo
A few years back I bought an Opel Astra H from 2008 and it has the CD30 MP3 audio system. Which means that it will play MP3s burned on a CD. So one of the first things I tried was burning a few albums on a CD and play it in my car. There were some problems. Some of the files wouldn't play correctly and some other wouldn't play at all. Most files would play, but showed a garbled mess where the track name should be.
I naturally tried figuring out how I could make all MP3s (and meta data) work... using linux and a few command line tools!
As it turned out, it only supports MP3s encoded with a constant bit rate (CBR) and ID3v1 tags for the meta data. Most MP3s I download are in variable bit rate (VBR) and have ID3v2 tags with propably some album art in it or something.
Fixing the audio
I first tried converting the files to a 192kbps CBR format using avconv:
$ avconv -i filename-in.mp3 -codec:a libmp3lame -b:a 192k -vn filename-out.mp3
This made sure that the audio would always play correctly, but the meta data would still not be shown correctly. I knew I needed to convert it to ID3v1 and strip off all the rest.
Stripping off the rest
I found another tool which can manipulate and strip off id3-tags and other meta data from MP3s: eyeD3. You can delete anything you don't need on your car stereo using the following commands:
$ eyeD3 --remove-comments --remove-lyrics --remove-images filename-out.mp3
$ eyeD3 --to-v1.1 filename-out.mp3
$ eyeD3 --remove-v2 filename-out.mp3
This also fixed the meta data problem.
Speeding it up
When I finally had all of this working, I had it set up so that I could drop some files in a folder, run a script and receive the converted files in another folder. The script only processed the files sequentially. I noticed that only one of my CPU cores was occupied when converting the files, so I knew that this could be sped up by making use of all cores.
I found another cool little tool called GNU Parallel which very simply enabled this for me:
$ find "in" -type f | parallel ./convert-one.sh "{}"
Now it runs about four times faster since I have four logical CPU cores in my PC.
Find the scripts on GitHub
I've put the final scripts on GitHub. Just throw some albums or random MP3 files in the in
directory, run ./convert-all.sh
and, once the script is done, they'll be converted and ready in the out
directory.