Shell-skripti podcastien bittinopeuden pienentämiseen.

Last modified on 24. heinäkuuta 2026 • 2 min read • 230 words
Minulla on hyvin yksinkertainen mp3-soitin, jonka muisti on vain 128 MB.

Minulla on hyvin yksinkertainen mp3-soitin, jonka muisti on vain 128 Mt. Kuuntelen pääasiassa podcasteja, jotka Amarok lataa automaattisesti kansioon ~/.kde/share/apps/amarok/podcasts/data. Jotta saisin mahtumaan mahdollisimman monta niistä rajalliseen muistiin ja jotta ne olisivat käytettävissä mistä tahansa, olen kirjoittanut skriptin, joka pienentää niiden bittiresoluutiota automaattisesti niiden saapuessa ja siirtää ne verkkoon web-palvelimelleni. Skripti suoritetaan tunnin välein crontabin avulla. Asiaankuuluvat tiedostot näyttävät tältä:

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

A modern version would look like this:

#!/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