Podcasts sind eine tolle Sache und ich höre sie wahnsinnig gerne beim Autofahren. Um die Zeit noch effektiver zu nutzen, möchte ich manche Audiodateien bei erhöhter Geschwindigkeit hören. Das unterstüzten mittlerweile viele Podcast-Spieler auf dem Handy von Hause aus – nur leider nicht das Entertainment-System von meinem Auto. Und genau deshalb habe ich einen Weg gesucht, um die Podcast-Dateien schnell und komfortabel unter Linux im Batchmodus umzuwandeln, so dass sie mit einer höheren Geschwindigkeit vom USB-Stick abgespielt werden.
Dazu benötigt man unter Ubuntu nur ein Paket: ffmpeg. Wenn man eine etwas bessere Qualität haben möchte, kann man alternativ eine Kombination aus verschiedenen Programmen einsetzen. Dazu benötigt man dann die Pakete: sox, libsox-fmt-mp3, python-mutagen sowie das Programm mid3cp. Letzteres bekommt man unter ubuntu, wenn man diese Datei in github in /usr/bin schiebt und ausführbar macht.
Wenn man diese Voraussetzungen geschaffen hat, kann man mit folgendem Skript sehr komfortabel alle Audio-Dateien in einem Verzeichnis komplett umwandeln.
#!/usr/bin/env bash
#
# Simple shell script to speed up audio files to 1.5 playing speed
# with ffmpeg
#
#==========================================================
#
#contains username separated by newline
INPUTDIR="/mnt/markus/Downloads/Sorted/Mp3Z/Podcasts/export/dk"
#Directory to link training files to
OUTPUTDIR=/mnt/output/dk
USE_FFMPEG=true
# ffmpeg binary
FFMPEG_COMMAND=/usr/bin/ffmpeg
SOX_COMMAND=/usr/bin/sox
MID3CP_COMMAND=/usr/bin/mid3cp
echo `date` Begin Audio Conversion
find "${INPUTDIR}" -type f -regextype posix-egrep -regex '.*\.(mp3|m4a|ogg)$' -print0 | sort -z | while read -d $'\0' AUDIO
do
echo `date` Converting File $AUDIO
filename=$(basename -- "$AUDIO")
extension="${filename##*.}"
filename="${filename%.*}_speed"
if [ ! -d "$OUTPUTDIR/$dir/" ]; then
mkdir -p "$OUTPUTDIR/$dir/"
fi
if [ -f "$OUTPUTDIR/$dir$filename.$extension" ]; then
echo `date` Skipping.. "$OUTPUTDIR/$dir$filename.$extension" exists already
else
if [[ "${extension,,}" != "mp3" ]] || [ "$USE_FFMPEG" == "true" ] ; then
echo `date` Generating "$OUTPUTDIR/$dir$filename.$extension" with ffmpeg
</dev/null $FFMPEG_COMMAND -i "$AUDIO" -v quiet -loglevel panic -filter:a "atempo=1.5" -vn "$OUTPUTDIR/$dir$filename.$extension"
else
echo `date` Generating "$OUTPUTDIR/$dir$filename.$extension" with sox
# variant with sox to change speed and pitch
#$SOX_COMMAND "$AUDIO" "$OUTPUTDIR/$dir$filename.$extension" speed 1.5 pitch -700
# variant with sox to change tempo
$SOX_COMMAND "$AUDIO" "$OUTPUTDIR/$dir$filename.$extension" tempo 1.5
echo Copying ID3 Tag from original file
$MID3CP_COMMAND "$AUDIO" "$OUTPUTDIR/$dir$filename.$extension"
fi
fi
done