blogheader
Zakelijke zaken
Zakelijk & ICT
 

MP3 - eenvoudig toch?

Sinds kort rij ik een nieuwe auto: een Citroen C4 Grand Picasso. Het ding staat bol van de snufjes waaronder een hippe mediaplayer met touchscreen, USB, iPhone en Bluetooth integratie en natuurlijk een CD-speler. Genoeg bronnen dus om je muziek ten gehore te brengen. Het gave is dat deze mediaspeler ook 8GB opslag in de auto heeft: een media jukebox. Je kunt dus mooi vanaf je USB sticky zaken in de auto opslaan zodat je altijd je spullen bij je hebt. En het handige is dat de mediaspeler per bron (USB, jukebox, radio) een aantal instellingen onthoudt zoals het volume en de plaats waar hij de vorige keer opgehouden is. Nu geldt dat laatste natuurlijk niet voor de radio & Bluetooth maar het is wel ontzettend handig als je teruggaat naar de jukebox dat ie verder gaat waar hij gebleven is.

Nu had ik een aantal bestanden in MP3 formaat die de auto niet wilde afspelen. Ik zocht me suf en probeerde van alles op mijn (o zo fijne) Ubuntu 14.04 server:

  • eerst omzetten naar .wav en dan opnieuw coderen naar .mp3
  • on-the-fly omzetten via LAME encoder
  • VBR versus CBR
  • Mono vs stereo
  • Markering als 'Original' aan en uitzetten
  • LAME encoder rechtstreeks of via AVConv 

Na dus een keer of 4 een hele set bestanden opnieuw omgezet en elke keer naar mijn auto gelopen te zijn vond ik de oplossing: er zijn meerdere formaten MP3:

  • MPEG 1 Layer III (of Layer 3)
  • MPEG 2 Layer III(of Layer 3)

Het blijkt dus dat mijn auto de eerste niet snapt. Dit is een MP3-variant die slechts beperkte sample-rates toestaat. Normaliter is dat 44.1kHz. Niet te verwarren met de bitrate die iets zegt over de kwaliteit als je je CD-bestand bijvoorbeeld hebt omgezet naar MP3. Uiteindelijk heb ik het met onderstaande bash-script werkend gekregen. Eenvoudig te starten vanaf de terminal met als parameters een reeks MP3-bestanden. De resultaten komen in een aparte subfolder, wel zo handig.

#!/bin/bash

for f in "$@";
do
  folder=`dirname "$f"`
  mkdir -p ${folder}/mp3-stereo
  filename=${folder}/mp3-stereo/"${f%%.*}"
  echo Processing file $f == $filename
  # -acoded = set the codec to libmp3lame
  # -ab = set constant bitrate 256k
  # -ac = set 2 channels joint stereo
  # -ar 44100 = set the sample rate to 44.1kHz
  avconv -i "$f" -acodec libmp3lame -ab 160k -ac 2 -ar 44100 "$filename.mp3"
done