Blog Digitalgesellschaft Verwaltungsbetrieb Textarchiv Textarchiv Walter Kirk (✝) Impressum
Internetradio zeitgesteuert aufnehmen mit Sound eXchange
VorbemerkungInstallationAudioausgabegerätEinstellungenLivestreamTonausgabeSound eXchange (sox)Execute commands at a later time (at)AufnahmeAusgabePro und KontraWeitere MöglichkeitenVLCSonstigeZusammenfassungQuelle
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 das Programm Sound eXchange, Kurz: SoX, an (Linux, MacOS, Windows). Darüber hinaus ist es zweckmäßig, dass die Start- und Endzeit eingestellt werden kann.
Für SoX gibt es keine aktuell gehaltene GUI. Deshalb wird hier nur der Weg über die Kommandozeile aufgezeigt. Für zeitgerechte Aufnahmen können unter debian-basierten Linux-Distributionen das Programm SoX und die Anweisung at (execute commands at a later time) in Kombination genutzt werden.
Beide Programme können aus den Repositories heraus installiert werden:
test@geraet:~$ sudo apt install at sox libsox-fmt-all
Hierdurch werden die Programme at und sox sowie auch alle von sox unterstützen Formate installiert.
Zur Ermittlung der Audioausgabegeräte wird in einem Terminal eingegeben:
xxxxxxxxxx
test@geraet:~$ pactl list sources short
Das Ergebnis kann so aussehen:
xxxxxxxxxx
test@geraet:~$ pactl list short sources
578 alsa_output.pci-0000_00_1b.0.3.analog-stereo.monitor PipeWire s32le 2ch 48000Hz SUSPENDED
579 alsa_input.usb-Auna_Mic_CM900_Auna_Mic_CM900-00.3.mono-fallback PipeWire s16le 1ch 48000Hz SUSPENDED
629 alsa_output.usb-GeneralPlus_USB_Audio_Device-00.3.analog-stereo.monitor PipeWire s16le 2ch 48000Hz SUSPENDED
630 alsa_input.usb-GeneralPlus_USB_Audio_Device-00.3.mono-fallback PipeWire s16le 1ch 48000Hz SUSPENDED
720 alsa_output.pci-0000_00_03.0.3.hdmi-surround.monitor PipeWire s32le 6ch 48000Hz SUSPENDED
Für die Aufnahme wird hier alsa_output.pci-0000_00_03.0.3.hdmi-surround.monitor ausgewählt.
Für die Aufnahme ist es notwendig, einen Livestream zu starten. Für das Beispiel wird in Firefox die gewünschte URL geöffnet.
Im Beispiel ist In den Einstellungen die Ausgabe auf HDMI einzustellen.
Syntax
sox -c 5 -v 5 -t pulseaudio alsa_output.pci-0000_00_03.0.3.hdmi-surround.monitor -t wav /geraet/media/internet/`date +"%Y%m%d-%H%M%S"`-output.wav trim 0 3540
Erläuterung
-c = Anzahl der Kanäle. Ohne Angabe sind 2 voreingestellt.
-v = Lautstärke (Gain)
-t = Audiogerät
-t = Audioformat und Speicherort
`date +"%Y%m%d-%H%M%S"`- = timestamp im Format: 20230226-150500-output.wav
-trim = start (0) Aufnahmedauer in Sekunden (3540)
Tipp
Um die 4 GB Grenze des Microsoft .wav-Format zu umgehen, ersetzt man .wav durch .w64.
Syntax
echo sox -c 5 -v 5 - t pulseaudio Audioausgabe -t Audioformat /Speicherort trim Start Aufnahmedauer | at Zeit Tag
Mit ENTER wird die Aufnahme veranlasst. SoX 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 sox -c 5 -v 5 -t pulseaudio alsa_output.pci-0000_00_03.0.3.hdmi-surround.monitor -t wav /test/media/geraet/internet/`date +"%Y%m%d-%H%M%S"`-output.wav trim 0 3540 | at 15:05
warning: commands will be executed using /bin/sh
job 1 at Sat Feb 25 15:05:00 2023
Die Warnung hat in diesem Beispiel keine Bedeutung.
Mit dem o.a. Kommando wird eine Sendung um 15:05 Uhr im Umfang von 59 Minuten aufgezeichnet.
Anzeige der Aufgaben (Job-ID)
xxxxxxxxxx
test@geraet:~$ atq
1 Sat Feb 25 15:05:00 2023 a test
Im Beispiel ist die Job-ID 1
Löschen
xxxxxxxxxx
test@geraet:~$ atrm 1
SoX beenden
In diesem Beispiel kann SoX mit CTRL-C nicht so einfach gestoppt werden. Um dennoch den laufenden Prozess zu beenden, ist in einem Terminal einzugeben:
xxxxxxxxxx
test@geraet:~$ ps -A
PID TTY TIME CMD
1 ? 00:00:04 systemd
3058 pts/0 00:00:00 bash
3090 pts/0 00:00:00 sox
3108 pts/1 00:00:00 bash
3121 ? 00:00:00 update-notifier
3148 ? 00:00:02 apt-check
3157 pts/1 00:00:00 ps
Nummer für sox herausfinden (PID_Number) und dann eingeben:
xxxxxxxxxx
test@geraet:~$ kill -9 3090
Die Nummer 3090 ist den eigenen Verhältnissen anzupassen.
Im Beispiel wurde eine Datei erstellt: 20230226-150500-output.wav.
Die Nutzung von SoX und at bedeutet:
Pro:
- das Audioformat kann ausgewählt werden, z.B..flac, .mp3, .ogg, .wav
- die Aufnahme wird automatisch beendet
- das Mithören der Aufnahme ist möglich
Kontra:
- das Audioausgabegerät ist zu ermitteln
- der Livestream muss gestartet und beendet werden.
Im Hintergrund
Mit VLC als Client kann in einem Terminal ein Livestream im Hintergrund abgespielt werden.
Syntax
nvlc -I dummy --run-time 30 URL
nlvc -I dummy = Befehl für VLC ohne GUI
--run-time 30 = Dauer in Sekunden
URL = Internetradio Livestream Adresse
Beispiel
xxxxxxxxxx
test@geraet:~$ nvlc -I dummy --run-time 30 https://st02.sslstream.dlf.de/dlf/02/high/aac/stream.aac?aggregator=web
VLC media player 3.0.17.4 Vetinari (revision 3.0.13-8-g41878ff4f2)
[000055e366b90ec0] dummy interface: using the dummy interface module...
[00007f6fdc13aa70] mpeg4audio demux packetizer: AAC channels: 2 samplerate: 48000
Kommandozeile
Die Aufzeichnung mit dem Programm VLC ist ebenfalls möglich.
xxxxxxxxxx
test@geraet:~$ cvlc --run-time 300 "http://liveradio.swr.de/sw282p3/swr2/play.m3u" --sout "#duplicate{dst=std{access=file,mux=raw,dst=/home/nutzer/<Speicherort>/$(date +"%Y%m%d")-swr2-test.mp3}"
VLC media player 3.0.17.4 Vetinari (revision 3.0.13-8-g41878ff4f2)
[0000564bb6dfb290] dummy interface: using the dummy interface module...
[00007f6b2c0040d0] dummy mux: Open
[00007f6b2c0254b0] dummy mux: Open
[00007f6b2c024700] prefetch stream error: unimplemented query (264) in control
Die Warnung prefetch stream error hat im Beispiel keine Bedeutung
Mit StreamRipper und Wget kann Internetradio ebenfalls in eine Datei aufgenommen werden. Hinweise hierzu enthalten die folgenden Blogbeiträge
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.
Für zeitgesteuerte Aufnahmen kann auch der Befehl chron genutzt werden.
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 SoX 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
sox: https://linux.die.net/man/1/sox
Prozesse beenden
VLC Kommandozeile
https://ubuntuforums.org/archive/index.php/t-1359656.html
© Wolfgang Kirk
Stand: 2023-02-26, aktualisiert: 2023-03-23, 09:30 Uhr