Sveriges Radio från terminalen
Det är på tiden att jag delar med mig av mitt fantastiska lilla skalskript för Sveriges Radios webbradio.
SR har två olika typer av webbradio, vid sidan av sina poddradio-arkiv. Dels en liveström, och dels arkiverade klipp.
För att köra skripten behöver du rtmpdump eller flvstreamer, och så förstås en mediaspelare. Jag använder MPlayer.
För att lyssna på live-radion behöver du två filer – själva skriptet och en fil med direktadresser till strömmarna. Filen med adresser ska heta radio.dat och ligga i samma mapp som scriptet. Den ser ut så här:
rtmp://rtmp-live.sr.se/webbradio/kanaler/p1-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p2-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p2musik-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p3-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p4skaraborg-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p4orebro-aac-192
Som du ser så finns det flera möjliga adresser till P4, eftersom de har lokala sändningar.
Skriptet ser i sin tur ut så här:
#!/bin/sh
PLAYER=mplayer
STREAMER=flvstreamer
if [ X$1 == X-bg ]; then
$STREAMER -live -r $(grep $2 $HOME/bin/data/radio.dat) | $PLAYER -- - 2>&1 > /dev/null
echo $! > $/.radio.pid
else
rm ~/.radio-fifo
mkfifo ~/.radio-fifo
$STREAMER -quiet -o ~/.radio-fifo -live -r $(grep $1 radio.dat)&
$PLAYER ~/.radio-fifo
fi
exit 0
Döp skriptfilen till radio och se till att den är körbar. Nu kan du köra en radiokanal så här:
$ radio p3
Om du istället skulle välja att köra kanalen p4 så skulle den första adressen som innehåller p4 att köras, så för att köra P4 Örebro, som är den andra P4-kanalen i adressfilen, är jag tvungen att göra så här:
$ radio p4orebro
Vidare så går det att spela radio »i bakgrunden«, frikopplat från terminalen. Det är oerhört smidigt om man har datorn påslagen nattetid och vill bli väckt av den. Du kan ställa väckarklockan på 09.30 så här:
$ echo "radio -bg p2" | at 09:30
Men för att smidigt kunna stänga av uppspelningen behöver du ett skript till! Det heter radiotystnad och är litet och simpelt:
#!/bin/sh
kill $(cat $HOME/.radio.pid)
Det var allt om live-radio. Att spela upp radioklipp är en helt annan historia. Dessutom är den mera intressant.
Det här skriptet är finurligt, tycker jag åtminstone själv. Döp filen till vad du känner för; själv kallar jag det för webbradio.
#!/bin/sh
PLAYER=mplayer
RECPARAMETERS="-dumpstream -dumpfile radiodump.wma"
PLAYLISTPARAMETER="-playlist"
STREAMER=flvstreamer
record=""
if [ X$1 == X'-record' ]; then
record=$RECPARAMETERS
fi
for id; do
if [ X$id != X"-record" ]; then
id=$(echo $id|sed -E 's/.*[Ii][Dd]=([0-9]+).*/\1/')
$PLAYER $record $PLAYLISTPARAMETER "http://www.sr.se/webbradio/include/CreatePlaylist.asp?Type=db&Id=$id&broadcastDate=&AudioFormat=3&AvailableAudioFormats=1;3&IsBlock=0"
if [ X"$record" != X ]; then
stamp=$(date +"%Y%m%d-%H%M")
mv -i radiodump.wma SR_id-$id-$stamp.flv
fi
fi
done
Observera att där var en mycket lång rad mitt i alltsamman, som blivit radbruten här i bloggen.
Gör skriptet körbart. Sedan kan du helt enkelt kopiera adressen till webbradioklippet, genom att högerklicka på den här knappen och välja Kopiera länk:

Den kan också se ut så här:

När du kopierat länken, så kör du den genom skriptet.
$ webbradio "LÄNK"
Citattecknen är oerhört viktiga. Skulle du få för dig att vilja spara klippet till hårddisken, så kör du istället skriptet så här:
$ webbradio -record "LÄNK"
Filen kommer att sparas med ett filnamn enligt följande format:
SR_[id-nummer]-[datum]-[klockslag].flv
Om du skulle använda en annan mediaspelare än MPlayer, så kan du antagligen ersätta de följande två raderna…
RECPARAMETERS="-dumpstream -dumpfile radiodump.wma"
PLAYLISTPARAMETER="-playlist"
…med de här:
RECPARAMETERS=""
PLAYLISTPARAMETER=""
Några frågor?
Nostalgisk administratör någonstans?
Roligt utdrag:
$ whois 134.25.0.133
...
inetnum: 134.25.0.0 - 134.25.255.255
netname: RIKSRADION
descr: Sveriges Radio AB
descr: Oxenstiernsgatan 20
descr: S-105, Stockholm
...
% Information related to '134.25.0.0/16AS47708'
route: 134.25.0.0/16
descr: Sveriges Radios gamla fina B-adresser
origin: AS47708
mnt-by: SR-MNT
source: RIPE # Filtered
(se fetstil)
Ladda hem från Youtube
Tidigare har jag berättat hur man kan ladda hem från SVTPlay, och nu är det dags för Youtube. Jag tänker även berätta hur du kan göra för att konvertera en video till en ljudfil, genom att helt sonika lyfta över det i en egen fil.
Precis som tidigare, så är anledningen till att jag själv gör så här att jag kör ett 64-bitars OpenBSD, och då går det inte att använda Flash. Youtube kommer framöver att gå över till HTML5, och då slipper jag det här krånglet. Du kan pröva deras testversion detta här.
Det absolut enklaste sättet att tanka hem Youtube-videor är att använda sajten KeepVid.com. Det gör du så här:
- Gå till videon på Youtube.
- Kopiera adressen ur adressfältet.
- Klistra in adressen på KeepVid.com och klicka på Download-knappen.
- Högerklicka på länken som visas och välj Spara som…
Men detta fungerar inte felfritt! Dessutom är det skönt att kunna genomföra samma grej från ett terminalfönster eller i ett script, åtminstone för mig. Nu kommer jag först att berätta hur du laddar hem en video på det viset, och sedan hur man kan göra för att automatisera litet grand.
Ladda hem videon
Du behöver programmet youtube-dl, som i själva verket är ett Python-script. Se alltså till att ha Python installerat.
Windowsbrukare kan också använda det, och lätt övermäktiga instruktioner för hur scriptet kan installeras finns här.
På *nix-system måste youtube-dl.py dessutom vara körbar. Eftersom det är bra att hålla ordning på sin hemkatalog, så lägger vi scriptet i mappen ~/bin.
$ chmod +x youtube-dl.py
$ mkdir ~/bin
$ mv youtube-dl.py ~/bin/
Nu kollar vi att den går att köra:
$ youtube-dl.py
ksh: youtube-dl.py: not found
Hoppsan! Händer detta mumlar du följande trollformel, så är problemet omedelbart löst på obestämt tid.
$ echo 'export PATH=$PATH:$HOME/bin' >> .profile; export PATH=$PATH:$HOME/bin
Du kan även få permission denied när du kör filen. Lösningen är att köra scriptet så här istället:
$ python ~/bin/youtube-dl.py
Resten är lätt. Surfa till Youtube-sidan med videon, kopiera adressen, och kör scriptet med den enligt följande:
$ youtube-dl.py -bt "http://www.youtube.com/watch?v=yek2D4Kjwgc"
Glöm inte citat-tecknen! Eller snarare: Om du inte vet när de egentligen behövs, så använd dem alltid. (Just här behövs de egentligen inte.)
Youtube på volley
Har man inte Flash kan man inte se videon i webbläsaren. Om man bara vill slå en flukt på videon men inte tanka hem den, är det omständigt att behöva ladda hem den först.
Då kan man använda sig av samma lösning för nedladdning som ovan, men fånga videon »i luften« och spela upp den direkt istället! Så här skapar du ett script som fixar biffen:
$ cat << SLUT > ~/bin/youtube.sh
#!/bin/sh
PLAYER="mplayer"
YOUTUBE_DL="python ~/bin/youtube-dl.py"
for file; do $PLAYER $($YOUTUBE_DL -bg $file); done
SLUT
$ chmod +x ~/bin/youtube.sh
Ersätt "mplayer" med kommandot för den mediaspelare du föredrar.
Nu kan du spela upp videor direkt, busenkelt:
$ youtube.sh http://www.youtube.com/watch?v=yek2D4Kjwgc
Scriptet kan spela upp flera videor på rad om du klistrar in adresserna efter varandra.
Hur du plockar loss ljudet
Först och främst ska du se till att du har FFmpeg installerat.
Sedan måste du bestämma om du vill ha en mp3-fil eller en m4a-fil. Vill du ha ljudet i mp3-format, börja med att tanka hem videon så här:
$ youtube-dl.py -o dummy.flv http://www.youtube.com/watch?v=yek2D4Kjwgc
När nedladdningen är färdig så plockar du loss ljudspåret enligt det följande:
$ ffmpeg -vn -acodec copy -i dummy.flv ljudfil.mp3
Strax har du en fil som heter ljudfil.mp3.
Vill du istället ha ljudet i m4a-format, får du ändra parametrarna något.
$ youtube-dl.py -bo dummy.mp4 http://www.youtube.com/watch?v=yek2D4Kjwgc
$ ffmpeg -vn -acodec copy -i dummy.mp4 ljudfil.m4a
Och det var faktiskt det hela.
Antal olästa meddelanden
En kul anekdot vill jag dela med mig av. Den fanns tidigare publicerad på en annan blogg, som jag tagit ned från webben nu. Här är den:
❁ ❂ ❃
Antal olästa meddelanden (4)
– Den typen av sidrubriker har många sett gissar jag, i alla fall de som använder flikar i webbläsaren. Konceptet dök först upp på Googles GMail, och kopieras numera friskt av tjänster överallt på nätet. När det finns olästa meddelanden, läggs till sidans titel och flikens namn alltså antalet olästa meddelanden inom parentes. På så vis kan man surfa runt i andra flikar utan att ständigt behöva växla till den där fliken med mail eller något annat i för att se om där finns något nytt.Nu ska jag berätta en hemlighet. Jag hade haft Blogger-konto ett tag när GMail först lanserades, och var därför en av de första inbjudna att öppna mejlkonto där. På den tiden fanns ingen dylik funktion på GMail.
Efter att ha använt GMail några veckor, och samtidigt pysslat en del med webbutveckling, så slog det mig att jag gärna ville ha en sådan funktion där. För en gångs skull gjorde jag något åt infallet. GMail hade (och har kanske kvar) en tips- och buggrapporteringsfunktion, och med den meddelade jag hur jag ville ha det. »Tack tack för ditt förslag« fick jag till svar dagen därpå, och efter ytterligare någon dag senare var funktionen där, implementerad och praktisk!
Tack Google! Ni har väl inte patenterat idén, va…
Avstavningar på webben
Något som stör mig med att skriva på nätet är att man inte kan skriva med avstavningar. Eller ja, man kan, men det är krångligt. Det finns två sätt, ett manuellt och ett automatiskt.
Det manuella är klart värst. Då ordnar man först så att texten justeras med rak höger- och vänsterkant, och sedan proppar man in bindestreck och radmatningar där det tycks passa bäst. Sådant pysslade vi typografer med förr i tiden, med blytyper och sådär. Det var dock före min tid, och själv har jag aldrig gjort annat än digital typsättning.
Den automatiska metoden är att infoga en liten ramsa på de platser i orden där en radmatning är lämplig: ­. Att det liknar ordet blyg på engelska är faktiskt ganska träffande. Resultatet blir ett bindestreck som inte syns om det inte behövs, vilket vill säga om ordet avstavas. Det är med hjälp av detta lilla magiska tecken som det här inlägget blivit avstavat. (Om du inte ser några avstavningar så beror det på att din webbläsare klarade sig utan sådant tjafs).
Därmed är allt inte frid och fröjd, trots att det är automatiskt. Två problem återstår. För det första är det jobbigt att skriva ­ varje gång ett ord är lämpligt för snygg avstavning. Och etter värre: Man kan inte avstava många sammansatta ord. Sätter man till exempel samman katt och tass så blir det kattass. Ett t ska bort. Skriver man detta som katt­tass så blir det ju katttass, och ett t för mycket. Gör man inte det, så blir det kattass i löpande text, men kommer att avstavas som kat-tass eller katt-ass istället, och det går ju inte heller.
Ack och hu så fasligt illa det är!