Linux: Radiostreams mitschneiden?

Antworten
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Linux: Radiostreams mitschneiden?

Beitrag von Melomane »

Hallo,

Frage an die Linuxer, die noch ein Ohr für Internetradio haben: ;)

Welche Programme könnt ihr empfehlen, um streams von Sendern mitzuschneiden? Und zwar timergesteuert (atd/cron), also konsolenbasiert ohne grafische Oberfläche.

Ich habe streamripper ausprobiert. Das funktioniert im Prinzip. Aber nicht wirklich zufriedenstellend. Das Programm ist ja auch jahrelang nicht mehr gepflegt worden und zudem auf shoutcast ausgerichtet. Mich stört: Wenn ich z.B. NDR Kultur mitschneide, dann kann ich entweder den stream in einer großen Datei ablegen. Was mich nicht stören würde. Blöderweise wird dann aber auch ein cue-file angelegt, in dem nichts drin steht. Wenn man das löscht, mag der logitechmediaserver die verbliebene mp3-Datei nicht abspielen. Der spielt die mp3-Datei auch nicht direkt, sondern nur, wenn das cue-file ausgewählt wird. Und gibt dann z.B aus in der Playlist Titel 1 von 567. Unschön. Alternativ legt streamripper einzelne Dateien an, das wären dann die 567. Nicht wirklich handhabbar. Wie gesagt, Programm ist alt und nicht für diesen Zweck hier ausgelegt. Ich habe auch probiert, aus der mp3 eine wav-Datei zu machen. Die lässt sich aber nicht für mich und das verwendete Linux (Armbian auf cubietruck) zufriedenstellend taggen. Und aus der wav wieder irgendetwas anderes zu schnitzen, ist auch nicht die elegante Lösung.

Deswegen die Frage: Kennt ihr brauchbare Alternativen für mein Vorhaben?

Viele Grüße

Jochen
Bild
nihil.sine.causa
Aktiver Hörer
Beiträge: 1506
Registriert: 28.07.2011, 12:31
Wohnort: Bonn

Beitrag von nihil.sine.causa »

Hallo Jochen,

ich "schneide" regelmäßig jede Woche eine Sendung mit, nämlich "Klassik, Pop etc." vom Deutschlandfunk. Dazu verwende ich die phonostar Radio Cloud:

https://www.phonostar.de/radio/radioauf ... cloud/info

Das ist kostenlos, solange man mit einem Speicherplatz für Aufnahmen von zwei Stunden auskommt.

Ob es qualitativ bessere Möglichkeiten gibt, habe ich schon lange nicht mehr getestet. Von daher bin ich an Deiner Fragestellung auch interessiert.

Viele Grüße
Harald
Bild
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Beitrag von Melomane »

Hallo Harald,

wenn es um Programme mit grafischer Oberfläche geht, dann sollte auch VLC helfen können. Audacity wohl auch. Ich habe die Programme dafür aber nie ausprobiert.

Ich quäle gerade die Suchmaschinen für die Verwendung von wget. Damit soll es wohl auch möglich sein, Audiostreams aufzuzeichen.

Viele Grüße

Jochen
Bild
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Beitrag von Melomane »

wget funktioniert auch, z.B. mit dem Befehl:

wget --retry-connrefused --continue http://46.163.75.84:8000 -O aufnahme-%date%_%time:~0,2%-%time:~3,2%.mp3

(= Beispiel für Windows)

Aber: das Problem ist, eine für wget verdaubare streamadresse zu finden. Es nützt nichts, die m3u eines Senders zu laden. Denn damit lädt wget nur diese Datei, aber nicht den dahinter liegenden audiostream. Zumindest bin ich bislang nicht weiter.
Bild
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Beitrag von Melomane »

Und da hilft diese Seite weiter:

https://linux-club.de/wiki/opensuse/Str ... _ermitteln

Dann wollen wir uns mal dransetzen, ein paar scripts zu schreiben.

Viele Grüße

Jochen
Bild
hkampen
Aktiver Hörer
Beiträge: 687
Registriert: 11.02.2018, 23:40
Wohnort: Köln

Beitrag von hkampen »

Hallo Jochen,

die Weiterleitungsadresse ist enthalten. Hier die Windows-Variante, die ich in Powershell getestet hab. Ähnliche Lösungen gibt es auch für CURL (was inzwischen ein Alias von Invoke-WebRequest bzw. wget ist).

In dem Beispiel leitet der Server http://example.com auf https://www.example.com/ um.

Code: Alles auswählen

PS C:>  $Response = Invoke-WebRequest -URI http://example.com
PS C:> $Response.BaseResponse.ResponseUri.AbsoluteUri
Ergebnis

Code: Alles auswählen

http://www.example.com/
Grüße
Harald
Bild
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Beitrag von Melomane »

Hallo Harald,

ja, wget löst das Problem mit dem in meinem vorigen Beitrag angesprochenen link. Man nehme den Abschnitt "Alternativ via Konsole" und man bekommt, was man möchte. Dann wie gesagt ein wenig bash-code drumherum und die Aufnahmen laufen.

Viele Grüße

Jochen
Bild
hkampen
Aktiver Hörer
Beiträge: 687
Registriert: 11.02.2018, 23:40
Wohnort: Köln

Beitrag von hkampen »

Hallo Jochen,

ich war da etwas fixiert auf den altbackenen HTML/JS-Code. Allerdings funktioniert das nicht mit der Variable aus dem Javascript:

Code: Alles auswählen

"+myAdID+"
Ob der ASX-Code noch so verwendet wird, weiß ich nicht. Den könnte man aber direkt aus der wget-Response ziehen und mit regulären Ausdrücken in eine Variable schreiben.

Am Ende muss aber der Stream verarbeitet werden, was eine Schleife von URL-Abfragen ist. Es ginge noch, die binären Rückgabe in eine Datei zu schreiben, dann hast du aber noch keine WMA- oder MP3-Datei, weil der Datei-Header fehlt.

Grüße
Harald
Bild
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Beitrag von Melomane »

Hallo,

für etwaige Interessenten: So sieht es aus, wenn ein Programm mitgeschnitten ist und wiedergeben wird:

Bild

Den roten Platzhalter mag man sich als Cover nach eigenem Gusto denken, z.B. mit einem alten "Dampfradio" oder aktuellem Interstreambild. ;)

Viele Grüße

Jochen
Bild
Piano Pianissimo
Aktiver Hörer
Beiträge: 178
Registriert: 23.05.2016, 16:15

Sreams mitschneiden

Beitrag von Piano Pianissimo »

Moin moin,

ich nutze AUDIALS , gibts zum Testen für Lau und in der Frühbucherversion für ein paar € (< als 30€)

Ich nutze és allerdings nur für Spotify und Tidal
und da läuft es ohne jedweden Stress.

pp
Bild
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Beitrag von Melomane »

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