Shell-Skript zum Downsampeln von Podcasts

Zuletzt verändert am 24. Juli 2026 • 2 Min. Lesezeit • 243 Wörter
Ich habe einen ganz einfachen MP3-Player mit nur 128 MB Speicher.

Ich habe einen sehr einfachen MP3-Player mit nur 128 MB Speicher. Ich höre hauptsächlich Podcasts, die von Amarok automatisch in den Ordner ~/.kde/share/apps/amarok/podcasts/data heruntergeladen werden. Um möglichst viele davon auf dem begrenzten Speicherplatz unterzubringen und von überall darauf zugreifen zu können, habe ich ein Skript geschrieben, das die Dateien beim Eintreffen automatisch downsampelt und auf meinem Webserver bereitstellt. Das Skript wird stündlich über die crontab ausgeführt. Die entsprechenden Dateien sehen wie folgt aus:

server:/etc/cron.hourly> more podcast_convert.sh
#!/bin/bash
/home/marzena/bin/podcast_convert.sh /home/marzena/.kde/share/apps/amarok/podcasts/data/*.mp3
server:~/bin> more podcast_convert.sh
#!/bin/bash
if [ $1 = "/home/marzena/.kde/share/apps/amarok/podcasts/data/*.mp3" ]
then
echo "$1: No files to process!"
exit 1
else
while [ $# -ge 1 ]; do
infn=$1
echo "Infile = "$infn
strippedinfn=`basename $1`
strippedinfn=${strippedinfn//:/}
echo "Stripped Infile = "$strippedinfn
outfn="/srv/www/htdocs/vhosts/jeltsch.org/podcasts/${strippedinfn%%.mp3}_LQ.mp3"
echo "Outfile = "$outfn
if test ! -f $outfn
then
echo "Downsampling $outfn."
lame --mp3input -V 3 --strictly-enforce-ISO --resample 12 $infn $outfn
else
echo "The file $outfn has been already downsampled. Skipping…"
fi
# rm $infn
shift 1
done
fi

Eine moderne Version würde so etwa aussehen:

#!/bin/bash

if [ "$1" = "/home/marzena/.kde/share/apps/amarok/podcasts/data/*.mp3" ]; then
    echo "$1: No files to process!"
    exit 1
else
    while [ $# -ge 1 ]; do
        infn="$1"
        echo "Infile = $infn"

        strippedinfn=$(basename "$1")
        strippedinfn=${strippedinfn//:/}

        echo "Stripped Infile = $strippedinfn"

        outfn="/srv/www/htdocs/vhosts/jeltsch.org/podcasts/${strippedinfn%%.mp3}_LQ.mp3"
        echo "Outfile = $outfn"

        if [ ! -f "$outfn" ]; then
            echo "Downsampling $outfn."
            lame --mp3input -V 3 --strictly-enforce-ISO --resample 12 "$infn" "$outfn"
        else
            echo "The file $outfn has been already downsampled. Skipping…"
        fi

        # rm "$infn"
        shift
    done
fi