|
- 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 |