Hallo Harald, hallo andere Interessenten,
um auf deine da:
viewtopic.php?f=30&t=12058&p=191470#p191470 gestellte Frage nach dem script einzugehen:
Im Moment sieht das Aufnahmescript wie folgt aus. Nicht unbedingt professionell, aber es tut, was es soll. Und Achtung für Interessenten: Das script läuft unter Linux. Windows geht nicht ohne Anpassung.
Vorab: Die Streamadressen der Sender sind in einer Datei eingetragen, das Aufnahmescript greift darauf zurück:
Code: Alles auswählen
cat wget-streamadressen
SR2:http://sr.audiostream.io/sr/1010/mp3/128/sr2
BR-Klassik:https://br-brklassik-live.cast.addradio.de/br/brklassik/live/mp3/high
NDR-Kultur:http://ndr-ndrkultur-live.cast.addradio.de/ndr/ndrkultur/live/mp3/128/stream.mp3
NDR-Info:http://ndr-ndrinfo-niedersachsen.cast.addradio.de/ndr/ndrinfo/niedersachsen/mp3/128/stream.mp3
WDR5:https://wdr-wdr5-live.icecastssl.wdr.de/wdr/wdr5/live/mp3/128/stream.mp3
MDR-Kultur:http://mdr-284350-0.cast.mdr.de/mdr/284350/0/mp3/high/stream.mp3
Das script für das Anlegen der Timer:
Code: Alles auswählen
#!/bin/sh
#Definition einiger Werte
STREAMS=wget-streamadressen
INSERTSQL=/tmp/insert.sql
PIDFILEPRE=/tmp/pidfile
#--------------------------
#Auswahl des Sender/Streams
#--------------------------
echo "Folgende Sender stehen zur Auswahl:"
echo ""
ANZSENDER=$(cat "$STREAMS" | cut -d : -f1|wc -l)
for i in $(seq 1 $ANZSENDER)
do
echo $i: $(cat "$STREAMS" |head -n$i|tail -n1|cut -d : -f1)
done
echo ""
read -p "Bitte Sender wählen mit einleitender Zeilenzahl: " SENDER
SENDERNAME=$(cat "$STREAMS" |head -n$SENDER|tail -n1|cut -d : -f1)
#----------------------------
#Daten für den Timer abfragen
#----------------------------
echo ""
read -p "Titel der Aufnahme: " TITEL
echo ""
ANF=""
while [ "$ANF" = "" ];
do
read -p "Startzeit für Aufnahme (Format 00:00): " ANF
ANF=`echo "$ANF" | grep -E '^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$'`
if [ "$ANF" = "" ]
then
echo "Falsche Eingabe. Korrektes Format ist 00:00!"
fi
done
echo ""
END=""
while [ "$END" = "" ];
do
read -p "Stopzeit für Timer (Format 00:00): " END
END=`echo "$END" | grep -E '^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$'`
if [ "$END" = "" ]
then
echo "Falsche Eingabe. Korrektes Format ist 00:00!"
fi
done
echo ""
#Annahme: Der Aufnahme wird am selben Tag gestartet und beendet.
read -p "Tag der Aufnahme (Format YY-MM-DD); falls heute, dann einfach ENTER: " DATUM
if [ "$DATUM" = "" ]
then
DATUMSTR=`date +%F`
else
RETV=1
while [ "$RETV" -eq 1 ];
do
`date -d "$DATUM" > /dev/null 2>&1`
RETV="`echo $?`"
if [ "$RETV" -eq 1 ]
then
echo "Falsches Datumsformat. Korrektes Format YY-MM-DD"
read -p "Tag der Aufnahme (Format YY-MM-DD); falls heute, dann einfach ENTER: " DATUM
fi
done
DATUMSTR="$DATUM"
fi
#------------------------------------
#Anlegen des Timers bestätigen lassen
#------------------------------------
echo ""
echo "Folgenden Auftrag an at übergeben und in die Datenbank eintragen?"
echo ""
echo "---------------------"
echo "Sender: $SENDERNAME"
echo "Programm: $TITEL"
echo "Aufnahmedatum: $DATUMSTR"
echo "Start Aufnahme: $ANF"
echo "Ende Aufnahme: $END"
echo "---------------------"
read -p "jetzt eintragen? [j/n]" CHK
if [ "$CHK" != "j" ]
then
echo ""
echo "Timer wird nicht angelegt! Script wird beendet."
exit
fi
#---------------------------------------------------------------------------
#eine eindeutige "Signatur" für den Timer, falls mehrere gelichzeitig laufen
#---------------------------------------------------------------------------
VPID="aufnahme-$SENDERNAME-$ANF-$END-$DATUMSTR"
#---------------------------------------------------------------------
#einige Tags werden schon "voreingestellt".
#Auswertung im tagscript, wenn Aufnahmedatei nach Timerende verfügbar.
#---------------------------------------------------------------------
echo "Titel:$TITEL" > /tmp/tags-aufnahme-$SENDERNAME-$ANF-$END-$DATUMSTR
echo "Album:$VPID" >> /tmp/tags-aufnahme-$SENDERNAME-$ANF-$END-$DATUMSTR
#---------------------------------------
#Der Befehl für at wird zusammengestellt
#---------------------------------------
BEFEHLPART1="$(cat "$STREAMS"|head -n$SENDER|tail -n1|cut -d ":" -f2-)"
BEFEHLPART2="-q -c -O /srv/Music/wget/aufnahme-$SENDERNAME-$ANF-$END-$DATUMSTR.mp3 "
BEFEHL="wget $BEFEHLPART2 $BEFEHLPART1"
BEFEHL="(($BEFEHL) & jobs -p > $PIDFILEPRE-$VPID)"
#----------------------------------------------------------------
#Anweisung für Datenbank und Eintrag des Timers in die Datenbank:
#----------------------------------------------------------------
#(Hier weggelassen, weil nur für mich brauchbar)
#--------------------------
#Timerstop für at erstellen
#--------------------------
LOESCHBEFEHL="cat $PIDFILEPRE-$VPID|xargs kill && rm $PIDFILEPRE-$VPID"
echo ""
#-------------------------------------------------
#die Timer für Start und Stop der Aufnahme anlegen
#--------------------------------------------------
echo $BEFEHL|at $ANF $DATUM
echo $LOESCHBEFEHL|at $END $DATUM
echo ""
#-------------------
#ein wenig aufräumen
#-------------------
rm "$INSERTSQL"
Für das Taggen wird ein eigenes Script genutzt, denn getaggt werden kann ja erst nach Abschluss der Aufnahmen, wenn die zu taggende Datei verfügbar ist. Das script enthält die wenigen Befehle zum Taggen und ansonsten viel Code für die Datenbankverwaltung. Deswegen habe ich es nicht hier gepostet. Und das script kann bei Bedarf halt vom Nutzer gestartet werden, ansonsten läuft es kurz vor dem Herunterfahren des NAS per cron-job. Dann gibt es noch ein script zum Löschen von nicht mehr benötigten Mitschnitten. Alle drei scripts lassen sich per Menü aufrufen, wenn mir denn danach ist:
Code: Alles auswählen
#!/bin/sh
auswahl=$(dialog --stdout --backtitle "Radiomitschnitte - scripts" --menu "script auswählen:" 10 60 4 \
1 "Timer anlegen" \
2 "Aufnahme taggen und in Datenbank eintragen" \
3 "Aufnahme löschen und aus Datenbank löschen")
#echo "$auswahl"
case "$auswahl" in
1)
echo ""
echo "Timer anlegen..."
echo ""
sh at-aufnahmejob.sh ;;
2)
echo ""
echo "Aufnahmen taggen..."
echo ""
sh tag-wgetmitschnitt.sh ;;
3)
echo ""
echo "Aufnahme löschen..."
echo ""
sh del-radioaufnahme.sh ;;
esac
Das alles lässt sich gewiss noch optimieren; mal abwarten, was die Tage noch so bringen. Im Moment laufen die scripts wie gewünscht und tun, was sie sollen.
Viele Grüße
Jochen