Blog Digitalgesellschaft Verwaltungsbetrieb Textarchiv Textarchiv Walter Kirk (✝) Impressum
Internetradio zeitgesteuert aufnehmen mit yt-dlp
VorbemerkungInstallationEinstellungenCommand-LineExecute commands at a later time (at)AufnahmeCron JobBash-SkriptCrontabInhalt der ContrabAusgabePro und KontraAlternativenZusammenfassungQuelle
Manchmal möchte man einen Audio-Stream aufnehmen und in einer Datei speichern. Also nicht in mehreren Audio-Dateien geteilt. Oder eine solche Aufnahme gelingt nicht mit anderen Programmen wie StreamRipper, weil die Livestream URL keine brauchbaren Ergebnisse ergibt.
Hierfür bietet sich auch das Programm Youtube Download Program, Kurz: YT-DLP, an (Linux, MacOS, Windows). Darüber hinaus ist es zweckmäßig, dass die Start- und Endzeit eingestellt werden kann.
Für YT-DLP gibt es mehrere aktuell gehaltene GUI. Für zeitgesteuerte Aufnahmen wird hier nur der Weg über die Kommandozeile aufgezeigt.
Um Aufnahmen zeitlich zu steuern, können unter debian-basierten Linux-Distributionen das Programm yt-dlp und die Anweisung at (execute commands at a later time) in Kombination genutzt werden. Darüber hinaus ist für eine weitere Automatisierung die Einrichtung eines sog. Cronjob sinnvoll.
Beide Programme können aus den Repositories heraus installiert werden:
xxxxxxxxxx
test@geraet:~$ sudo apt install at yt-dlp
Hierdurch werden die Programme at und yt-dlp installiert.
Weiter Informationen hier.
Aufgrund der Vielfalt der Anwendungsmöglichkeiten ist es grundsätzlich ratsam, eine GUI für yt-dlp zu nutzen. Da im Beispiel eine termingerechte Aufnahme von Internetradio erfolgen soll, ist hier nur der Weg über die Kommandozeile möglich.
Will man einen Livestream aufnehmen, ist yt-dlp beispielhaft so auszuführen:
xxxxxxxxxx
test@geraet:~$ yt-dlp --audio-format mp3 --audio-quality 0 URL --no-part -P /home/user/speicherort/ -o `date +"%Y%m%d-%H%M%S"`-sender-titel
Erklärung
--audio-format: Laut Angabe des Senders
URL = Angabe des Senders für den Livestream
--no-part = Speicherung in einer Datei
--audio-quality 0 = bestmögliche Audioqualität
-q = Keine Ausgabe der Abarbeitung am Bildschirm (quiet)
-P = Speicherort
-o = Dateiname
Die Ausgabe kann so aussehen:
xxxxxxxxxx
[generic] Extracting URL: [livestream-URL]
[generic] high: Downloading webpage
[redirect] Following redirect to https://f121.rndfnk.com/ard/hr/hr2/live/mp3/256/stream.mp3?cid=01FBPYEPTX95S1NT3RSVAV4Z0P&sid=2Z4PF97eTYzZrP0qLuurF2MBJk6&token=WNAAfZf7WMFQ9fYZOb41ZuiaHuy9_NNuGklQ4iyT81s&tvf=mnWgWgSnnRdmMTIxLnJuZGZuay5jb20
[generic] Extracting URL: [Livestream-URL]mp3/256/stream.mp3?cid=01FBPYEPTX95S1NT3RSVAV4Z0P&sid=2Z4...mMTIxLnJuZGZuay5jb20
[generic] stream: Downloading webpage
[info] stream: Downloading 1 format(s): mpeg
[download] Destination: /home/user/speicherort/202312XX-HHMMJJ-sender-titel.mp3
[download] 1.23MiB at 33.23KiB/s (00:00:37)
Syntax
xxxxxxxxxx
echo timeout 10800 yt-dlp --audio-format mp3 --audio-quality 0 -q --no-part URL /home/user/speicherort/`date +"%Y%m%d-%H%M%S"`-titel.mp3 | at Zeit Tag
Erläuterung
timeout = Dauer in Sekunden
at Zeit Tag = Datum/Zeit der Ausführung im Format 00:03 23-12-03
Mit ENTER wird die Aufnahme veranlasst. yt-dlp wird mit den o.a. Einstellungen um die angegebene Zeit ausgeführt.
Die Zeitangabe veranlasst die Aufnahme am gleichen Tag. Wird hinter der Zeit auch das Datum im Format JJ-MM-TT angegeben, so lassen sich die Aufnahmen auch tageweise im Voraus planen.
Nach dem Start des PC werden die zukünftigen Jobs erledigt.
Beispiel
xxxxxxxxxx
test@geraet:~$ echo timeout 10800 yt-dlp URL -xciw -f "bestaudio/best" --audio-quality 0 --audio-format mp3 --no-part -P /home/user/speicherot/ -o `date +"%Y%m%d-%H%M%S"`-test.mp3 | at 00:03 23-12-03
warning: commands will be executed using /bin/sh
job 25 at Sun Dec 3 00:00:01 2023
Die Warnung hat in diesem Beispiel keine Bedeutung.
Mit dem o.a. Kommando wird eine Sendung um 00:03 Uhr im Umfang von 117 Minuten aufgezeichnet.
Anzeige der Aufgaben (Job-ID)
xxxxxxxxxx
test@geraet:~$ atq
1 Sun Dec 03 00:03:00 2023 a test
Im Beispiel ist die Job-ID 1
Löschen
xxxxxxxxxx
test@geraet:~$ atrm 1
Regelmäßig wiederkehrende Aufnahmen können automatisiert als Cronjob veranlasst werden. Zweckmäßigerweise wird die auszuführende Anweisung in einem Skript festgehalten.
Im vorliegenden Beispiel wird ein Livestream mit Hilfe von yt-dlp auf die eigene Festplatte gespeichert, und zwar Dauer 1 Std. 57 Min., jeden Sonntag, ab 00:03 Uhr.
Die Umsetzung des Komanndos für yt-dlp, ausgeführt zeit-gesteuert mit at, lässt sich mit dem folgenden Skript verwirklichen:
xxxxxxxxxx
#!/bin/sh
hours=1
minutes=57
date=`date +"%Y%m%d"`
url=[Livestream-URL]
output_filename=${date}-sender-titel
duration=$(( hours*3600 + minutes*60 ))
output_dir=/home/user/speicherort
timeout $duration yt-dlp -q --no-part -P $output_dir -o ${output_filename}.%\(ext\)s $url
Quelle: Anonymus/Community (nicht bekannt)
Das Skript wird hier gespeichert als sender-aufnahme.sh.
Die Ausführung wird veranlasst durch Eintragung in die Crontab
xxxxxxxxxx
test@geraet:~$ crontab -e
xxxxxxxxxx
03 00 * * 7 /usr/bin/bash /home/user/speicherort/sender-aufnahme.sh
Danach ist die Ausführung im System anzumelden:
xxxxxxxxxx
test@geraet:~$ systemctl start cron.service
Damit der Cronjob so ausgeführt wird wie er geplant ist, sind auch der PATH und die Angaben zur SHELL einzutragen. Die Crontab sollte deshalb so aussehen:
xxxxxxxxxx
#Shell variable for cron
SHELL=/usr/bin/bash
#PATH variable for cron
Path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
#Kein Kommentar
03 00 * * 7 /usr/bin/bash /home/user/speicherort/sender-aufnahme.sh
Diese Angaben gelten für Linux in der Distribution Ubuntu 23.10. Für das eigene System lassen sich die Angaben ermitteln und entsprechend anpassen:
xxxxxxxxxx
echo "$PATH"
xxxxxxxxxx
which bash
Im Beispiel wurde in beiden Fällen als Ausführung von yt-dlp über die Kommandozeile und als Cronjob jeweils eine Datei erstellt: 20231203-000301-sender-titel.mp3.
Hinweis
Über LAN erfolgt die Ausführung fehlerfrei. Bei WLAN-Verbindungen können Fehler bei einzelnen Sendern auftreten (Error time out).
Die Nutzung von yt-dlp bedeutet:
Pro:
- stabile Aufnahme von Audiodateien über LAN
- die Aufnahme wird automatisch beendet
- das Programm ist für alle gängigen Betriebssysteme verfügbar
- vielfältige Hilfe durch die community.
Kontra:
- die Einstellungen sind vielfältig
- Verbindungsfehler über WLAN möglich.
Mit SoX, StreamRipper und Wget kann Internetradio ebenfalls in eine Datei aufgenommen werden. Hinweise hierzu enthalten die folgenden Blogbeiträge
Internetradio zeitgesteuert aufnehmen mit Sound eXchange
Internetradio zeitgesteuert aufnehmen mit StreamRipper
Internetradio zeitgesteuert aufnehmen mit Wget.
Die Programme Gnome-Audio-Recorder oder Audio-Recorder können unter Linux hierfür grundsätzlich eingesetzt werden, sind jedoch nicht immer verfügbar, weil die Installation in den unterschiedlichen Distributionen unter Umständen nicht möglich ist.
Mit Streamtuner2 und Audacious kann die Auswahl und das Abspielen der Sender vereinfacht werden (Linux).
Für welchen Zweck auch immer eine einzige Audio-Datei benötigt wird, mit wenigen Einstellungen lassen sich auch solche Dateien mit yt-dlp unter Linux zeitgerecht planen und erstellen. Das hilft vor allem dann, wenn andere Programme nicht zur Verfügung stehen.
Man Page
at: https://manpages.ubuntu.com/manpages/trusty/man1/at.1posix.html
yt-dlp: https://manpages.ubuntu.com/manpages/jammy/man1/yt-dlp.1.html
Prozesse beenden
Wolfgang Kirk
Veröffentlicht: 2023-12-04 aktualisiert: 2024-02-05, 11:40 Uhr