open
source
software
groep
hcc noord-limburg


scripts
nogmaals internet-radio
web album maken met ImageMagic
ruis verwijderen uit foto’s
dvd2wav en vob2wav
flv2mp3
internet-radio opnemen
publieke web-radio onder Linux
mid2wav & wav2mp3

terug


nogmaals internet-radio

Sinds woensdag 4 februari 2009 heeft de Publieke (?) Omroep iets veranderd aan de instellingen van hun radio via internet. En moest ik dus mijn scripts aanpassen. Het bleek dat ik in alle gevallen
mplayer kon gebruiken. Eerst heb ik het commentaar (##) geschreven, en daarmee het algoritme beschreven. Daarna heb ik stapsgewijs de code bedacht en getest.


#!/bin/bash
## webradio <param>

## declare array with Params
Params=(
L1radio #0
radio1 #1
radio4 #2
radio5 #3
radio6 #4
bbc3 #5
wdr3 #6
wdr5 #7
)

## declare array with URLs
URLs=(
"mms://194.171.15.26/l1radio" #L1radio #0
"http://shoutcast.omroep.nl:8100/listen.pls" #radio1 #1
"http://shoutcast.omroep.nl:8106/listen.pls" #radio4 #2
"-playlist http://www.omroep.nl/live/radio/radio5-bb.asx" #radio5 #3
"mms://livemedia.omroep.nl/radio6-breed"  #radio6 #4
"-playlist http://www.bbc.co.uk/radio3/ram/r3g2.ram" #bbc3 #5
"-ao alsa -playlist http://www.wdr.de/wdrlive/media/wdr3.smil" #wdr3 #6
"-ao alsa -playlist http://www.wdr.de/wdrlive/media/wdr5.smil" #wdr5 #7
)

function ShowUsage()
## fill Show with Params; echo Show; exit 1
{
Show="Usage: webradio "${Params[0]}
typeset -i I=1
while [ $I -lt ${#Params[@]} ]; do
  Show="$Show | "${Params[$I]}
  I=I+1
done
echo "$Show"
exit 1
}

## if paramcount<>1 then ShowUsage
if [ $# -eq 0 ]; then
  ShowUsage
## else check param(1) in array Params
else
  typeset -i NR=0
  typeset -i CmdNR=-1
  while [ $NR -lt ${#Params[@]} ]; do
    if [ "$1" = "${Params[$NR]}" ]; then
    ## if found then CmdNR := index Params( param )
      CmdNR=$NR
    fi
    NR=NR+1
  done
fi

## else ShowUsage
if [ $CmdNR -lt 0 ]; then
  ShowUsage
fi

## CmdLine := URLs( CmdNR )
CmdLine="mplayer "${URLs[$CmdNR]}

## ON := ps x | grep CmdLine | grep -v grep
ON=`ps x | grep "$CmdLine" | grep -v grep`

## if ON then isolate PID; kill PID
ON=`echo "$ON" | cut -c -6`
if [ -n "$ON" ]; then 
  kill $ON
  echo '' > /tmp/playing
  amixer set Front 60% 
## else exec CmdLine
else
  $CmdLine 1>/dev/null 2>&1 &
  if [ $? -eq 0 ]; then
     echo "${Params[$CmdNR]}" > /tmp/playing
  fi
fi

exit $? 

De radio uit zetten gaat door het script nogmaals met dezelfde parameter op te roepen, of middels dit script:
      #!/bin/bash
      ## radioOFF
      PLAY=`cat /tmp/playing`
      if [ -n "$PLAY" ]; then
            webradio "$PLAY"
      fi
      exit 0

Het bestandje /tmp/playing gebruik ik om de zender op de kde-desktop af te beelden. In Autostart staat een Link to Application... met als opdracht: rxvt -tr -cr '#2D6DC1' -fg blue -b 0 -w 0 +sb -e '~/bin/playing' (wel rxvt installeren).

      #!/bin/bash
      ## playing (1)
      while true; do
            ON=`cat /tmp/playing`
            echo $ON
            sleep 10
      done

Een andere manier is om in het script met
kstart een terminal (Eterm) te starten en met watch te kijken wat er in /tmp/playing staat.

      #!/bin/bash
      ## playing (2)
      kstart --skiptaskbar --skippager --alldesktops --windowclass kdesktop --window Kdesktop –onbottom  \
      Eterm --title playing -x -O --buttonbar no --scrollbar no --no-cursor yes --cursor-color '#0E3A8D'  \
      --geometry 15x1+5+20 -e watch -tn 3 cat /tmp/playing 2> /dev/null &
      exit 0

In beide gevallen heb ik via Advanced, Special Window Settings... de terminal vrijwel onzichtbaar gemaakt. De kleuren (#2D6DC1 - #0E3A8D) heb ik gevonden met een colorpicker.

Inmiddels heb ik een uitgebreidere versie gemaakt, die ook kan opnemen. Plus een recorder, die dat op een bepaalde tijd voor een bepaalde duur kan. Zie: web-rec-radio.txt.

naar boven

web album maken met ImageMagic

Het (Duitse) linuxuser heeft de smaak van
ImageMagic blijkbaar te pakken. In de uitgave 01.2009 beschrijft Heike Jurzik hoe een html web album is te maken. Het resulterende script heb ik als volgt aangepast, zodat het wat algemener werkt. De array PICS is eenvoudig uit te breiden. Start gallery.sh in de directory waar de originele plaatjes staan, die overigens niet worden aangetast.


#!/bin/bash 
## gallery.sh creates with ImageMagick a picture gallery as html page
##  uses imagemagick and jhead

PICS=(

JPEG
jpeg
JPG
jpg
GIF
gif
PNG
png
TIFF
tiff
TIF
tif

)

if [ -d small_pics -o -d small_pics/copy_pics ]; then
  if [ "$1" != "-overwrite" ]; then
    echo -n "Overwrite (y/N)? "
    read YESNO
    if [ "$YESNO" = "y" -o "$YESNO" = "Y" ]; then
      rm -Rf small_pics/*
    else
      exit 1
    fi
  fi
fi

echo -n "Copyright: "
read COPYR
if [ -n "$COPYR" ]; then
  COPYR="Copyright $COPYR"
fi
echo -n "Album Title: "
read TIT
echo -n "File names (y/N)? "
read LBL1
if [ "$LBL1" = "y" -o "$LBL1" = "Y" ]; then
  LBL="%t"
fi
echo -n "400x400 | 800x800 | 1200x1200 | 1600x1600 (4,8,12,16 default:8)? "
read SIZE
case $SIZE in
  " 4")  SIZE=400x400 ;;
  " 8")  SIZE=800x800 ;;
  "12")  SIZE=1200x1200 ;;
  "16")  SIZE=1600x1600 ;;
  "24")  SIZE=2400x2400 ;;
  *)     SIZE=800x800 ;;
esac

echo -n "Filename.html: "
read FNAME
if [ -z "$FNAME" ]; then
  FNAME="index.html"
fi

echo -n "Bytes (y/N)? "
read LBL2
if [ "$LBL2" = "y" -o "$LBL2" = "Y" ]; then
  if [ -n "$LBL" ]; then
    LBL=$LBL"\n"
  fi
  LBL=$LBL"%b Bytes"
fi

typeset -i NR=0
mkdir -p small_pics/copy_pics
while [ $NR -lt ${#PICS[@]} ]; do
  for i in *.${PICS[$NR]}; do
    if [ -f "$i" ]; then
      PICTURE=`basename "$i" .${PICS[$NR]}`
      if [ -f "small_pics/$PICTURE.jpg" ]; then
        PICTURE="$PICTURE-$NR"
      fi
      nice convert -resize "$SIZE" "$i" "small_pics/$PICTURE.jpg"
    fi
  done
  NR=NR+1
done

cd small_pics
nice jhead -autorot *.jpg
for i in *.jpg; do
  nice convert -font helvetica -pointsize 20 -draw \
    "gravity south fill black text 0,12 '$COPYR' \
    fill white text 1,11 '$COPYR'" \
    "$i" "copy_pics/$i"
done

cd copy_pics
nice montage -label "$LBL" -size 128x *.jpg \
  -title "$TIT" -tile 5x -geometry +5+5 -frame 5 \
  -mattecolor "#3FCA3F" -shadow "$FNAME"
if [ $? -eq 0 ]; then
  echo "Created "$FNAME" in: ./small_pics/copy_pics"
fi

exit $?

Probeer ook eens de POLAROID LOOK:
   convert picture.jpg +polaroid picture.png
   convert picture.jpg -bordercolor white -background black +polaroid picture.png
   montage -size 128x *.jpg -tile 4x -geometry +1+1 -shadow +polaroid index.html
   montage -size 128x *.jpg -tile 4x -geometry +1+1 -shadow -polaroid 0 index.html.
En verder geldt (zoals altijd):
RTFM !
Zo’n web album is overigens ook goed en gemakkelijk te maken met AlbumShaper, waarmee trouwens nog meer mogelijk is.

naar boven

ruis verwijderen uit digitale foto’s

Dankzij de megapixel hype op (te) kleine beeldsensors bij digitale camera’s ontstaat
ruis in de afbeeldingen: in donkere partijen komen kleurverschuivingen voor. Het is natuurlijk het beste beeldruis te vermijden door een lage iso-waarde te kiezen op een minder megapixel-camera met fatsoenlijke zoom (mijn ervaring: 3 megapixels bij iso 100 met een 8x zoom is goed genoeg).
In het (Duitse) tijdschrift
linuxuser 12.2008 staat een artikel over het verwijderen van ruis (noise) uit digitale foto’s. Daarin staat een script dat met ImageMagic ruis verwijdert en dat ik via man en trial&error als volgt heb aangepast:


#!/bin/bash
## denoise
## linuxuser 12|08 p.47

usage() {
   echo "Usage: $0 <image>"
   exit 1
}

image="${1}"

[ -z "$1" ] && usage

typeset -i EXIT=0
if [ ! -d ~/denoise ]; then
   mkdir ~/denoise
   EXIT=EXIT+$?
fi

for param; do
   echo
   echo "$param"
   OUT=~/denoise/`basename "$param"`

   convert -monitor "$param" \
      \( -clone 0 -despeckle \) \
      \( -clone 0 -colorspace gray \
      -black-threshold 40% \
      -white-threshold 40% \
      -negate \
      \) \
      -compose Over -composite "$OUT".png
   EXIT=EXIT+$?

   convert "$OUT".png -quality 95 "$OUT"
   EXIT=EXIT+$?
   rm "$OUT".png
done

exit $EXIT

naar boven

dvd2wav en vob2wav

01-12-2008
door T.Koops

En toen kwam de vraag of ik ook uit een concert-dvd de sound kon extraheren. Op zo’n dvd staan
.vob-bestanden die beeld en geluid bevatten. Op internet heb ik bij Tiny Linux / Unix Commandos een oplossing gevonden met transcode, en daarmee het volgende script gemaakt:


#!/bin/bash
# vob2wav
if [ "$#" = "0" ]; then
  echo "Usage: vob2wav <filename.VOB> <filename.vob> ... "
else
  if [ ! -d ~/vob2wav ]; then
    mkdir ~/vob2wav
  fi
  for param; do
    if [ -f "$param" ]; then
      PARAM=`echo $param | tr "[:upper:]" "[:lower:]"`
      VOB=`basename "$PARAM" | grep -F ".vob"`
      if [ -n "$VOB" ]; then
        WAV=`basename "$PARAM" .vob`
        nice transcode -i $param -o ~/vob2wav/$WAV.wav -y null,wav -x vob -e 48000
      fi
    fi
  done
play ~/bin/wav/chimes.wav
fi

Beter is dvd2wav
Ik heb ook een
oplossing met mplayer gevonden. ‘yeKcim’ heeft daarmee een uitgebreid script dvd2wav geschreven, dat ik ongewijzigd heb kunnen gebruiken (na installatie van zenity).

naar boven

flv2mp3

27-06-2008
door T.Koops

Het downloaden van een video-clipje van bijvoorbeeld YouTube is niet zo’n probleem; dat kan met
youtube.dl of met een Firefox-extensie. Maar om daar de audio uit te extraheren, dat heeft mij heel wat hoofdbrekens opgeleverd. Gelukkig heb ik op internet een basisoplossing gevonden. Daarmee heb ik het volgende scriptje ontworpen, dat ook batch kan verwerken, zoals mijn mid2wav.


#! /bin/bash
## flv2mp3

if [ "$#" = "0" ]; then
  echo "Usage: flv2mp3 <filename.flv> <filename.flv> ... "
else
  if [ ! -d ./mp3 ]; then
    mkdir ./mp3
  fi
  for param; do
    if [ -f "$param" ]; then
      flv=`basename "$param" | grep -F ".flv"`
      if [ -n "$flv" ]; then
        MP3=`basename "$param" .flv`
        nice mplayer -ao pcm -vo audiodump.wav "$param"
        nice lame audiodump.wav --resample 44.1 -s 44.1 -q $N -b $M ./mp3/"$MP3".mp3
        rm audiodump.wav
      fi
    fi
  done
  play $HOME/bin/wav/chimes.wav
fi

naar boven

internet-radio opnemen

18-11-2007
door T.Koops

Toen het mij was gelukt om internet-radio te beluisteren (zie:
publieke web-radio onder Linux) – behalve als ik, zoals bij de hufters van de Stadsomroep Venlo, per se Microsof’s Media Player moet hebben – vroeg ik mij af of ik dat geluid ook kon opnemen. Dat bleek te kunnen, onder andere met mplayer, met Streamripper en met Realplay in combinatie met vsound. Na enig experimenteren heb ik het onderstaande script recwebradio geschreven dat met chmod +x uitvoerbaar gemaakt en in een directory neergezet die in het pad voorkomt. En een link op mijn desktop gezet: de eerste keer klikken start de opname, de tweede keer stopt het opnemen. Het resultaat komt in de directory RecWeb te staan; een .wav-bestand kan ik met wav2mp3 converteren.


#!/bin/bash
## recwebradio - needs $HOME/RecWeb/

ON=`ps -eo command | sort -u | grep streamripper | grep -v grep`
if [ -n "$ON" ]; then
    killall streamripper
else
    ON=`ps -eo command | sort -u | grep vsound | grep -v grep`
    if [ -n "$ON" ]; then
        killall vsound
fi

if [ -z "$ON" ]; then

    PLAYER=`ps -eo command | sort -u | grep :// | grep -v grep`
    if [ -n "$PLAYER" ]; then
        URL=`echo "$PLAYER" | cut -c 8-`
        PLAYER=`echo "$PLAYER" | cut -c -8`
        if [ "$PLAYER" = "mplayer " ]; then
            streamripper "$URL" -d $HOME/RecWeb-a %d -s -i &
        fi
        if [ "$PLAYER" = "realplay" ]; then
            DATE=`date +%y%m%d-%H:%M`
            vsound -a 3 -t -f $HOME/RecWeb/"$DATE".wav realplay -q "$URL" &
        fi
    fi

fi

Overigens, om iedere avond Met het Oog op Morgen op te nemen heb ik in KCron bij Program: de regel
        streamripper http://cgi.omroep.nl/cgi-bin/shoutcastlive.pls?radio1live -d$HOME/RecWeb -a %d -s -i -l 3600
opgegeven, bij Comment: OogOpMorgen, met Enabled, Run every day, Hours PM 23, Minutes 0, en met OK opgeslagen.

UPDATE Sinds 4 februari 2009 heeft de Nederlandse publieke (?) omroep haar radiouitzendingen via internet veranderd. Met behulp van View Page Source en View Page Info, tab Media, van Firefox is het mij gelukt de boel weer aan de praat te krijgen.
Om het Oog op morgen met cron op te kunnen nemen gebruik ik nu:
        mplayer -quiet -ao pcm -vo audiodump.wav -endpos 01:01:00 http://shoutcast.omroep.nl:8100/listen.pls 1>/dev/null 2>&1
        mv audiodump.wav `date +%Y_%m_%d-%a_%H:%M`_oog.wav

naar boven

publieke web-radio onder Linux

16-11-2007
door T.Koops

Internet-radio’s verwachten te vaak dat ik beschik over Microsof’s Media Player. Maar soms kan mijn browser – Firefox, Konqueror of Opera – de player toch weergeven. Als dat het geval is, kan ik ook een desktop-icon en/of een menu-item maken, dat een kanaal start en weer stopt. Daarvoor moest ik wel de juiste URL vinden. Dat is mij gelukt met ps x in een terminal, of – met enig puzzelen – in Firefox (onder de rechter muisknop) met View Page Info bij het tabblad Media c.q. View Page Source. Ik heb enkele scriptjes geschreven die precies doen wat ze voor mij moeten doen, namelijk web-radio laten horen en – bij de tweede keer kiezen – ook weer laten stoppen. Ze staan in een directory die in het pad voorkomt, bij mij: /usr/local/bin. Bij gebruik natuurlijk wel even uitvoerbaar maken; dat kan o.a. middels chmod +x <NAME>.
Bijvoorbeeld voor L1 Radio:

#!/bin/bash
## L1radio
ON=`ps x | grep mplayer | grep l1radio | grep -v grep`
if [ -n "$ON" ]; then
      killall mplayer
else
      mplayer mms://194.171.15.26/l1radio 1> /dev/null &
      if [ ! "$?" = "0" ]; then
            exit 1
      fi
fi
exit 0


Een algemenere oplossing, in te vullen middels onderstaande tabel:

#!/bin/bash
##<NAME>
ON=`ps x | grep <PLAYER> | grep <SHORTURL> | grep -v grep`
ON=`echo "$ON" | cut -c -6`
if [ -n "$ON" ]; then
      kill $ON
else
      <PLAYER> <URL> <TONULL> &
      if [ ! "$?" = "0" ]; then
            exit 1
      fi
fi
exit 0


Tabel voor de hierboven gegeven algemenere oplossing:

NAME

PLAYER

SHORTURL

URL

TONULL

Radio1

mplayer

radio1live

http://cgi.omroep.nl/cgi-bin/shoutcastlive.pls?radio1live

1> /dev/null

Radio4

mplayer

radio4live

http://cgi.omroep.nl/cgi-bin/shoutcastlive.pls?radio4live

1> /dev/null

Radio5

mplayer

radio5live

http://cgi.omroep.nl/cgi-bin/shoutcastlive.pls?radio5live

1> /dev/null

Radio6

mplayer

radio6-breed

mms://livemedia.omroep.nl/radio6-breed

1> /dev/null

L1radio

mplayer

l1radio

mms://194.171.15.26/l1radio

1> /dev/null

WereldomroepNL

mplayer

nl:8048

http://shoutcast.omroep.nl:8048

1> /dev/null

Klara

mplayer

klara-high

http://mp3.streampower.be/klara-high.mp3?rand=106

1> /dev/null

BBC Radio 5

realplay

fivelive/live

http://www.bbc.co.uk/fivelive/live/surestream_int.rpm


Radio Scotland

realplay

radioscotland

http://www.bbc.co.uk/scotland/radioscotland/media/radioscotland.rpm


WDR3

realplay

wdr3.smil

http://www.wdr.de/wdrlive/media/wdr3.smil


WDR5

realplay

wdr5.smil

http://www.wdr.de/wdrlive/media/wdr5.smil


NDR Kultur

mplayer

ndrkultur

http://213.200.97.110:8000/ndr/ndrkultur.mp3

1> /dev/null

NB Als <PLAYER> = realplay dan moet bij ‘killall’ komen te staan: realplay.bin


Mocht een van de mogelijkheden niet werken, dan functioneert misschien mplayer -playlist. Voorbeeld voor BBC 3:
      mplayer -playlist http://www.bbc.co.uk/radio3/ram/r3g2.ram

In de plaats van realplay kan ook gebruikt worden: mplayer -ao alsa -playlist
Dezelfde opdracht werkt ook als de url verwijst naar zo’n verdomde windoos media playlist; bijvoorbeeld voor de klassieke (en publieke? - nee dus) internet-Radio6:
      mplayer -ao alsa -playlist http://www.omroep.nl/live/nieuw-concertzender-bb.asx

Op basis van bovenstaande tabel is een nog algemenere oplossing mogelijk:

#!/bin/bash
## webradio <player|off> <URL>
if [ "$1" = "off" ]; then
      killall mplayer realplay.bin
else
      $1 $2 &
      if [ ! "$?" = "0" ]; then
            exit 1
      fi
fi
exit 0


L1 Radio starten kan dan met: webradio mplayer mms://194.171.15.26/l1radio. En stoppen met: webradio off.

UPDATE 25 juni 2008: Sinds maandagmorgen 16 juni gebruikt L1 ‘nieuwe’ (on)mogelijkheden van Microsof(TM), en functioneert dus niet meer.

UPDATE Sinds 17 september 2008 (en misschien al langer) werkt L1-radio via internet weer. Commentaar van L1: ‘Het bleek dat er geen signaal op de mms naar buiten ging maar alleen op de rtps, na dit aangepast te hebben kon dit wel.’

UPDATE Sinds 4 februari 2009 heeft de Nederlandse publieke (?) omroep haar radiouitzendingen via internet veranderd. Met behulp van View Page Source en View Page Info, tab Media, van Firefox is het mij gelukt de boel weer aan de praat te krijgen.
Radio 1: mplayer http://shoutcast.omroep.nl:8100/listen.pls 1> /dev/null &
Radio 4: mplayer http://shoutcast.omroep.nl:8106/listen.pls 1> /dev/null &
Radio 5: mplayer -playlist http://www.omroep.nl/live/radio/radio5-bb.asx 1> /dev/null &
Radio 6: mplayer mms://livemedia.omroep.nl/radio6-breed 1> /dev/null & (onveranderd).
Om het Oog op morgen met cron op te kunnen nemen gebruik ik nu:
mplayer -quiet -ao pcm -vo audiodump.wav -endpos 01:01:00 http://shoutcast.omroep.nl:8100/listen.pls 1>/dev/null 2>&1

naar boven

mid2wav & wav2mp3

8-5-2007 op 15:02
door T.Koops

Zo af en toe ontvang ik midi-bestandjes, maar 't lukte maar niet om er iets in Linux mee te doen. Zoekt en ge zult vinden op internet! Uiteindelijk werkte het met timidity. Daarbij moet ik nog wel een "patch set suitable for MIDI audio synthesis" installeren. Dat kan met freepats, maar op aanraden van het net gebruik ik nu het oudere eawpats. Daarbij moest ik wel het oorspronkelijke /etc/timidity.conf vervangen door (het aangepaste) timidity.conf van eawpats. Met timidity een-of-ander.mid kon ik de boel testen en 't werkte. Met timidity een-of-ander.mid -Ow1S -s 44100 -o een-of-ander.wav lukte het om een wav-bestandje te maken.
Om die conversie in batch uit te kunnen voeren, heb ik het volgende script gemaakt, en uitvoerbaar in /usr/local/bin neergezet:

      #! /bin/bash
      ## mid2wav

      if [ "$#" = "0" ]; then
            echo "Usage: mid2wav <filename.mid> <filename.mid> ... "
      else
            if [ ! -d ./wav ]; then
                  mkdir ./wav
            fi
            for param; do
            if [ -f "$param" ]; then
                  MID=`basename "$param" | grep -F ".mid"`
                  if [ -n "$MID" ]; then
                        WAV=`basename "$param" .mid`
                        nice timidity "$param" -Ow1S -s 44100 -o ./wav/"$WAV".wav
                  fi
            fi
            done
            play /usr/local/bin/wav/chimes.wav
      fi

Nu kan ik in xfe of een andere filemanager een aantal .mid-bestanden selecteren en door dan met Open with mid2wav eenvoudig in batch wav's maken.
Die truuk met for param;do en basename is ook toepasbaar met lame waardoor ik van wav's mp3's kan maken middels het volgende script:

      #! /bin/bash
      ## wav2mp3
      
      if [ "$#" = "0" ]; then
            echo "Usage: wav2mp3 <filename.wav> <filename.wav> ... "
      else
            if [ ! -d ./mp3 ]; then
                  mkdir ./mp3
            fi
            for param; do
                  if [ -f "$param" ]; then
                        WAV=`basename "$param" | grep -F ".wav"`
                        if [ -n "$WAV" ]; then
                              MP3=`basename "$param" .wav`
                              nice lame -h -V2 "$param" ./mp3/"$MP3".mp3
                        fi
                  fi
                  done
            play /usr/local/bin/wav/chimes.wav
      fi

Overigens: timidity en lame zijn ook beschikbaar voor Windows, maar ik zou niet weten hoe ik daarin scripts als bovenstaande kan maken.

naar boven