Month: March 2017

  • convert mp3 to m4b on the linux command line

    I quite often want to convert mp3 files to m4b, Apple’s proprietary nastiness. There is pacpl of course but that has issues these days, particularly with copying the id3 tags to the new file.
    FFmpeg can do it when you build from source (I just found a nice script that will build it from source for you). So I came up with this way to do it from the command line. It uses an awesome feature of xargs which will run it in parallel, so one for each core.

    find -type f -name \*.mp3 \
    | xargs -n 1 -P $(getconf _NPROCESSORS_ONLN || echo 1) -i \
      bash -c \
     'i="{}"; ffmpeg -y -i "$i" -map_metadata 0 \
            -c copy -c:a libfdk_aac -b:a 128k\
            -map_metadata:s:a 0:s:a -f ipod "${i%.*}.m4b"'

    What that does is:

    1. find all the mp3 files and pipe their names into xargs
    2. then get the number of cores available and pass that to the -P argument
    3. and run ffmpeg and map all the metadata to the new file
    4. and strip off the mp3 file extension and add m4b to it

    There! Nothing to it!
    Update 2017-03-23: Added double quotes around the bash variable $i to cope with spaces. You should always do this (and so should I)
    Update 2018-12-20: Added “-c copy” so ffmpeg can cope with album art in the file

  • Build and install emacssnapshot packages on Debian Stable

    the emacs logoDespite emacssnapshot only providing prebuilt packages for Debian unstable, building and installing the packages on stable is quite straight forward.
    I wrote a script to automate it. I’m sure there are better ways to do this, but it works for me. Thanks to twb for feedback on the script. Sorry I was too lazy to implement all of your suggestions twb.