Hi,
Für das regelmässige Aufnehmen von Radio-Sendungen via Internet-Stream gibt es bereits eine Vielzahl an Software-Lösungen. Für den überwiegenden Teil muss dazu jedoch ein PC oder so an sein. Das muss nicht sein, denn die Fritz!- oder eine andere Netz-Box ist ja ohnehin da und an - und oft gelangweilt, weil keiner da sich ...
So war ich von der Idee, die Aufnahmen mittels Streamripper und Crontab-Jobs sozusagen im Hintergrund zu erledigen, recht angetan. Allein die langen Zeilen haben mir nicht gefallen, ich wollte es lieber kurz, etwa so:
29 08 * * 1-5 ./recorder ndrKultur "Am Morgen vorgelesen" 32 Stick
04 09 * * 1-5 ./recorder mdrFigaro Lesezeit 33 Onlinespeicher
04 10 * * 6 ./recorder DLF KPetc 57 usbHDD
Die letzte Zeile sähe im Orginal etwa so aus:
04 10 * * 6 ./recorder DLF KPetc 57 usbHDD streamripper http://dradio_mp3_dlf_m.akacast.aka...gnl.akacast.akamaistream.net/dradio_mp3_dlf_m --with-id3v1 --quiet -a RecorderTest_2014-03-19_21-52-27_DLF -s -A -o larger -k 1 -l 15 -d /var/media/ftp/usbHDD/Music/DLF/RecorderTest
Nicht wirklich praktikabel, zumal alles in einer Zeile stehen muss.
Also schnell ein Script geschrieben auf dass die Sache im Blick bleibt.
Die Crontab-Zeile kurz erklärt:
mm HH DD MM W Befehl Sender Programm Dauer HDD-Label
04 10 * * 6 ./recorder DLF KPetc 57 (min) Name lt. Datei-Manager
Zu gut deutsch: Nimm jeden Samstag (6) um 10:04 für 57 min das Programm "KPetc" vom DLF auf.
Noch einmal in Code-Format:
oder auch:
Es ist also immer nur ein Leerzeichen "erlaubt", bzw., ansonsten halt in Anführungszeichen.
Wie ist der Script zu verwenden?
Ich unterstelle jetzt einmal, dass eine Freetz-Variante auf der Box mit Streamripper im Paket läuft. Dann sind die Grundlagen bereits gelegt. Wenn nicht, eine der Internet-Suchmaschinen wird da helfen können!
Den Code in eine Datei auf den USB-Stick / -HDD packen und ausführbar machen.
Danach im load-Zweig der rc.external folgende Zeile eintragen:
Stick an der Box angeschlossen - dann ist nach einem reboot / Neustart der Box bereits alles eingerichtet.
Bitte den Teil Stick/scripts/recorder den eigenen Wünschen /Gegebenheiten anpassen.
Das Script ist so angelegt, dass es, so hoffe ich, für jeden (der sich schon einmal mit ...) nachvollziehbar bleibt.
Ansonsten stehen viele Hinweise bereits im Script.
Dieser sollte ohne weitere Anpassung, ausser man mag meinen Test-Sender nicht, laufen.
Bei mir heißt der Script "recorder.sh" und liegt im Ordner "/scripts".
Eigentlich sind diese Namen nicht zwingend, wenn auch logisch ...
Die notwendigen Informationen über Sender-Namen, Stream, HDD-Label etc. holt sich das Script aus der Config-Datei für den Streamripper und der lokalen Freetz-Umgebung. Das bedeutet, die in der Crontab verwendeten Begriffe sollten mit denen für den Streamripper übereinstimmen.
Die Aufnahme landet dann als .mp3 /.ogg (je nach Stream) in dem im Streamripper-Menü angegebenen Ordner,
wobei dort dann die Aufnahmen gleich nach Sender und Programm sortiert werden.
Je nach Fritz!Box und sonstiger Konstellation wie Onlinespeicher sind derzeit drei Speicher-Orte möglich:
Wer mehr braucht, müsste im 6. Abschnitt den case-Teil anpassen und entsprechend dazu im 0. Abschnitt die Variable "Speicherorte" anpassen. Doch dann entfällt die Gewährleistung.
Beim Erststart des Scripts werden im 4. Abschnitt zwei symbolische Links angelegt.
Der erste ist für die Crontab, der zweite ist für den Verweis des Anrufsbeantworters (AVM-Zweig der Box) auf den 1. USB-Speicher (uStor01).
Wer den 2. Link nicht will oder braucht, kann den Bereich über dem exit-Komanndo löschen oder einfach mit #auskommentieren:
In der Konsole kann direḱt nach dem Einloggen mit sh recorder das Script getestet werden.
So nun viel Spass beim Aufnehmen.
Cu, rapat
Für das regelmässige Aufnehmen von Radio-Sendungen via Internet-Stream gibt es bereits eine Vielzahl an Software-Lösungen. Für den überwiegenden Teil muss dazu jedoch ein PC oder so an sein. Das muss nicht sein, denn die Fritz!- oder eine andere Netz-Box ist ja ohnehin da und an - und oft gelangweilt, weil keiner da sich ...
So war ich von der Idee, die Aufnahmen mittels Streamripper und Crontab-Jobs sozusagen im Hintergrund zu erledigen, recht angetan. Allein die langen Zeilen haben mir nicht gefallen, ich wollte es lieber kurz, etwa so:
29 08 * * 1-5 ./recorder ndrKultur "Am Morgen vorgelesen" 32 Stick
04 09 * * 1-5 ./recorder mdrFigaro Lesezeit 33 Onlinespeicher
04 10 * * 6 ./recorder DLF KPetc 57 usbHDD
Die letzte Zeile sähe im Orginal etwa so aus:
04 10 * * 6 ./recorder DLF KPetc 57 usbHDD streamripper http://dradio_mp3_dlf_m.akacast.aka...gnl.akacast.akamaistream.net/dradio_mp3_dlf_m --with-id3v1 --quiet -a RecorderTest_2014-03-19_21-52-27_DLF -s -A -o larger -k 1 -l 15 -d /var/media/ftp/usbHDD/Music/DLF/RecorderTest
Nicht wirklich praktikabel, zumal alles in einer Zeile stehen muss.
Also schnell ein Script geschrieben auf dass die Sache im Blick bleibt.
Die Crontab-Zeile kurz erklärt:
mm HH DD MM W Befehl Sender Programm Dauer HDD-Label
04 10 * * 6 ./recorder DLF KPetc 57 (min) Name lt. Datei-Manager
Zu gut deutsch: Nimm jeden Samstag (6) um 10:04 für 57 min das Programm "KPetc" vom DLF auf.
Noch einmal in Code-Format:
Code:
04 10 * * 6 ./recorder DLF KPetc 57 usbHDD
Code:
04 10 * * 6 sh recorder DLF "Klassik Pop etc" 57 usbHDD
Wie ist der Script zu verwenden?
Ich unterstelle jetzt einmal, dass eine Freetz-Variante auf der Box mit Streamripper im Paket läuft. Dann sind die Grundlagen bereits gelegt. Wenn nicht, eine der Internet-Suchmaschinen wird da helfen können!
Den Code in eine Datei auf den USB-Stick / -HDD packen und ausführbar machen.
Danach im load-Zweig der rc.external folgende Zeile eintragen:
Code:
/var/media/ftp/Stick/scripts/recorder.sh
Bitte den Teil Stick/scripts/recorder den eigenen Wünschen /Gegebenheiten anpassen.
Code:
#!/bin/sh
# Stream-Aufnahmen per crontab via Streamripper mit ausgewähltem Sender
# $1 = Sender
# $2 = Programm
# $3 = Dauer
# $4 = Speicher-Namen (Label)
# 0. Wer lieber einen anderen Test-Stream will, bitte anpassen
def_sender="dlf"
def_stream="http://dradio_mp3_dlf_m.akacast.akamaistream.net/7/249/142684/v1/gnl.akacast.akamaistream.net/dradio_mp3_dlf_m"
cfg_ripper="/var/mod/etc/conf/streamripper.cfg"
##### Speicherorte, don`t edit #####
Speicherorte="uStor01 usbHDD online"
# 1. Start oder Teststrecke für die Konsole
if [ -z "$1" ] ; then
echo & echo Das ist ein Test-Lauf
sleep 5 & echo =====================
sender=$def_sender
programm=RecorderTest
dauer=15 # sind Sekunden
test=yes
else
## Input-Variable zuweisen
sender=$1
programm=$2
dauer=$3
speicher=$4
fi
echo memorys=$Speicherorte
echo \ Dauer=$dauer min
echo 1. Abschnitt: Start-Phase beendet.
# 2. Namen und default-Ordner ermitteln oder festlegen
echo Start-Ort=\"$0\"
echo Start-Pfad=\"$(pwd)\"
echo dirTest=\"$(dirname $0)\"
startPfad=$(pwd)
scripts=$(dirname $0)
if [ "$scripts" = "." ] ; then scripts=$(echo | pwd) ; fi
if [ ${startPfad##*/} = "root" ] ; then
ortsTest=$(ls -l $0 | cut -d'>' -f2 | cut -d'.' -f1)
echo ortsTest=\"$ortsTest\"
teil=${ortsTest%/*}
scripts=/${teil#*/}
fi
echo scriptPfad=\"$scripts\"
muster=$(basename $0)
scriptName=${muster%.*}
echo scriptName=\"$scriptName\"
string=$(grep MUSICDIR "$cfg_ripper" | cut -d'=' -f2 | cut -d'/' -f6 | cut -d'\' -f1)
echo string=\"$string\"
teil=${string%?}
ordner=${teil#?}
if [ -z "$ordner" ] ; then ordner=Music ; else ordner=${string%?} ; fi
echo ordner=\"$ordner\"
echo 2. Abschnitt: Ordner-Suche beendet.
# 3. Speicher-Namen mit "mount" auslesen und den -Orten zuweisen
dev_Anz=$(mount | grep -c "ftp/" | cut -d' ' -f3 | cut -d'/' -f5)
dev_Name=$(mount | grep "ftp/" | cut -d' ' -f3 | cut -d'/' -f5)
echo $dev_Name > "/var/tmp/$scriptName.tmp"
read -t 1 $Speicherorte < "/var/tmp/$scriptName.tmp"
echo dev_Anz=\"$dev_Anz\"
echo uStor01=\"$uStor01\"
echo \ usbHDD=\"$usbHDD\"
echo \ online=\"$online\"
echo 3. Abschnitt: Speicher-Namen \(Label\) beendet.
# sleep 5 & exit
# 4. symLink für crontab und USB-Stick anlegen (./$scriptName ruft dann diesen script auf)
if [ ! -e "/var/mod/root/$scriptName" ] ; then
ln -s "$scripts/$scriptName.sh" "/var/mod/root/$scriptName"
echo "symLink erstellt"
if [ -p "/var/tam/mount" ] ; then
echo "/var/media/ftp/$uStor01" > /var/tam/mount
rm -f /var/media/NEW_LINK
ln -f -s /var/media/ftp/$uStor01 /var/media/NEW_LINK
fi
exit
else
echo "symLink bereits vorhanden"
fi
echo 4. Abschnitt: SymLink beendet.
# 5. URL des Streams in Streamripper-Config-Datei suchen
echo \ Sender-Suche=\"$sender\"
string=$(grep -i -m 1 "$sender" "$cfg_ripper" | cut -d'=' -f2)
teil=${string%?}
sender=${teil#?}
echo Sender lt. cfg=\"$sender\"
srch=$(grep "$sender" "$cfg_ripper" | cut -d'_' -f2 | cut -d'E' -f2 | cut -d'=' -f1)
srch=$(echo $srch | cut -d' ' -f1)
echo \ \ Sender-Platz=\"$srch\"
if [ -z "$srch" ] && [ "$test" = "yes" ] ; then
srch=1
string=$(grep NAME$srch "$cfg_ripper" | cut -d'=' -f2)
teil=${string%?}
sender=${teil#?}
fi
string=$(grep SERVER$srch "$cfg_ripper" | cut -d'=' -f2)
echo Stream=$string
teil=${string%??????}
stream=${teil#?}
echo Stream=\"$stream\"
if [ -z "$stream" ] && [ "$test" = "yes" ] ; then
echo Keine Stream-URL gefunden, setze Test-Stream auf $def_stream
sender=Test-mit-$def_sender
stream=$def_stream
sleep 5 & echo
else
echo Sender+Platz: $sender=$srch
fi
echo 5. Abschnitt: Stream-Suche beendet.
# 6. Speicher-Ort festlegen
if [ -z "$speicher" ] || [ -z "$4" ] ; then
string=$(grep MUSICDIR "$cfg_ripper" | cut -d'=' -f2)
teil=${string%?}
speicher=${teil#?}
HDD="$speicher/$sender/$programm"
else
case $speicher in
$uStor01) HDD="/var/media/ftp/$uStor01/$ordner/$sender/$programm" ;;
$usbHDD) HDD="/var/media/ftp/$usbHDD/$ordner/$sender/$programm" ;;
$online) HDD="/var/media/ftp/$online/$ordner/$sender/$programm" ;;
esac
fi
if [ -z "$HDD" ] ; then
muster=$(echo $scripts | cut -d'/' -f6)
defHDD=$(echo ${scripts//$muster})
HDD="$defHDD$ordner/$sender/$programm"
fi
echo Speicher=$HDD
echo 6. Abschnitt: Speicher-Ort beendet. & echo
# Frage beim Test-Lauf zum Beeenden
if [ "$test" = "yes" ] ; then
echo "Wenn alle Werte richtig eingetragen sind, kann der Test-Lauf fortgesetzt werden."
echo
echo \ \ Sender=\"$sender\"
echo \ \ Stream=\"$stream\"
echo \Programm=\"$programm\"
echo \ \ Dauer=\"$dauer s\"
echo \Speicher=\"$HDD\"
echo \LogDatei=\"$scripts/$scriptName.log\"
echo
while true; do
read -p "Alle Werte okay? $scriptName-Test fortsetzen? " jn
case $jn in
[Jj]* ) echo "Test wird fortgesetzt ..."; echo; sleep 2; break ;;
[Nn]* ) exit ;;
esac
done
fi
# 7. Log-Buch 1. Eintrag schreiben
zeit=$(date +"%a, %d.%m.%Y, %H:%M,%S Uhr")
dateiName=$(echo $programm\_$(date +%F_%H-%M-%S\_$sender))
if [ "$test" = "yes" ] ; then
echo $zeit: $sender nimmt $dauer s "$programm" als \"$dateiName\" auf.
echo $zeit: $sender nimmt $dauer s "$programm" in \"$HDD\" auf. >> "$scripts/$scriptName.log"
else
echo $zeit: $sender startet $dauer min Aufnahme von \"$programm\". >> "$scripts/$scriptName.log"
fi
echo 7. Abschnitt: Logbuch, 1. Eintrag beendet.
# 8. Streamripper mit gefundendem Sender starten
if [ "$test" = "yes" ] ; then
echo "streamripper $stream --with-id3v1 --quiet -a "$dateiName" -s -A -o larger -k 1 -l $dauer -d "$HDD" "
echo & sleep 2 & echo "Aufnahme gestartet, es geht gleich weiter ..."
fi
if [ ! -z "$3" ] ; then dauer=$(expr $3 \* 60) ; else dauer=$dauer ; fi # Minuten-Input in Sekunden umrechnen
streamripper $stream --with-id3v1 --quiet -a "$dateiName" -s -A -o larger -k 1 -l $dauer -d "$HDD"
errCode=$?
echo Streamripper, Exit-Code: \"$errCode\"
echo 8. Abschnitt: Stream-Aufnahme beendet.
# 9. Log-Buch 2. Eintrag schreiben
if [ "$errCode" != "0" ] ; then
echo Streamripper mit Fehler beendet: \"$errCode\"
zeit=$(date +"%a, %d.%m.%Y, %H:%M,%S Uhr")
echo $zeit: streamripper mit Fehler \"$errCode\" beendet.>>"$scripts/$scriptName.log"
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'>>"$scripts/$scriptName.log"
else
echo Streamripper erfolgreich beendet.
zeit=$(date +"%a, %d.%m.%Y, %H:%M,%S Uhr")
echo $zeit: $sender auf \"$HDD\" beendet.>>"$scripts/$scriptName.log"
echo '------------------------------'>>"$scripts/$scriptName.log"
fi
echo 9. Abschnitt: Logbuch, 2. Eintrag beendet. & echo
rm "/var/tmp/$scriptName.tmp"
Das Script ist so angelegt, dass es, so hoffe ich, für jeden (der sich schon einmal mit ...) nachvollziehbar bleibt.
Ansonsten stehen viele Hinweise bereits im Script.
Dieser sollte ohne weitere Anpassung, ausser man mag meinen Test-Sender nicht, laufen.
Bei mir heißt der Script "recorder.sh" und liegt im Ordner "/scripts".
Eigentlich sind diese Namen nicht zwingend, wenn auch logisch ...
Die notwendigen Informationen über Sender-Namen, Stream, HDD-Label etc. holt sich das Script aus der Config-Datei für den Streamripper und der lokalen Freetz-Umgebung. Das bedeutet, die in der Crontab verwendeten Begriffe sollten mit denen für den Streamripper übereinstimmen.
Die Aufnahme landet dann als .mp3 /.ogg (je nach Stream) in dem im Streamripper-Menü angegebenen Ordner,
wobei dort dann die Aufnahmen gleich nach Sender und Programm sortiert werden.
Je nach Fritz!Box und sonstiger Konstellation wie Onlinespeicher sind derzeit drei Speicher-Orte möglich:
- USB-Stick
- USB-Festplatte
- Online-Speicher
Wer mehr braucht, müsste im 6. Abschnitt den case-Teil anpassen und entsprechend dazu im 0. Abschnitt die Variable "Speicherorte" anpassen. Doch dann entfällt die Gewährleistung.
Beim Erststart des Scripts werden im 4. Abschnitt zwei symbolische Links angelegt.
Der erste ist für die Crontab, der zweite ist für den Verweis des Anrufsbeantworters (AVM-Zweig der Box) auf den 1. USB-Speicher (uStor01).
Wer den 2. Link nicht will oder braucht, kann den Bereich über dem exit-Komanndo löschen oder einfach mit #auskommentieren:
Code:
if [ -p "/var/tam/mount" ] ; then
echo "/var/media/ftp/$uStor01" > /var/tam/mount
rm -f /var/media/NEW_LINK
ln -f -s /var/media/ftp/$uStor01 /var/media/NEW_LINK
fi
In der Konsole kann direḱt nach dem Einloggen mit sh recorder das Script getestet werden.
So nun viel Spass beim Aufnehmen.
Cu, rapat
Anhänge
Zuletzt bearbeitet: