pattulus
5/25/2016 - 12:06 PM

A bash script that creates ??? audiobooks for iTunes from TbT MP3 using ffmpeg, mp3info and mp4v2.

A bash script that creates ??? audiobooks for iTunes from TbT MP3 using ffmpeg, mp3info and mp4v2.

#!/usr/bin/bash

# Check parameters and set variables
if [[ $# -eq 3 ]]; then
  NAME="$1 - Die drei Fragezeichen - $2"
  TITLE="$1 - $2"
  YEAR=$3
  FILENAME="$NAME.m4a"
  CHAPNAME="$NAME.chapters.txt"
  DISC=1
  DISCS=1
elif [[ $# -eq 6 ]]; then
  NAME="$1 - Die drei Fragezeichen - $2"
  TITLE="$1 - $2 - $6"
  YEAR=$3
  FILENAME="$NAME - $6.m4a"
  CHAPNAME="$NAME - $6.chapters.txt"
  DISC=$4
  DISCS=$5
else
  echo "Wrong number of arguments"
  exit
fi

# Check if folder contains subdirs for multiple cds
if [ `find . -type d -not -path . | wc -l` -ne 0 ]; then
  TMPDISC=1
  TMPDISCS=$(find . -type d -not -path . | wc -l)
  # Traverse each directory and convert every single CD
  for i in *; do
    cd "$i"
    ddf.sh "$1" "$2" "$3" $TMPDISC $TMPDISCS "$i"
    cd ..
    TMPDISC=$(expr $TMPDISC + 1)
  done
else
  # Convert and concat mp3s to m4a file
  BITRATE=$(mp3info -x *.mp3 | grep "Audio:" | awk '{ print $2 }' | head -n 1)
  if [ "$BITRATE" == "Variable" ]; then
    # VBR MP3s
    cat *.mp3 > tmp.mp3
    mp3val -f -nb tmp.mp3
    ffmpeg -i tmp.mp3 -c aac -q 3 -map 0:0 "$FILENAME"
    rm tmp.mp3
  else
    # CBR MP3s
    cat *.mp3 | ffmpeg -i - -c aac -b:a "$BITRATE"k -map 0:0 "$FILENAME"
  fi

  # Extract chapters if chapter file doesn't exists
  if [[ ! -f $CHAPNAME ]]; then
    TIME=0
    TMPFILE=$(mktemp)
    for i in *.mp3; do

      HOUR=$(( $TIME / 3600 ))
      MIN=$(( ( $TIME / 60 ) % 60 ))
      SEC=$(( $TIME % 60 ))
      CTITLE=$(mp3info -p %t "$i")

      printf "%02d:%02d:%02d.000 %s\n" $HOUR $MIN $SEC "$CTITLE" >> "$TMPFILE"

      TIME=$(expr $TIME + $(mp3info -p %S "$i"))
    done

    # Fix encoding for chapter file
    iconv -f cp1258 -t utf-8 "$TMPFILE" > "$CHAPNAME"
  fi

  # Write chapters to files
  mp4chaps -r "$FILENAME"
  mp4chaps -z -i "$FILENAME"

  # Write Tags
  mp4tags -r AabcCdDeEgGHiIjlLmMnNoOpPBRsStTxXwyzZ "$FILENAME"
  mp4tags -d $DISC -D $DISCS -t 1 -T 1 -y $YEAR -i audiobook -a "Die drei Fragezeichen" -A "$NAME" -s "$TITLE" "$FILENAME"

  # Write Cover
  mp4art --remove "$FILENAME"
  mp4art --add cover.jpg "$FILENAME"
fi