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